From: Toni Wilen Date: Sat, 2 Nov 2013 18:33:11 +0000 (+0200) Subject: 2700b11 X-Git-Tag: 2700~6 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=ed431c90d436fc97372807a72c1709e5d1730e39;p=francis%2Fwinuae.git 2700b11 --- diff --git a/blkdev_cdimage.cpp b/blkdev_cdimage.cpp index f0bb1524..a4400b2f 100644 --- a/blkdev_cdimage.cpp +++ b/blkdev_cdimage.cpp @@ -379,6 +379,19 @@ static void *cdda_unpack_func (void *v) return 0; } +static void audio_unpack (struct cdunit *cdu, struct cdtoc *t) +{ + // 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); +} + static void *cdda_play_func (void *v) { int cdda_pos; @@ -423,20 +436,14 @@ static void *cdda_play_func (void *v) if (!t) { write_log (_T("IMAGE CDDA: illegal sector number %d\n"), cdu->cdda_start); setstate (cdu, AUDIO_STATUS_PLAY_ERROR); + } else { + audio_unpack (cdu, t); } } else { write_log (_T("IMAGE CDDA: playing from %d to %d, track %d ('%s', offset %lld, secoffset %d (%d))\n"), cdu->cdda_start, cdu->cdda_end, t->track, t->fname, t->offset, sector, t->index1); oldtrack = t->track; - // 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); + audio_unpack (cdu, t); } idleframes = cdu->cdda_delay_frames; while (cdu->cdda_paused && cdu->cdda_play > 0) { @@ -481,7 +488,8 @@ static void *cdda_play_func (void *v) sector = cdda_pos; struct cdtoc *t1 = findtoc (cdu, §or); - struct cdtoc *t2 = findtoc (cdu, §or + 2 * 75); + int tsector = cdda_pos + 2 * 75; + struct cdtoc *t2 = findtoc (cdu, &tsector); if (t1 != t2) { for (sector = cdda_pos; sector < cdda_pos + 2 * 75; sector++) { int sec = sector; @@ -526,6 +534,7 @@ static void *cdda_play_func (void *v) oldtrack = t->track; write_log (_T("IMAGE CDDA: track %d ('%s', offset %lld, secoffset %d (%d))\n"), t->track, t->fname, t->offset, sector, t->index1); + audio_unpack (cdu, t); } if (!(t->ctrl & 4)) { if (t->enctype == ENC_CHD) { diff --git a/custom.cpp b/custom.cpp index 3dfc420f..5156b1dd 100644 --- a/custom.cpp +++ b/custom.cpp @@ -390,6 +390,7 @@ static uae_u32 thisline_changed; static struct decision thisline_decision; static int fetch_cycle, fetch_modulo_cycle; +static int bitplane_dma_turned_on; enum plfstate { @@ -559,7 +560,7 @@ static void do_sprites (int currhp); static void remember_ctable (void) { - /* This can happen when program program crashes very badly */ + /* This can happen when program crashes very badly */ if (next_color_entry >= COLOR_TABLE_SIZE) return; if (remembered_color_entry < 0) { @@ -1052,12 +1053,10 @@ static void setup_fmodes (int hpos) fm_maxplane = 1 << fm_maxplane_shift; fetch_modulo_cycle = fetchunit - fetchstart; - // wacky pixels / raf megademo hires unaligned scroller feature - if ((thisline_decision.plfleft < 0) && bplcon0_res >= RES_HIRES) { - if (fetch_cycle & (fetchunit >> 1)) { - fetch_cycle &= ~(fetchunit_mask >> 1); - fetch_cycle += fetchunit; - } + if (thisline_decision.plfleft < 0) { + thisline_decision.bplres = bplcon0_res; + thisline_decision.bplcon0 = bplcon0; + thisline_decision.nr_planes = bplcon0_planes; } if (is_bitplane_dma (hpos - 1)) @@ -2148,8 +2147,10 @@ static void maybe_start_bpl_dma (int hpos) * 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)) + if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS)) { + bitplane_dma_turned_on = hpos; return; + } if (fetch_state != fetch_not_started) return; if (diwstate != DIW_waiting_stop) @@ -2202,7 +2203,7 @@ STATIC_INLINE void decide_line (int hpos) ok = 0; } if (ok && diwstate == DIW_waiting_stop) { - if (dmaen (DMA_BITPLANE)) { + if (dmaen (DMA_BITPLANE) && bitplane_dma_turned_on + 4 < hpos) { start_bpl_dma (hpos, plfstrt); estimate_last_fetch_cycle (plfstrt); } @@ -3001,6 +3002,7 @@ static void reset_decisions (void) ddfstrt_old_hpos = -1; bpldmawasactive = false; reset_bpldelays (); + bitplane_dma_turned_on = 0; if (plf_state > plf_active) plf_state = plf_idle; @@ -4203,7 +4205,7 @@ static void BPLCON0_Denise (int hpos, uae_u16 v, bool immediate) v |= 1; #endif - if (bplcon0d == v) + if (bplcon0d == v && !immediate) return; bplcon0dd = -1; @@ -8627,6 +8629,8 @@ void do_cycles_ce020 (unsigned long cycles) unsigned long c; int extra; + if (!cycles) + return; c = get_cycles (); extra = c & (CYCLE_UNIT - 1); if (extra) { @@ -8639,13 +8643,15 @@ void do_cycles_ce020 (unsigned long cycles) cycles -= extra; } c = cycles; - while (c >= CYCLE_UNIT) { + while (c) { int hpos = current_hpos () + 1; decide_line (hpos); sync_copper (hpos); decide_fetch_ce (hpos); if (bltstate != BLT_done) decide_blitter (hpos); + if (c < CYCLE_UNIT) + break; do_cycles (1 * CYCLE_UNIT); c -= CYCLE_UNIT; } diff --git a/gencpu.cpp b/gencpu.cpp index afe669e9..101c6b9f 100644 --- a/gencpu.cpp +++ b/gencpu.cpp @@ -59,6 +59,7 @@ static int optimized_flags; #define GF_LRMW 256 #define GF_NOFAULTPC 512 #define GF_RMW 1024 +#define GF_OPCE020 2048 /* 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 @@ -161,6 +162,10 @@ static int ir2irc; static int tail_ce020, total_ce020, head_in_ea_ce020; static bool head_ce020_cycs_done, tail_ce020_done; +static int subhead_ce020; +static instr *curi_ce020; +static bool no_prefetch_ce020; +static bool got_ea_ce020; static void fpulimit (void) { @@ -196,13 +201,13 @@ static void addcycles_ce020 (int cycles) static void get_prefetch_020 (void) { - if (!using_prefetch_020) + if (!using_prefetch_020 || no_prefetch_ce020) return; printf ("\tregs.irc = %s (%d);\n", prefetch_word, m68k_pc_offset); } static void get_prefetch_020_0 (void) { - if (!using_prefetch_020) + if (!using_prefetch_020 || no_prefetch_ce020) return; printf ("\tregs.irc = %s (0);\n", prefetch_word); } @@ -222,12 +227,14 @@ static void returntail (bool iswrite) } if (!tail_ce020_done) { total_ce020 -= 2; +#if 0 if (iswrite) { printf("\t/* C - %d = %d */\n", memory_cycle_cnt, total_ce020 - memory_cycle_cnt); total_ce020 -= memory_cycle_cnt; } else { printf("\t/* C = %d */\n", total_ce020); } +#endif if (0 && total_ce020 <= 0) { printf ("\t/* C was zero */\n"); total_ce020 = 1; @@ -261,10 +268,14 @@ static void returntail (bool iswrite) static void returncycles (char *s, int cycles) { if (using_ce || using_ce020) { - if (tail_ce020 == 1) +#if 0 + if (tail_ce020 == 0) + printf ("\tregs.ce020memcycles -= 2 * cpucycleunit; /* T=0 */ \n"); + else if (tail_ce020 == 1) printf ("\tregs.ce020memcycles -= 1 * cpucycleunit; /* T=1 */ \n"); else if (tail_ce020 == 2) - printf ("\tregs.ce020memcycles -= 2 * cpucycleunit; /* T=2 */\n"); + printf ("\tregs.ce020memcycles -= 0 * cpucycleunit; /* T=2 */\n"); +#endif printf ("%sreturn;\n", s); return; } @@ -544,7 +555,9 @@ static void fill_prefetch_full (void) irc2ir (); fill_prefetch_1 (2); } else if (using_prefetch_020) { - did_prefetch = 1; + did_prefetch = 2; + total_ce020 -= 4; + returntail (false); if (cpu_level >= 3) printf ("\tfill_prefetch_030 ();\n"); else if (cpu_level == 2) @@ -731,7 +744,28 @@ static void addopcycles_ce20 (int h, int t, int c, int subhead) head_cycs (h); //c = 0; +#if 0 + if (tail_ce020 == 1) + printf ("\tregs.ce020memcycles -= 1 * cpucycleunit; /* T=1 */ \n"); + else if (tail_ce020 == 2) + printf ("\tregs.ce020memcycles -= 2 * cpucycleunit; /* T=2 */\n"); +#endif + if (1 && !subhead && (h > 0 || t > 0 || c > 0) && got_ea_ce020) { + if (!did_prefetch) { + get_prefetch_020 (); + did_prefetch = 1; + } + if (1) { + if (h > 0) { + printf ("\tif (regs.ce020memcycles > %d * cpucycleunit)\n", h); + printf ("\t\tregs.ce020memcycles = %d * cpucycleunit;\n", h); + } else { + printf ("\tregs.ce020memcycles = 0;\n", h); + } + } + } +#if 0 if (tail_ce020 >= 0 && h >= 0 && head_in_ea_ce020 == 0) { int largest = tail_ce020 > h ? tail_ce020: h; if (tail_ce020 != h) { @@ -758,6 +792,7 @@ static void addopcycles_ce20 (int h, int t, int c, int subhead) #endif } else if (h) { printf ("\t/* ea tail == op head (%d) */\n", h); + printf ("\tregs.ce020memcycles -= %d * cpucycleunit;\n", h); printf ("\tif (regs.ce020memcycles < 0) {\n"); //printf ("\t\tx_do_cycles (-regs.ce020memcycles);\n"); @@ -765,6 +800,8 @@ static void addopcycles_ce20 (int h, int t, int c, int subhead) printf ("\t}\n"); } } +#endif + if (h < 0) h = 0; @@ -827,12 +864,21 @@ static void addcycles_ea_ce020 (char *ea, int h, int t, int c, int oph) h += oph; } } - if (0 && c > 0) { + + if (h) { + printf ("\tif (regs.ce020memcycles > %d * cpucycleunit)\n", h); + printf ("\t\tregs.ce020memcycles = %d * cpucycleunit;\n", h); + } else { + printf ("\tregs.ce020memcycles = 0;\n", h); + } + + if (1 && c > 0) { printf ("\t%s (%d);\n", do_cycles, c); count_cycles += c; } tail_ce020 = t; head_in_ea_ce020 = oph; + got_ea_ce020 = true; // if (t > 0) // printf ("\tregs.ce020_tail = get_cycles () + %d * cpucycleunit;\n", t); } @@ -883,7 +929,7 @@ static int gence020cycles_fiea (instr *curi, wordsizes ssize, amodes dmode) SETCE020(8, 2, 10) break; case Ad16: // (d16,An) - case PC16: // (d16,PC,Xn) + case PC16: // (d16,PC) if (!l) SETCE020(2, 0, 4) else @@ -946,7 +992,7 @@ static int gence020cycles_ciea (instr *curi, wordsizes ssize, amodes dmode) SETCE020H(8, 0, 8) break; case Ad16: // (d16,An) - case PC16: // (d16,PC,Xn) + case PC16: // (d16,PC) if (!l) SETCE020H(4, 0, 4) else @@ -997,7 +1043,7 @@ static int gence020cycles_fea (amodes mode) SETCE020(4, 2, 6) break; case Ad16: // (d16,An) - case PC16: // (d16,PC,Xn) + case PC16: // (d16,PC) ws++; SETCE020(2, 2, 4) break; @@ -1043,7 +1089,7 @@ static int gence020cycles_cea (instr *curi, amodes mode) SETCE020H(4, 0, 4) break; case Ad16: // (d16,An) - case PC16: // (d16,PC,Xn) + case PC16: // (d16,PC) SETCE020H(2, 0, 2) break; case absw: @@ -1057,29 +1103,42 @@ static int gence020cycles_cea (instr *curi, amodes mode) return oph; } -static int gence020cycles_jea (amodes mode) +static int gence020cycles_jea (instr *curi, amodes mode) { - int h = 0, t = 0, c = 0; + int h = 0, t = 0, c = 0, oph = 0; switch (mode) { case Aind: // (An) - SETCE020(2, 0, 2) + SETCE020H(2, 0, 2) break; case Ad16: // (d16,An) - case PC16: // (d16,PC,Xn) - SETCE020(4, 0, 4) + case PC16: // (d16,PC) + SETCE020H(4, 0, 4) break; case absw: - SETCE020(2, 0, 2) + SETCE020H(2, 0, 2) break; case absl: - SETCE020(2, 0, 2) + SETCE020H(2, 0, 2) break; } - addcycles_ea_ce020 ("jea", h, t, c); - return 0; + addcycles_ea_ce020 ("jea", h, t, c, oph); + return oph; } +static void next_level_000 (void) +{ + if (next_cpu_level < 0) + next_cpu_level = 0; +} + +static void maybeaddop_ce020 (int flags) +{ + if (flags & GF_OPCE020) + addop_ce020 (curi_ce020, subhead_ce020); +} + + /* 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 */ @@ -1133,6 +1192,7 @@ static void genamode2x (amodes mode, char *reg, wordsizes size, char *name, int default: term (); } + maybeaddop_ce020 (flags); syncmovepc (getv, flags); return; case Areg: @@ -1149,6 +1209,7 @@ static void genamode2x (amodes mode, char *reg, wordsizes size, char *name, int default: term (); } + maybeaddop_ce020 (flags); syncmovepc (getv, flags); return; case Aind: // (An) @@ -1214,28 +1275,25 @@ static void genamode2x (amodes mode, char *reg, wordsizes size, char *name, int } break; case Ad16: // (d16,An) - switch (fetchmode) - { - case fetchmode_fea: - case fetchmode_cea: - addcycles_ce020 (2); - break; - case fetchmode_jea: - addcycles_ce020 (4); - break; - } printf ("\tuaecptr %sa;\n", name); add_mmu040_movem (movem); printf ("\t%sa = m68k_areg (regs, %s) + (uae_s32)(uae_s16)%s;\n", name, reg, gen_nextiword (flags)); count_read_ea++; break; + case PC16: // (d16,PC) + printf ("\tuaecptr %sa;\n", name); + add_mmu040_movem (movem); + printf ("\t%sa = m68k_getpc () + %d;\n", name, m68k_pc_offset); + printf ("\t%sa += (uae_s32)(uae_s16)%s;\n", name, gen_nextiword (flags)); + break; case Ad8r: // (d8,An,Xn) switch (fetchmode) { case fetchmode_fea: + addcycles_ce020 (4); + break; case fetchmode_cea: case fetchmode_jea: - addcycles_ce020 (4); break; } printf ("\tuaecptr %sa;\n", name); @@ -1249,35 +1307,23 @@ static void genamode2x (amodes mode, char *reg, wordsizes size, char *name, int insn_n_cycles += 4; printf ("\t%sa = %s (m68k_areg (regs, %s), %d);\n", name, disp020, reg, mmudisp020cnt++); } else { + printf ("\t%sa = %s (m68k_areg (regs, %s), %s);\n", name, disp000, reg, gen_nextiword (flags)); 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) + case PC8r: // (d8,PC,Xn) switch (fetchmode) { case fetchmode_fea: - case fetchmode_cea: - case fetchmode_jea: addcycles_ce020 (4); break; - } - printf ("\tuaecptr %sa;\n", name); - add_mmu040_movem (movem); - printf ("\t%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) - switch (fetchmode) - { - case fetchmode_fea: case fetchmode_cea: - addcycles_ce020 (4); + case fetchmode_jea: break; } printf ("\tuaecptr tmppc;\n"); @@ -1333,6 +1379,7 @@ static void genamode2x (amodes mode, char *reg, wordsizes size, char *name, int default: term (); } + maybeaddop_ce020 (flags); syncmovepc (getv, flags); return; case imm0: @@ -1340,6 +1387,7 @@ static void genamode2x (amodes mode, char *reg, wordsizes size, char *name, int term (); printf ("\tuae_s8 %s = %s;\n", name, gen_nextibyte (flags)); count_read_ea++; + maybeaddop_ce020 (flags); syncmovepc (getv, flags); return; case imm1: @@ -1347,6 +1395,7 @@ static void genamode2x (amodes mode, char *reg, wordsizes size, char *name, int term (); printf ("\tuae_s16 %s = %s;\n", name, gen_nextiword (flags)); count_read_ea++; + maybeaddop_ce020 (flags); syncmovepc (getv, flags); return; case imm2: @@ -1354,12 +1403,14 @@ static void genamode2x (amodes mode, char *reg, wordsizes size, char *name, int term (); gen_nextilong ("uae_s32", name, flags); count_read_ea += 2; + maybeaddop_ce020 (flags); syncmovepc (getv, flags); return; case immi: if (getv != 1) term (); printf ("\tuae_u32 %s = %s;\n", name, reg); + maybeaddop_ce020 (flags); syncmovepc (getv, flags); return; default: @@ -1367,6 +1418,7 @@ static void genamode2x (amodes mode, char *reg, wordsizes size, char *name, int } syncmovepc (getv, flags); + maybeaddop_ce020 (flags); /* We get here for all non-reg non-immediate addressing modes to * actually fetch the value. */ @@ -1489,7 +1541,7 @@ static void genamode (instr *curi, amodes mode, char *reg, wordsizes size, char subhead = gence020cycles_cea (curi, mode); break; case fetchmode_jea: - subhead = gence020cycles_jea (mode); + subhead = gence020cycles_jea (curi, mode); break; } genamode2x (mode, reg, size, name, getv, movem, flags, curi->fetchmode); @@ -1518,14 +1570,18 @@ static void genamodedual (instr *curi, amodes smode, char *sreg, wordsizes ssize amodes dmode, char *dreg, wordsizes dsize, char *dname, int dgetv, int dflags) { int subhead = 0; + bool eadmode = false; + if (using_ce020) { switch (curi->fetchmode) { case fetchmode_fea: - if (smode >= imm || isreg (smode)) + if (smode >= imm || isreg (smode)) { subhead = gence020cycles_fea (dmode); - else + eadmode = true; + } else { subhead = gence020cycles_fea (smode); + } break; case fetchmode_cea: subhead = gence020cycles_cea (curi, smode); @@ -1537,17 +1593,19 @@ static void genamodedual (instr *curi, amodes smode, char *sreg, wordsizes ssize subhead = gence020cycles_ciea (curi, ssize, dmode); break; case fetchmode_jea: - subhead = gence020cycles_jea (smode); + subhead = gence020cycles_jea (curi, smode); break; default: printf ("\t/* No EA */\n"); break; } } + subhead_ce020 = subhead; + curi_ce020 = curi; genamode3 (curi, smode, sreg, ssize, sname, sgetv, 0, sflags); - genamode3 (NULL, dmode, dreg, dsize, dname, dgetv, 0, dflags); - if (using_ce020) - addop_ce020 (curi, subhead); + genamode3 (NULL, dmode, dreg, dsize, dname, dgetv, 0, dflags | (eadmode == true ? GF_OPCE020 : 0)); + if (eadmode == false) + maybeaddop_ce020 (GF_OPCE020); } static void genastore_2 (char *from, amodes mode, char *reg, wordsizes size, char *to, int store_dir, int flags) @@ -2398,6 +2456,8 @@ static void resetvars (void) tail_ce020_done = false; head_in_ea_ce020 = 0; head_ce020_cycs_done = false; + no_prefetch_ce020 = false; + got_ea_ce020 = false; prefetch_long = NULL; srcli = NULL; @@ -2964,6 +3024,7 @@ static void gen_opcode (unsigned long int opcode) genastore ("newv", curi->smode, "srcreg", curi->size, "src"); break; case i_CLR: + next_level_000 (); genamode (curi, curi->smode, "srcreg", curi->size, "src", cpu_level == 0 ? 1 : 2, 0, 0); fill_prefetch_next (); if (isreg (curi->smode) && curi->size == sz_long) @@ -3141,15 +3202,18 @@ static void gen_opcode (unsigned long int opcode) fea = true; } } else if (curi->dmode == Ad16) { + // MOVE EA,(d16,An) h = 2; t = 0; c = 4; fea = true; } else if (curi->dmode == Ad8r) { h = 4; t = 0; c = 6; fea = true; } else if (curi->dmode == absw) { + // MOVE EA,xxx.W h = 2; t = 0; c = 4; fea = true; } else if (curi->dmode == absl) { + // MOVE EA,xxx.L h = 0; t = 0; c = 6; fea = true; } else { @@ -3536,6 +3600,7 @@ static void gen_opcode (unsigned long int opcode) tail_ce020_done = true; break; case i_JSR: // TODO: check stack write order + no_prefetch_ce020 = true; genamode (curi, curi->smode, "srcreg", curi->size, "src", 0, 0, GF_AA|GF_NOREFILL); start_brace (); printf ("\tuaecptr oldpc = m68k_getpc () + %d;\n", m68k_pc_offset); @@ -3572,6 +3637,7 @@ static void gen_opcode (unsigned long int opcode) fill_prefetch_next (); break; case i_JMP: + no_prefetch_ce020 = true; genamode (curi, 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"); @@ -3588,6 +3654,8 @@ static void gen_opcode (unsigned long int opcode) break; case i_BSR: // .b and .w confirmed + if (using_ce020) + no_prefetch_ce020 = true; printf ("\tuae_s32 s;\n"); if (curi->size == sz_long) { if (next_cpu_level < 1) @@ -3758,6 +3826,7 @@ static void gen_opcode (unsigned long int opcode) break; case i_Scc: // confirmed + next_level_000 (); genamode (curi, curi->smode, "srcreg", curi->size, "src", cpu_level == 0 ? 1 : 2, 0, 0); start_brace (); fill_prefetch_next(); @@ -3778,7 +3847,7 @@ static void gen_opcode (unsigned long int opcode) curi->dmode, "dstreg", sz_long, "dst", 1, 0); printf ("\tCLEAR_CZNV ();\n"); printf ("\tif (src == 0) {\n"); - if (cpu_level > 0) + if (cpu_level > 1) printf ("\t\tdivbyzero_special (0, dst);\n"); incpc ("%d", m68k_pc_offset); printf ("\t\tException (5);\n"); @@ -3821,7 +3890,7 @@ static void gen_opcode (unsigned long int opcode) curi->smode, "srcreg", sz_word, "src", 1, 0, curi->dmode, "dstreg", sz_long, "dst", 1, 0); printf ("\tif (src == 0) {\n"); - if (cpu_level > 0) + if (cpu_level > 1) printf ("\t\tdivbyzero_special (1, dst);\n"); incpc ("%d", m68k_pc_offset); printf ("\t\tException (5);\n"); @@ -4958,6 +5027,25 @@ static char *decodeEA (amodes mode, wordsizes size) return buffer; } +static char *m68k_cc[] = { + "T", + "F", + "HI", + "LS", + "CC", + "CS", + "NE", + "EQ", + "VC", + "VS", + "PL", + "MI", + "GE", + "LT", + "GT", + "LE" +}; + static char *outopcode (int opcode) { static char out[100]; @@ -4989,6 +5077,12 @@ static char *outopcode (int opcode) if (ins->suse) strcat (out,","); strcat (out, decodeEA (ins->dmode, ins->size)); } + if (ins->mnemo == i_DBcc || ins->mnemo == i_Scc || ins->mnemo == i_Bcc || ins->mnemo == i_TRAPcc) { + strcat (out, " ("); + strcat (out, m68k_cc[table68k[opcode].cc]); + strcat (out, ")"); + } + return out; } diff --git a/include/cpu_prefetch.h b/include/cpu_prefetch.h index 07c7bea1..bbc3155c 100644 --- a/include/cpu_prefetch.h +++ b/include/cpu_prefetch.h @@ -362,10 +362,7 @@ STATIC_INLINE void m68k_do_rts_ce (void) 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); + m68k_setpc (pc); } STATIC_INLINE void m68k_do_bsr_ce (uaecptr oldpc, uae_s32 offset) diff --git a/inputdevice.cpp b/inputdevice.cpp index 2df82d76..77202a3c 100644 --- a/inputdevice.cpp +++ b/inputdevice.cpp @@ -3436,6 +3436,7 @@ static int switchdevice (struct uae_input_device *id, int num, bool buttonmode) int flags = 0; TCHAR *name = NULL; int otherbuttonpressed = 0; + int acc = input_acquired; //write_log (_T("switchdevice '%s' %d %d\n"), id->name, num, buttonmode); @@ -3507,9 +3508,12 @@ static int switchdevice (struct uae_input_device *id, int num, bool buttonmode) } #endif write_log (_T("inputdevice change '%s':%d->%d\n"), name, num, newport); + inputdevice_unacquire (); inputdevice_joyport_config (&changed_prefs, name, newport, -1, 2); inputdevice_validate_jports (&changed_prefs, -1); inputdevice_copyconfig (&changed_prefs, &currprefs); + if (acc) + inputdevice_acquire (TRUE); return 1; } } @@ -3570,9 +3574,12 @@ static int switchdevice (struct uae_input_device *id, int num, bool buttonmode) } } write_log (_T("inputdevice change '%s':%d->%d\n"), name, num, newport); + inputdevice_unacquire (); inputdevice_copyconfig (&currprefs, &changed_prefs); inputdevice_validate_jports (&changed_prefs, -1); inputdevice_copyconfig (&changed_prefs, &currprefs); + if (acc) + inputdevice_acquire (TRUE); return 1; } return 0; @@ -3776,6 +3783,7 @@ static void setbuttonstateall (struct uae_input_device *id, struct uae_input_dev return; if (!id->enabled) { frame_time_t t = read_processor_time (); + if (buttonstate) { switchdevice_timeout = t; } else { @@ -6684,8 +6692,30 @@ void setjoystickstate (int joy, int axis, int state, int max) if (input_play) return; if (!joysticks[joy].enabled) { - if (v1 && v1 != v2) - switchdevice (&joysticks[joy], v1 < 0 ? 0 : 1, false); + if (v1 > 0) + v1 = 1; + else if (v1 < 0) + v1 = -1; + if (v2 > 0) + v2 = 1; + else if (v2 < 0) + v2 = -1; + if (v1 && v1 != v2) { + static int prevdir; + static struct timeval tv1; + struct timeval tv2; + gettimeofday (&tv2, NULL); + if ((uae_s64)tv2.tv_sec * 1000000 + tv2.tv_usec < (uae_s64)tv1.tv_sec * 1000000 + tv1.tv_usec + 500000 && prevdir == v1) { + switchdevice (&joysticks[joy], v1 < 0 ? 0 : 1, false); + tv1.tv_sec = 0; + tv1.tv_usec = 0; + prevdir = 0; + } else { + tv1.tv_sec = tv2.tv_sec; + tv1.tv_usec = tv2.tv_usec; + prevdir = v1; + } + } return; } for (i = 0; i < MAX_INPUT_SUB_EVENT; i++) { @@ -6930,24 +6960,22 @@ void inputdevice_validate_jports (struct uae_prefs *p, int changedport) } } -static bool inputdevice_inserted (struct uae_prefs *p, int portnum, int id, int mode, int type) +static void inputdevice_inserted (struct uae_prefs *p, int portnum, int id, int mode, int type) { for (int k = 0; k < MAX_JPORTS; k++) { if (p->jports[k].id == id && k != portnum) { if (type == IDTYPE_JOYSTICK) { // if this joystick is already in port 0, reset port 0 back to original - // and insert joystick in port 1. Probably what user wanted. if (k == 0 && portnum == 1) { memcpy (&p->jports[0], &stored_ports[0], sizeof (struct jport)); - return false; + return; } } else if (type == IDTYPE_MOUSE) { - return true; + return; } - return true; + return; } } - return false; } void store_inputdevice_config (struct uae_prefs *p) @@ -6979,17 +7007,25 @@ int inputdevice_joyport_config (struct uae_prefs *p, const TCHAR *value, int por } 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))) { - if (!inputdevice_inserted (p, portnum, idnum + 1, mode, type)) { - p->jports[portnum].id = idnum + i; - if (mode >= 0) - p->jports[portnum].mode = mode; - set_config_changed (); - return 1; - } - return 0; + if (name2 && !_tcscmp (name2, value)) { + inputdevice_inserted (p, portnum, idnum + i, mode, type); + p->jports[portnum].id = idnum + i; + if (mode >= 0) + p->jports[portnum].mode = mode; + set_config_changed (); + return 1; + } + } + for (i = 0; i < idf->get_num (); i++) { + TCHAR *name1 = idf->get_friendlyname (i); + if (name1 && !_tcscmp (name1, value)) { + inputdevice_inserted (p, portnum, idnum + i, mode, type); + p->jports[portnum].id = idnum + i; + if (mode >= 0) + p->jports[portnum].mode = mode; + set_config_changed (); + return 1; } } } @@ -7038,8 +7074,7 @@ int inputdevice_joyport_config (struct uae_prefs *p, const TCHAR *value, int por } } if (got == 2) { - if (inputdevice_inserted (p, portnum, start, mode, type)) - return 0; + inputdevice_inserted (p, portnum, start, mode, type); p->jports[portnum].id = start; if (mode >= 0) p->jports[portnum].mode = mode; diff --git a/main.cpp b/main.cpp index 6e3df6fa..99ee5293 100644 --- a/main.cpp +++ b/main.cpp @@ -148,6 +148,8 @@ void discard_prefs (struct uae_prefs *p, int type) static void fixup_prefs_dim2 (struct wh *wh) { + if (wh->special) + return; if (wh->width < 160) { error_log (_T("Width (%d) must be at least 128."), wh->width); wh->width = 160; @@ -299,6 +301,7 @@ void fixup_prefs (struct uae_prefs *p) || (p->fastmem_size != 0 && (p->fastmem_size < 0x100000 || p->fastmem_size > 0x800000))) { error_log (_T("Unsupported fastmem size %d (0x%x)."), p->fastmem_size, p->fastmem_size); + p->fastmem_size = 0; err = 1; } if (p->rtgmem_size > max_z3fastmem && p->rtgmem_type == GFXBOARD_UAE_Z3) { diff --git a/newcpu.cpp b/newcpu.cpp index 029b90dd..6e2d3e98 100644 --- a/newcpu.cpp +++ b/newcpu.cpp @@ -738,6 +738,7 @@ static void set_x_funcs (void) x_do_cycles_pre = do_cycles; x_do_cycles_post = do_cycles_post; } else if (currprefs.cpu_model < 68020) { + // 68000/010 if (currprefs.cpu_cycle_exact) { x_prefetch = get_word_ce000_prefetch; x_prefetch_long = NULL; @@ -992,7 +993,7 @@ bool set_cpu_tracer (bool state) return is_cpu_tracer (); } -static void set_cpu_caches (void) +static void set_cpu_caches (bool flush) { int i; @@ -1012,7 +1013,7 @@ static void set_cpu_caches (void) } #endif if (currprefs.cpu_model == 68020) { - if (regs.cacr & 0x08) { // clear instr cache + if ((regs.cacr & 0x08) || flush) { // clear instr cache for (i = 0; i < CACHELINES020; i++) caches020[i].valid = 0; } @@ -1022,7 +1023,7 @@ static void set_cpu_caches (void) } } else if (currprefs.cpu_model == 68030) { //regs.cacr |= 0x100; - if (regs.cacr & 0x08) { // clear instr cache + if ((regs.cacr & 0x08) || flush) { // clear instr cache for (i = 0; i < CACHELINES030; i++) { icaches030[i].valid[0] = 0; icaches030[i].valid[1] = 0; @@ -1034,7 +1035,7 @@ static void set_cpu_caches (void) icaches030[(regs.caar >> 4) & (CACHELINES030 - 1)].valid[(regs.caar >> 2) & 3] = 0; regs.cacr &= ~0x04; } - if (regs.cacr & 0x800) { // clear data cache + if ((regs.cacr & 0x800) || flush) { // clear data cache for (i = 0; i < CACHELINES030; i++) { dcaches030[i].valid[0] = 0; dcaches030[i].valid[1] = 0; @@ -1231,7 +1232,7 @@ static void build_cpufunctbl (void) #ifdef JIT build_comp (); #endif - set_cpu_caches (); + set_cpu_caches (true); } #define CYCLES_DIV 8192 @@ -1313,11 +1314,10 @@ void check_prefs_changed_cpu (void) || currprefs.fpu_no_unimplemented != changed_prefs.fpu_no_unimplemented || currprefs.cpu_compatible != changed_prefs.cpu_compatible || currprefs.cpu_cycle_exact != changed_prefs.cpu_cycle_exact) { - bool doprefetch = !currprefs.cpu_compatible && changed_prefs.cpu_compatible; + prefs_changed_cpu (); - if (doprefetch) - fill_prefetch (); build_cpufunctbl (); + fill_prefetch (); changed = true; } if (changed @@ -3004,7 +3004,7 @@ int m68k_move2c (int regno, uae_u32 *regp) else if (currprefs.cpu_model == 68060) cacr_mask = 0xf8e0e000; regs.cacr = *regp & cacr_mask; - set_cpu_caches (); + set_cpu_caches (false); } break; /* 68040/060 only */ @@ -3422,7 +3422,7 @@ static void m68k_reset (bool hardreset) mmu_tt_modified (); if (currprefs.cpu_model == 68020) { regs.cacr |= 8; - set_cpu_caches (); + set_cpu_caches (false); } mmufixup[0].reg = -1; @@ -4715,6 +4715,8 @@ static void m68k_run_2ce (void) if (regs.irc == 0xffff) gui_message (_T("OPCODE %04X HAS FAULTY PREFETCH!"), prevopcode); + //write_log (_T("%x %04x\n"), r->instruction_pc, regs.irc); + opcode = regs.irc; prevopcode = opcode; regs.irc = 0xffff; @@ -4781,7 +4783,7 @@ cont: #ifdef CPUEMU_20 -// only opcode fetch prefetch +// only opcode fetch prefetch (030+ more compatible) static void m68k_run_2pf (void) { struct regstruct *r = ®s; @@ -4810,7 +4812,7 @@ static void m68k_run_2pf (void) } } -// full prefetch 020+ +// full prefetch 020 (more compatible) static void m68k_run_2p (void) { struct regstruct *r = ®s; @@ -5653,7 +5655,7 @@ uae_u8 *restore_cpu (uae_u8 *src) if (khz > 0 && khz < 800000) currprefs.m68k_speed = changed_prefs.m68k_speed = 0; } - set_cpu_caches (); + set_cpu_caches (true); if (flags & 0x40000000) { if (model == 68020) { for (int i = 0; i < CACHELINES020; i++) { @@ -6945,12 +6947,14 @@ void fill_prefetch (void) { if (currprefs.cachesize) return; - uaecptr pc = m68k_getpc (); if (currprefs.cpu_model == 68020) { fill_prefetch_020 (); } else if (currprefs.cpu_model == 68030) { + if (!currprefs.cpu_cycle_exact) + return; fill_prefetch_030 (); } else if (currprefs.cpu_model <= 68010) { + uaecptr pc = m68k_getpc (); regs.ir = x_get_word (pc); regs.irc = x_get_word (pc + 2); } diff --git a/od-win32/dinput.cpp b/od-win32/dinput.cpp index 1bcbbcfe..5053403a 100644 --- a/od-win32/dinput.cpp +++ b/od-win32/dinput.cpp @@ -219,7 +219,6 @@ static uae_u32 get_leds (void) if (currprefs.win32_kbledmode) { oldleds = led; } else if (!currprefs.win32_kbledmode && kbhandle != INVALID_HANDLE_VALUE) { -#ifdef WINDDK KEYBOARD_INDICATOR_PARAMETERS InputBuffer; KEYBOARD_INDICATOR_PARAMETERS OutputBuffer; ULONG DataLength = sizeof(KEYBOARD_INDICATOR_PARAMETERS); @@ -237,7 +236,6 @@ static uae_u32 get_leds (void) led |= KBLED_CAPSLOCKM; if (OutputBuffer.LedFlags & KEYBOARD_SCROLL_LOCK_ON) led |= KBLED_SCROLLLOCKM; -#endif } return led; } @@ -264,7 +262,6 @@ static void set_leds (uae_u32 led) oldleds ^= KBLED_SCROLLLOCKM; } } else if (kbhandle != INVALID_HANDLE_VALUE) { -#ifdef WINDDK KEYBOARD_INDICATOR_PARAMETERS InputBuffer; ULONG DataLength = sizeof(KEYBOARD_INDICATOR_PARAMETERS); ULONG ReturnedLength; @@ -279,7 +276,6 @@ static void set_leds (uae_u32 led) if (!DeviceIoControl (kbhandle, IOCTL_KEYBOARD_SET_INDICATORS, &InputBuffer, DataLength, NULL, 0, &ReturnedLength, NULL)) write_log (_T("kbleds: DeviceIoControl() failed %d\n"), GetLastError()); -#endif } } @@ -3144,7 +3140,6 @@ static int acquire_kb (int num, int flags) lpdi = di_keyboard[num].lpdi; unacquire (lpdi, _T("keyboard")); if (currprefs.keyboard_leds_in_use) { -#ifdef WINDDK if (!currprefs.win32_kbledmode) { if (DefineDosDevice (DDD_RAW_TARGET_PATH, _T("Kbd"), _T("\\Device\\KeyboardClass0"))) { kbhandle = CreateFile (_T("\\\\.\\Kbd"), GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); @@ -3157,9 +3152,6 @@ static int acquire_kb (int num, int flags) write_log (_T("kbled: DefineDosDevice failed, error %d\n"), GetLastError()); } } -#else - currprefs.kbledmode = 1; -#endif oldleds = get_leds (); if (oldusedleds < 0) oldusedleds = newleds = oldleds; @@ -3206,13 +3198,11 @@ static void unacquire_kb (int num) set_leds (oldleds); oldusedleds = oldleds; } -#ifdef WINDDK if (kbhandle != INVALID_HANDLE_VALUE) { CloseHandle (kbhandle); DefineDosDevice (DDD_REMOVE_DEFINITION, _T("Kbd"), NULL); kbhandle = INVALID_HANDLE_VALUE; } -#endif } //unlock_kb (); } diff --git a/od-win32/genblitter_msvc/genblitter_msvc.vcxproj b/od-win32/genblitter_msvc/genblitter_msvc.vcxproj index b809cd2a..25ad4fc5 100644 --- a/od-win32/genblitter_msvc/genblitter_msvc.vcxproj +++ b/od-win32/genblitter_msvc/genblitter_msvc.vcxproj @@ -49,7 +49,7 @@ Application false Unicode - v110 + v120_xp Application diff --git a/od-win32/lib/prowizard.lib b/od-win32/lib/prowizard.lib index 9bb893f1..814ab717 100644 Binary files a/od-win32/lib/prowizard.lib and b/od-win32/lib/prowizard.lib differ diff --git a/od-win32/prowizard/prowizard.vcxproj b/od-win32/prowizard/prowizard.vcxproj index 7b22e7ac..15276016 100644 --- a/od-win32/prowizard/prowizard.vcxproj +++ b/od-win32/prowizard/prowizard.vcxproj @@ -36,7 +36,7 @@ StaticLibrary Unicode false - v110 + v120_xp StaticLibrary diff --git a/od-win32/srcrelease.cmd b/od-win32/srcrelease.cmd index f3a27172..103398c9 100644 --- a/od-win32/srcrelease.cmd +++ b/od-win32/srcrelease.cmd @@ -167,7 +167,11 @@ rm -rf release rm -rf fullrelease cd .. -rm -rf lib +cd wix +rm -rf bin +rm -rf obj +cd .. + cd .. diff --git a/od-win32/uaeunp/uaeunp.vcxproj b/od-win32/uaeunp/uaeunp.vcxproj index 2124ae26..759de7b5 100644 --- a/od-win32/uaeunp/uaeunp.vcxproj +++ b/od-win32/uaeunp/uaeunp.vcxproj @@ -35,7 +35,7 @@ Application Unicode - v110 + v120 diff --git a/od-win32/unpackers/unpackers.vcxproj b/od-win32/unpackers/unpackers.vcxproj index c10ff8ea..71634aec 100644 --- a/od-win32/unpackers/unpackers.vcxproj +++ b/od-win32/unpackers/unpackers.vcxproj @@ -49,7 +49,7 @@ false false Unicode - v110 + v120_xp StaticLibrary diff --git a/od-win32/win32.h b/od-win32/win32.h index 91cd0c65..b31745de 100644 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -19,11 +19,11 @@ #define LANG_DLL 1 #if WINUAEPUBLICBETA -#define WINUAEBETA _T("10") +#define WINUAEBETA _T("11") #else #define WINUAEBETA _T("") #endif -#define WINUAEDATE MAKEBD(2013, 10, 26) +#define WINUAEDATE MAKEBD(2013, 11, 2) #define WINUAEEXTRA _T("") //#define WINUAEEXTRA _T("AmiKit Preview") //#define WINUAEEXTRA _T("Amiga Forever Edition") diff --git a/od-win32/win32gui.cpp b/od-win32/win32gui.cpp index 881810a8..efeaeae3 100644 --- a/od-win32/win32gui.cpp +++ b/od-win32/win32gui.cpp @@ -14719,7 +14719,7 @@ static INT_PTR CALLBACK hw3dDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM } case IDC_FILTERKEEPAUTOSCALEASPECT: { - workprefs.gfx_filter_keep_autoscale_aspect = currprefs.gfx_filter_keep_autoscale_aspect = ischecked (hDlg, IDC_FILTERKEEPAUTOSCALEASPECT) ? 10 : 0; + workprefs.gfx_filter_keep_autoscale_aspect = currprefs.gfx_filter_keep_autoscale_aspect = ischecked (hDlg, IDC_FILTERKEEPAUTOSCALEASPECT) ? 1 : 0; enable_for_hw3ddlg (hDlg); values_to_hw3ddlg (hDlg); updatedisplayarea (); diff --git a/od-win32/winuae_msvc11/winuae_msvc.sln b/od-win32/winuae_msvc11/winuae_msvc.sln index 81261be7..ff3b6587 100644 --- a/od-win32/winuae_msvc11/winuae_msvc.sln +++ b/od-win32/winuae_msvc11/winuae_msvc.sln @@ -1,5 +1,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 +# Visual Studio 2013 +VisualStudioVersion = 12.0.21005.1 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winuae", "winuae_msvc.vcxproj", "{4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gencpu", "..\gencpu_msvc\gencpu_msvc.vcxproj", "{DEF7ACF7-050E-4069-BB99-5B5D93F60521}" @@ -30,146 +32,422 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "prowizard", "..\prowizard\p EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unpackers", "..\unpackers\unpackers.vcxproj", "{98BA115B-829F-4085-9729-ABD0D779A60A}" EndProject +Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "wix", "..\wix\wix.wixproj", "{BE211CE1-3955-4674-A664-5038FC791980}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Mixed Platforms = Debug|Mixed Platforms Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + FullRelease|Mixed Platforms = FullRelease|Mixed Platforms FullRelease|Win32 = FullRelease|Win32 FullRelease|x64 = FullRelease|x64 + FullRelease|x86 = FullRelease|x86 + Release|Mixed Platforms = Release|Mixed Platforms Release|Win32 = Release|Win32 Release|x64 = Release|x64 + Release|x86 = Release|x86 + Test|Mixed Platforms = Test|Mixed Platforms Test|Win32 = Test|Win32 Test|x64 = Test|x64 + Test|x86 = Test|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Debug|Win32.ActiveCfg = Debug|Win32 {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Debug|Win32.Build.0 = Debug|Win32 {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Debug|x64.ActiveCfg = Debug|x64 {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Debug|x64.Build.0 = Debug|x64 + {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Debug|x86.ActiveCfg = Debug|Win32 + {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Debug|x86.Build.0 = Debug|Win32 + {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.FullRelease|Mixed Platforms.ActiveCfg = FullRelease|Win32 + {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.FullRelease|Mixed Platforms.Build.0 = FullRelease|Win32 {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.FullRelease|Win32.ActiveCfg = FullRelease|Win32 {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.FullRelease|Win32.Build.0 = FullRelease|Win32 {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.FullRelease|x64.ActiveCfg = FullRelease|x64 {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.FullRelease|x64.Build.0 = FullRelease|x64 + {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.FullRelease|x86.ActiveCfg = FullRelease|Win32 + {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.FullRelease|x86.Build.0 = FullRelease|Win32 + {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Release|Mixed Platforms.Build.0 = Release|Win32 {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Release|Win32.ActiveCfg = Release|Win32 {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Release|Win32.Build.0 = Release|Win32 {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Release|x64.ActiveCfg = Release|x64 {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Release|x64.Build.0 = Release|x64 + {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Release|x86.ActiveCfg = Release|Win32 + {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Release|x86.Build.0 = Release|Win32 + {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Test|Mixed Platforms.ActiveCfg = Test|Win32 + {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Test|Mixed Platforms.Build.0 = Test|Win32 {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Test|Win32.ActiveCfg = Test|Win32 {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Test|Win32.Build.0 = Test|Win32 {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Test|x64.ActiveCfg = Test|x64 {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Test|x64.Build.0 = Test|x64 + {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Test|x86.ActiveCfg = Test|Win32 + {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Test|x86.Build.0 = Test|Win32 + {DEF7ACF7-050E-4069-BB99-5B5D93F60521}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {DEF7ACF7-050E-4069-BB99-5B5D93F60521}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {DEF7ACF7-050E-4069-BB99-5B5D93F60521}.Debug|Win32.ActiveCfg = Debug|Win32 {DEF7ACF7-050E-4069-BB99-5B5D93F60521}.Debug|x64.ActiveCfg = Debug|Win32 + {DEF7ACF7-050E-4069-BB99-5B5D93F60521}.Debug|x86.ActiveCfg = Debug|Win32 + {DEF7ACF7-050E-4069-BB99-5B5D93F60521}.Debug|x86.Build.0 = Debug|Win32 + {DEF7ACF7-050E-4069-BB99-5B5D93F60521}.FullRelease|Mixed Platforms.ActiveCfg = FullRelease|Win32 + {DEF7ACF7-050E-4069-BB99-5B5D93F60521}.FullRelease|Mixed Platforms.Build.0 = FullRelease|Win32 {DEF7ACF7-050E-4069-BB99-5B5D93F60521}.FullRelease|Win32.ActiveCfg = FullRelease|Win32 {DEF7ACF7-050E-4069-BB99-5B5D93F60521}.FullRelease|x64.ActiveCfg = FullRelease|Win32 + {DEF7ACF7-050E-4069-BB99-5B5D93F60521}.FullRelease|x86.ActiveCfg = FullRelease|Win32 + {DEF7ACF7-050E-4069-BB99-5B5D93F60521}.FullRelease|x86.Build.0 = FullRelease|Win32 + {DEF7ACF7-050E-4069-BB99-5B5D93F60521}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {DEF7ACF7-050E-4069-BB99-5B5D93F60521}.Release|Mixed Platforms.Build.0 = Release|Win32 {DEF7ACF7-050E-4069-BB99-5B5D93F60521}.Release|Win32.ActiveCfg = Release|Win32 {DEF7ACF7-050E-4069-BB99-5B5D93F60521}.Release|x64.ActiveCfg = Release|Win32 + {DEF7ACF7-050E-4069-BB99-5B5D93F60521}.Release|x86.ActiveCfg = Release|Win32 + {DEF7ACF7-050E-4069-BB99-5B5D93F60521}.Release|x86.Build.0 = Release|Win32 + {DEF7ACF7-050E-4069-BB99-5B5D93F60521}.Test|Mixed Platforms.ActiveCfg = Test|Win32 + {DEF7ACF7-050E-4069-BB99-5B5D93F60521}.Test|Mixed Platforms.Build.0 = Test|Win32 {DEF7ACF7-050E-4069-BB99-5B5D93F60521}.Test|Win32.ActiveCfg = Test|Win32 {DEF7ACF7-050E-4069-BB99-5B5D93F60521}.Test|x64.ActiveCfg = Test|Win32 + {DEF7ACF7-050E-4069-BB99-5B5D93F60521}.Test|x86.ActiveCfg = Test|Win32 + {DEF7ACF7-050E-4069-BB99-5B5D93F60521}.Test|x86.Build.0 = Test|Win32 + {54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.Debug|Win32.ActiveCfg = Debug|Win32 {54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.Debug|x64.ActiveCfg = Debug|Win32 + {54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.Debug|x86.ActiveCfg = Debug|Win32 + {54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.Debug|x86.Build.0 = Debug|Win32 + {54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.FullRelease|Mixed Platforms.ActiveCfg = FullRelease|Win32 + {54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.FullRelease|Mixed Platforms.Build.0 = FullRelease|Win32 {54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.FullRelease|Win32.ActiveCfg = FullRelease|Win32 {54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.FullRelease|x64.ActiveCfg = FullRelease|Win32 + {54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.FullRelease|x86.ActiveCfg = FullRelease|Win32 + {54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.FullRelease|x86.Build.0 = FullRelease|Win32 + {54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.Release|Mixed Platforms.Build.0 = Release|Win32 {54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.Release|Win32.ActiveCfg = Release|Win32 {54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.Release|x64.ActiveCfg = Release|Win32 + {54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.Release|x86.ActiveCfg = Release|Win32 + {54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.Release|x86.Build.0 = Release|Win32 + {54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.Test|Mixed Platforms.ActiveCfg = Test|Win32 + {54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.Test|Mixed Platforms.Build.0 = Test|Win32 {54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.Test|Win32.ActiveCfg = Test|Win32 {54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.Test|x64.ActiveCfg = Test|Win32 + {54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.Test|x86.ActiveCfg = Test|Win32 + {54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.Test|x86.Build.0 = Test|Win32 + {765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.Debug|Win32.ActiveCfg = Debug|Win32 {765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.Debug|x64.ActiveCfg = Debug|Win32 + {765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.Debug|x86.ActiveCfg = Debug|Win32 + {765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.Debug|x86.Build.0 = Debug|Win32 + {765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.FullRelease|Mixed Platforms.ActiveCfg = FullRelease|Win32 + {765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.FullRelease|Mixed Platforms.Build.0 = FullRelease|Win32 {765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.FullRelease|Win32.ActiveCfg = FullRelease|Win32 {765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.FullRelease|x64.ActiveCfg = FullRelease|Win32 + {765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.FullRelease|x86.ActiveCfg = FullRelease|Win32 + {765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.FullRelease|x86.Build.0 = FullRelease|Win32 + {765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.Release|Mixed Platforms.Build.0 = Release|Win32 {765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.Release|Win32.ActiveCfg = Release|Win32 {765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.Release|x64.ActiveCfg = Release|Win32 + {765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.Release|x86.ActiveCfg = Release|Win32 + {765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.Release|x86.Build.0 = Release|Win32 + {765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.Test|Mixed Platforms.ActiveCfg = Test|Win32 + {765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.Test|Mixed Platforms.Build.0 = Test|Win32 {765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.Test|Win32.ActiveCfg = Test|Win32 {765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.Test|x64.ActiveCfg = Test|Win32 + {765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.Test|x86.ActiveCfg = Test|Win32 + {765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.Test|x86.Build.0 = Test|Win32 + {AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.Debug|Win32.ActiveCfg = Debug|Win32 {AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.Debug|x64.ActiveCfg = Debug|Win32 + {AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.Debug|x86.ActiveCfg = Debug|Win32 + {AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.Debug|x86.Build.0 = Debug|Win32 + {AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.FullRelease|Mixed Platforms.ActiveCfg = FullRelease|Win32 + {AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.FullRelease|Mixed Platforms.Build.0 = FullRelease|Win32 {AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.FullRelease|Win32.ActiveCfg = FullRelease|Win32 {AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.FullRelease|x64.ActiveCfg = FullRelease|Win32 + {AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.FullRelease|x86.ActiveCfg = FullRelease|Win32 + {AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.FullRelease|x86.Build.0 = FullRelease|Win32 + {AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.Release|Mixed Platforms.Build.0 = Release|Win32 {AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.Release|Win32.ActiveCfg = Release|Win32 {AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.Release|x64.ActiveCfg = Release|Win32 + {AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.Release|x86.ActiveCfg = Release|Win32 + {AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.Release|x86.Build.0 = Release|Win32 + {AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.Test|Mixed Platforms.ActiveCfg = Test|Win32 + {AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.Test|Mixed Platforms.Build.0 = Test|Win32 {AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.Test|Win32.ActiveCfg = Test|Win32 {AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.Test|x64.ActiveCfg = Test|Win32 + {AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.Test|x86.ActiveCfg = Test|Win32 + {AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.Test|x86.Build.0 = Test|Win32 + {DAF2EB1A-546A-41B3-9755-187562C01E3C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {DAF2EB1A-546A-41B3-9755-187562C01E3C}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {DAF2EB1A-546A-41B3-9755-187562C01E3C}.Debug|Win32.ActiveCfg = Debug|Win32 {DAF2EB1A-546A-41B3-9755-187562C01E3C}.Debug|x64.ActiveCfg = Debug|Win32 + {DAF2EB1A-546A-41B3-9755-187562C01E3C}.Debug|x86.ActiveCfg = Debug|Win32 + {DAF2EB1A-546A-41B3-9755-187562C01E3C}.Debug|x86.Build.0 = Debug|Win32 + {DAF2EB1A-546A-41B3-9755-187562C01E3C}.FullRelease|Mixed Platforms.ActiveCfg = FullRelease|Win32 + {DAF2EB1A-546A-41B3-9755-187562C01E3C}.FullRelease|Mixed Platforms.Build.0 = FullRelease|Win32 {DAF2EB1A-546A-41B3-9755-187562C01E3C}.FullRelease|Win32.ActiveCfg = FullRelease|Win32 {DAF2EB1A-546A-41B3-9755-187562C01E3C}.FullRelease|x64.ActiveCfg = FullRelease|Win32 + {DAF2EB1A-546A-41B3-9755-187562C01E3C}.FullRelease|x86.ActiveCfg = FullRelease|Win32 + {DAF2EB1A-546A-41B3-9755-187562C01E3C}.FullRelease|x86.Build.0 = FullRelease|Win32 + {DAF2EB1A-546A-41B3-9755-187562C01E3C}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {DAF2EB1A-546A-41B3-9755-187562C01E3C}.Release|Mixed Platforms.Build.0 = Release|Win32 {DAF2EB1A-546A-41B3-9755-187562C01E3C}.Release|Win32.ActiveCfg = Release|Win32 {DAF2EB1A-546A-41B3-9755-187562C01E3C}.Release|x64.ActiveCfg = Release|Win32 + {DAF2EB1A-546A-41B3-9755-187562C01E3C}.Release|x86.ActiveCfg = Release|Win32 + {DAF2EB1A-546A-41B3-9755-187562C01E3C}.Release|x86.Build.0 = Release|Win32 + {DAF2EB1A-546A-41B3-9755-187562C01E3C}.Test|Mixed Platforms.ActiveCfg = Test|Win32 + {DAF2EB1A-546A-41B3-9755-187562C01E3C}.Test|Mixed Platforms.Build.0 = Test|Win32 {DAF2EB1A-546A-41B3-9755-187562C01E3C}.Test|Win32.ActiveCfg = Test|Win32 {DAF2EB1A-546A-41B3-9755-187562C01E3C}.Test|x64.ActiveCfg = Test|Win32 + {DAF2EB1A-546A-41B3-9755-187562C01E3C}.Test|x86.ActiveCfg = Test|Win32 + {DAF2EB1A-546A-41B3-9755-187562C01E3C}.Test|x86.Build.0 = Test|Win32 + {C85288FB-A035-42CA-B5FB-8E6214319E97}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {C85288FB-A035-42CA-B5FB-8E6214319E97}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {C85288FB-A035-42CA-B5FB-8E6214319E97}.Debug|Win32.ActiveCfg = Debug|Win32 {C85288FB-A035-42CA-B5FB-8E6214319E97}.Debug|x64.ActiveCfg = Debug|Win32 + {C85288FB-A035-42CA-B5FB-8E6214319E97}.Debug|x86.ActiveCfg = Debug|Win32 + {C85288FB-A035-42CA-B5FB-8E6214319E97}.Debug|x86.Build.0 = Debug|Win32 + {C85288FB-A035-42CA-B5FB-8E6214319E97}.FullRelease|Mixed Platforms.ActiveCfg = FullRelease|Win32 + {C85288FB-A035-42CA-B5FB-8E6214319E97}.FullRelease|Mixed Platforms.Build.0 = FullRelease|Win32 {C85288FB-A035-42CA-B5FB-8E6214319E97}.FullRelease|Win32.ActiveCfg = FullRelease|Win32 {C85288FB-A035-42CA-B5FB-8E6214319E97}.FullRelease|x64.ActiveCfg = FullRelease|Win32 + {C85288FB-A035-42CA-B5FB-8E6214319E97}.FullRelease|x86.ActiveCfg = FullRelease|Win32 + {C85288FB-A035-42CA-B5FB-8E6214319E97}.FullRelease|x86.Build.0 = FullRelease|Win32 + {C85288FB-A035-42CA-B5FB-8E6214319E97}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {C85288FB-A035-42CA-B5FB-8E6214319E97}.Release|Mixed Platforms.Build.0 = Release|Win32 {C85288FB-A035-42CA-B5FB-8E6214319E97}.Release|Win32.ActiveCfg = Release|Win32 {C85288FB-A035-42CA-B5FB-8E6214319E97}.Release|x64.ActiveCfg = Release|Win32 + {C85288FB-A035-42CA-B5FB-8E6214319E97}.Release|x86.ActiveCfg = Release|Win32 + {C85288FB-A035-42CA-B5FB-8E6214319E97}.Release|x86.Build.0 = Release|Win32 + {C85288FB-A035-42CA-B5FB-8E6214319E97}.Test|Mixed Platforms.ActiveCfg = Test|Win32 + {C85288FB-A035-42CA-B5FB-8E6214319E97}.Test|Mixed Platforms.Build.0 = Test|Win32 {C85288FB-A035-42CA-B5FB-8E6214319E97}.Test|Win32.ActiveCfg = Test|Win32 {C85288FB-A035-42CA-B5FB-8E6214319E97}.Test|x64.ActiveCfg = Test|Win32 + {C85288FB-A035-42CA-B5FB-8E6214319E97}.Test|x86.ActiveCfg = Test|Win32 + {C85288FB-A035-42CA-B5FB-8E6214319E97}.Test|x86.Build.0 = Test|Win32 + {960E83B5-9118-4EBD-AF50-18EFC1DC764B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {960E83B5-9118-4EBD-AF50-18EFC1DC764B}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {960E83B5-9118-4EBD-AF50-18EFC1DC764B}.Debug|Win32.ActiveCfg = Debug|Win32 {960E83B5-9118-4EBD-AF50-18EFC1DC764B}.Debug|x64.ActiveCfg = Debug|Win32 + {960E83B5-9118-4EBD-AF50-18EFC1DC764B}.Debug|x86.ActiveCfg = Debug|Win32 + {960E83B5-9118-4EBD-AF50-18EFC1DC764B}.Debug|x86.Build.0 = Debug|Win32 + {960E83B5-9118-4EBD-AF50-18EFC1DC764B}.FullRelease|Mixed Platforms.ActiveCfg = FullRelease|Win32 + {960E83B5-9118-4EBD-AF50-18EFC1DC764B}.FullRelease|Mixed Platforms.Build.0 = FullRelease|Win32 {960E83B5-9118-4EBD-AF50-18EFC1DC764B}.FullRelease|Win32.ActiveCfg = FullRelease|Win32 {960E83B5-9118-4EBD-AF50-18EFC1DC764B}.FullRelease|x64.ActiveCfg = FullRelease|Win32 + {960E83B5-9118-4EBD-AF50-18EFC1DC764B}.FullRelease|x86.ActiveCfg = FullRelease|Win32 + {960E83B5-9118-4EBD-AF50-18EFC1DC764B}.FullRelease|x86.Build.0 = FullRelease|Win32 + {960E83B5-9118-4EBD-AF50-18EFC1DC764B}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {960E83B5-9118-4EBD-AF50-18EFC1DC764B}.Release|Mixed Platforms.Build.0 = Release|Win32 {960E83B5-9118-4EBD-AF50-18EFC1DC764B}.Release|Win32.ActiveCfg = Release|Win32 {960E83B5-9118-4EBD-AF50-18EFC1DC764B}.Release|x64.ActiveCfg = Release|Win32 + {960E83B5-9118-4EBD-AF50-18EFC1DC764B}.Release|x86.ActiveCfg = Release|Win32 + {960E83B5-9118-4EBD-AF50-18EFC1DC764B}.Release|x86.Build.0 = Release|Win32 + {960E83B5-9118-4EBD-AF50-18EFC1DC764B}.Test|Mixed Platforms.ActiveCfg = Test|Win32 + {960E83B5-9118-4EBD-AF50-18EFC1DC764B}.Test|Mixed Platforms.Build.0 = Test|Win32 {960E83B5-9118-4EBD-AF50-18EFC1DC764B}.Test|Win32.ActiveCfg = Test|Win32 {960E83B5-9118-4EBD-AF50-18EFC1DC764B}.Test|x64.ActiveCfg = Test|Win32 + {960E83B5-9118-4EBD-AF50-18EFC1DC764B}.Test|x86.ActiveCfg = Test|Win32 + {960E83B5-9118-4EBD-AF50-18EFC1DC764B}.Test|x86.Build.0 = Test|Win32 + {79BDABE6-5308-4D64-8884-A5A35909D8D3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {79BDABE6-5308-4D64-8884-A5A35909D8D3}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {79BDABE6-5308-4D64-8884-A5A35909D8D3}.Debug|Win32.ActiveCfg = Debug|Win32 {79BDABE6-5308-4D64-8884-A5A35909D8D3}.Debug|x64.ActiveCfg = Debug|Win32 + {79BDABE6-5308-4D64-8884-A5A35909D8D3}.Debug|x86.ActiveCfg = Debug|Win32 + {79BDABE6-5308-4D64-8884-A5A35909D8D3}.Debug|x86.Build.0 = Debug|Win32 + {79BDABE6-5308-4D64-8884-A5A35909D8D3}.FullRelease|Mixed Platforms.ActiveCfg = FullRelease|Win32 + {79BDABE6-5308-4D64-8884-A5A35909D8D3}.FullRelease|Mixed Platforms.Build.0 = FullRelease|Win32 {79BDABE6-5308-4D64-8884-A5A35909D8D3}.FullRelease|Win32.ActiveCfg = FullRelease|Win32 {79BDABE6-5308-4D64-8884-A5A35909D8D3}.FullRelease|x64.ActiveCfg = FullRelease|Win32 + {79BDABE6-5308-4D64-8884-A5A35909D8D3}.FullRelease|x86.ActiveCfg = FullRelease|Win32 + {79BDABE6-5308-4D64-8884-A5A35909D8D3}.FullRelease|x86.Build.0 = FullRelease|Win32 + {79BDABE6-5308-4D64-8884-A5A35909D8D3}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {79BDABE6-5308-4D64-8884-A5A35909D8D3}.Release|Mixed Platforms.Build.0 = Release|Win32 {79BDABE6-5308-4D64-8884-A5A35909D8D3}.Release|Win32.ActiveCfg = Release|Win32 {79BDABE6-5308-4D64-8884-A5A35909D8D3}.Release|x64.ActiveCfg = Release|Win32 + {79BDABE6-5308-4D64-8884-A5A35909D8D3}.Release|x86.ActiveCfg = Release|Win32 + {79BDABE6-5308-4D64-8884-A5A35909D8D3}.Release|x86.Build.0 = Release|Win32 + {79BDABE6-5308-4D64-8884-A5A35909D8D3}.Test|Mixed Platforms.ActiveCfg = Test|Win32 + {79BDABE6-5308-4D64-8884-A5A35909D8D3}.Test|Mixed Platforms.Build.0 = Test|Win32 {79BDABE6-5308-4D64-8884-A5A35909D8D3}.Test|Win32.ActiveCfg = Test|Win32 {79BDABE6-5308-4D64-8884-A5A35909D8D3}.Test|x64.ActiveCfg = Test|Win32 + {79BDABE6-5308-4D64-8884-A5A35909D8D3}.Test|x86.ActiveCfg = Test|Win32 + {79BDABE6-5308-4D64-8884-A5A35909D8D3}.Test|x86.Build.0 = Test|Win32 + {E9F73E11-A463-45C6-A733-2BED75852BA1}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {E9F73E11-A463-45C6-A733-2BED75852BA1}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {E9F73E11-A463-45C6-A733-2BED75852BA1}.Debug|Win32.ActiveCfg = Debug|Win32 {E9F73E11-A463-45C6-A733-2BED75852BA1}.Debug|x64.ActiveCfg = Debug|Win32 + {E9F73E11-A463-45C6-A733-2BED75852BA1}.Debug|x86.ActiveCfg = Debug|Win32 + {E9F73E11-A463-45C6-A733-2BED75852BA1}.Debug|x86.Build.0 = Debug|Win32 + {E9F73E11-A463-45C6-A733-2BED75852BA1}.FullRelease|Mixed Platforms.ActiveCfg = FullRelease|Win32 + {E9F73E11-A463-45C6-A733-2BED75852BA1}.FullRelease|Mixed Platforms.Build.0 = FullRelease|Win32 {E9F73E11-A463-45C6-A733-2BED75852BA1}.FullRelease|Win32.ActiveCfg = FullRelease|Win32 {E9F73E11-A463-45C6-A733-2BED75852BA1}.FullRelease|x64.ActiveCfg = FullRelease|Win32 + {E9F73E11-A463-45C6-A733-2BED75852BA1}.FullRelease|x86.ActiveCfg = FullRelease|Win32 + {E9F73E11-A463-45C6-A733-2BED75852BA1}.FullRelease|x86.Build.0 = FullRelease|Win32 + {E9F73E11-A463-45C6-A733-2BED75852BA1}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {E9F73E11-A463-45C6-A733-2BED75852BA1}.Release|Mixed Platforms.Build.0 = Release|Win32 {E9F73E11-A463-45C6-A733-2BED75852BA1}.Release|Win32.ActiveCfg = Release|Win32 {E9F73E11-A463-45C6-A733-2BED75852BA1}.Release|x64.ActiveCfg = Release|Win32 + {E9F73E11-A463-45C6-A733-2BED75852BA1}.Release|x86.ActiveCfg = Release|Win32 + {E9F73E11-A463-45C6-A733-2BED75852BA1}.Release|x86.Build.0 = Release|Win32 + {E9F73E11-A463-45C6-A733-2BED75852BA1}.Test|Mixed Platforms.ActiveCfg = Test|Win32 + {E9F73E11-A463-45C6-A733-2BED75852BA1}.Test|Mixed Platforms.Build.0 = Test|Win32 {E9F73E11-A463-45C6-A733-2BED75852BA1}.Test|Win32.ActiveCfg = Test|Win32 {E9F73E11-A463-45C6-A733-2BED75852BA1}.Test|x64.ActiveCfg = Test|Win32 + {E9F73E11-A463-45C6-A733-2BED75852BA1}.Test|x86.ActiveCfg = Test|Win32 + {E9F73E11-A463-45C6-A733-2BED75852BA1}.Test|x86.Build.0 = Test|Win32 + {38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.Debug|Win32.ActiveCfg = Debug|Win32 {38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.Debug|x64.ActiveCfg = Debug|Win32 + {38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.Debug|x86.ActiveCfg = Debug|Win32 + {38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.Debug|x86.Build.0 = Debug|Win32 + {38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.FullRelease|Mixed Platforms.ActiveCfg = Release|Win32 + {38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.FullRelease|Mixed Platforms.Build.0 = Release|Win32 {38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.FullRelease|Win32.ActiveCfg = Release|Win32 {38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.FullRelease|x64.ActiveCfg = Release|Win32 + {38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.FullRelease|x86.ActiveCfg = Release|Win32 + {38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.FullRelease|x86.Build.0 = Release|Win32 + {38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.Release|Mixed Platforms.Build.0 = Release|Win32 {38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.Release|Win32.ActiveCfg = Release|Win32 {38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.Release|x64.ActiveCfg = Release|Win32 + {38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.Release|x86.ActiveCfg = Release|Win32 + {38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.Release|x86.Build.0 = Release|Win32 + {38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.Test|Mixed Platforms.ActiveCfg = Test|Win32 + {38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.Test|Mixed Platforms.Build.0 = Test|Win32 {38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.Test|Win32.ActiveCfg = Test|Win32 {38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.Test|x64.ActiveCfg = Test|Win32 + {38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.Test|x86.ActiveCfg = Test|Win32 + {38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.Test|x86.Build.0 = Test|Win32 + {6181E50C-5F32-42DC-BEF6-827AA8A5429D}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {6181E50C-5F32-42DC-BEF6-827AA8A5429D}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {6181E50C-5F32-42DC-BEF6-827AA8A5429D}.Debug|Win32.ActiveCfg = Debug|Win32 {6181E50C-5F32-42DC-BEF6-827AA8A5429D}.Debug|x64.ActiveCfg = Debug|Win32 + {6181E50C-5F32-42DC-BEF6-827AA8A5429D}.Debug|x86.ActiveCfg = Debug|Win32 + {6181E50C-5F32-42DC-BEF6-827AA8A5429D}.Debug|x86.Build.0 = Debug|Win32 + {6181E50C-5F32-42DC-BEF6-827AA8A5429D}.FullRelease|Mixed Platforms.ActiveCfg = Release|Win32 + {6181E50C-5F32-42DC-BEF6-827AA8A5429D}.FullRelease|Mixed Platforms.Build.0 = Release|Win32 {6181E50C-5F32-42DC-BEF6-827AA8A5429D}.FullRelease|Win32.ActiveCfg = Release|Win32 {6181E50C-5F32-42DC-BEF6-827AA8A5429D}.FullRelease|x64.ActiveCfg = Release|Win32 + {6181E50C-5F32-42DC-BEF6-827AA8A5429D}.FullRelease|x86.ActiveCfg = Release|Win32 + {6181E50C-5F32-42DC-BEF6-827AA8A5429D}.FullRelease|x86.Build.0 = Release|Win32 + {6181E50C-5F32-42DC-BEF6-827AA8A5429D}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {6181E50C-5F32-42DC-BEF6-827AA8A5429D}.Release|Mixed Platforms.Build.0 = Release|Win32 {6181E50C-5F32-42DC-BEF6-827AA8A5429D}.Release|Win32.ActiveCfg = Release|Win32 {6181E50C-5F32-42DC-BEF6-827AA8A5429D}.Release|x64.ActiveCfg = Release|Win32 + {6181E50C-5F32-42DC-BEF6-827AA8A5429D}.Release|x86.ActiveCfg = Release|Win32 + {6181E50C-5F32-42DC-BEF6-827AA8A5429D}.Release|x86.Build.0 = Release|Win32 + {6181E50C-5F32-42DC-BEF6-827AA8A5429D}.Test|Mixed Platforms.ActiveCfg = Test|Win32 + {6181E50C-5F32-42DC-BEF6-827AA8A5429D}.Test|Mixed Platforms.Build.0 = Test|Win32 {6181E50C-5F32-42DC-BEF6-827AA8A5429D}.Test|Win32.ActiveCfg = Test|Win32 {6181E50C-5F32-42DC-BEF6-827AA8A5429D}.Test|x64.ActiveCfg = Test|Win32 + {6181E50C-5F32-42DC-BEF6-827AA8A5429D}.Test|x86.ActiveCfg = Test|Win32 + {6181E50C-5F32-42DC-BEF6-827AA8A5429D}.Test|x86.Build.0 = Test|Win32 + {2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Debug|Win32.ActiveCfg = Debug|Win32 {2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Debug|x64.ActiveCfg = Debug|Win32 + {2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Debug|x86.ActiveCfg = Debug|Win32 + {2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Debug|x86.Build.0 = Debug|Win32 + {2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.FullRelease|Mixed Platforms.ActiveCfg = Release|Win32 + {2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.FullRelease|Mixed Platforms.Build.0 = Release|Win32 {2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.FullRelease|Win32.ActiveCfg = Release|Win32 {2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.FullRelease|x64.ActiveCfg = Release|Win32 + {2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.FullRelease|x86.ActiveCfg = Release|Win32 + {2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.FullRelease|x86.Build.0 = Release|Win32 + {2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Release|Mixed Platforms.Build.0 = Release|Win32 {2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Release|Win32.ActiveCfg = Release|Win32 {2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Release|x64.ActiveCfg = Release|x64 + {2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Release|x86.ActiveCfg = Release|Win32 + {2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Release|x86.Build.0 = Release|Win32 + {2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Test|Mixed Platforms.ActiveCfg = Test|Win32 + {2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Test|Mixed Platforms.Build.0 = Test|Win32 {2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Test|Win32.ActiveCfg = Test|Win32 {2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Test|x64.ActiveCfg = Test|x64 + {2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Test|x86.ActiveCfg = Test|Win32 + {2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Test|x86.Build.0 = Test|Win32 + {8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Debug|Win32.ActiveCfg = Debug|Win32 {8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Debug|x64.ActiveCfg = Debug|Win32 + {8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Debug|x86.ActiveCfg = Debug|Win32 + {8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Debug|x86.Build.0 = Debug|Win32 + {8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.FullRelease|Mixed Platforms.ActiveCfg = Release|Win32 + {8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.FullRelease|Mixed Platforms.Build.0 = Release|Win32 {8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.FullRelease|Win32.ActiveCfg = Release|Win32 {8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.FullRelease|x64.ActiveCfg = Release|Win32 + {8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.FullRelease|x86.ActiveCfg = Release|Win32 + {8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.FullRelease|x86.Build.0 = Release|Win32 + {8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Release|Mixed Platforms.Build.0 = Release|Win32 {8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Release|Win32.ActiveCfg = Release|Win32 {8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Release|x64.ActiveCfg = Release|x64 + {8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Release|x86.ActiveCfg = Release|Win32 + {8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Release|x86.Build.0 = Release|Win32 + {8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Test|Mixed Platforms.ActiveCfg = Test|Win32 + {8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Test|Mixed Platforms.Build.0 = Test|Win32 {8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Test|Win32.ActiveCfg = Test|Win32 {8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Test|x64.ActiveCfg = Test|x64 + {8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Test|x86.ActiveCfg = Test|Win32 + {8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Test|x86.Build.0 = Test|Win32 + {98BA115B-829F-4085-9729-ABD0D779A60A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {98BA115B-829F-4085-9729-ABD0D779A60A}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {98BA115B-829F-4085-9729-ABD0D779A60A}.Debug|Win32.ActiveCfg = Debug|Win32 {98BA115B-829F-4085-9729-ABD0D779A60A}.Debug|x64.ActiveCfg = Debug|Win32 + {98BA115B-829F-4085-9729-ABD0D779A60A}.Debug|x86.ActiveCfg = Debug|Win32 + {98BA115B-829F-4085-9729-ABD0D779A60A}.Debug|x86.Build.0 = Debug|Win32 + {98BA115B-829F-4085-9729-ABD0D779A60A}.FullRelease|Mixed Platforms.ActiveCfg = Release|Win32 + {98BA115B-829F-4085-9729-ABD0D779A60A}.FullRelease|Mixed Platforms.Build.0 = Release|Win32 {98BA115B-829F-4085-9729-ABD0D779A60A}.FullRelease|Win32.ActiveCfg = Release|Win32 {98BA115B-829F-4085-9729-ABD0D779A60A}.FullRelease|x64.ActiveCfg = Release|Win32 + {98BA115B-829F-4085-9729-ABD0D779A60A}.FullRelease|x86.ActiveCfg = Release|Win32 + {98BA115B-829F-4085-9729-ABD0D779A60A}.FullRelease|x86.Build.0 = Release|Win32 + {98BA115B-829F-4085-9729-ABD0D779A60A}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {98BA115B-829F-4085-9729-ABD0D779A60A}.Release|Mixed Platforms.Build.0 = Release|Win32 {98BA115B-829F-4085-9729-ABD0D779A60A}.Release|Win32.ActiveCfg = Release|Win32 {98BA115B-829F-4085-9729-ABD0D779A60A}.Release|x64.ActiveCfg = Release|x64 + {98BA115B-829F-4085-9729-ABD0D779A60A}.Release|x86.ActiveCfg = Release|Win32 + {98BA115B-829F-4085-9729-ABD0D779A60A}.Release|x86.Build.0 = Release|Win32 + {98BA115B-829F-4085-9729-ABD0D779A60A}.Test|Mixed Platforms.ActiveCfg = Test|Win32 + {98BA115B-829F-4085-9729-ABD0D779A60A}.Test|Mixed Platforms.Build.0 = Test|Win32 {98BA115B-829F-4085-9729-ABD0D779A60A}.Test|Win32.ActiveCfg = Test|Win32 {98BA115B-829F-4085-9729-ABD0D779A60A}.Test|x64.ActiveCfg = Test|x64 + {98BA115B-829F-4085-9729-ABD0D779A60A}.Test|x86.ActiveCfg = Test|Win32 + {98BA115B-829F-4085-9729-ABD0D779A60A}.Test|x86.Build.0 = Test|Win32 + {BE211CE1-3955-4674-A664-5038FC791980}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {BE211CE1-3955-4674-A664-5038FC791980}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {BE211CE1-3955-4674-A664-5038FC791980}.Debug|Win32.ActiveCfg = Debug|x86 + {BE211CE1-3955-4674-A664-5038FC791980}.Debug|Win32.Build.0 = Debug|x86 + {BE211CE1-3955-4674-A664-5038FC791980}.Debug|x64.ActiveCfg = Debug|x86 + {BE211CE1-3955-4674-A664-5038FC791980}.Debug|x86.ActiveCfg = Debug|x86 + {BE211CE1-3955-4674-A664-5038FC791980}.Debug|x86.Build.0 = Debug|x86 + {BE211CE1-3955-4674-A664-5038FC791980}.FullRelease|Mixed Platforms.ActiveCfg = Release|x86 + {BE211CE1-3955-4674-A664-5038FC791980}.FullRelease|Mixed Platforms.Build.0 = Release|x86 + {BE211CE1-3955-4674-A664-5038FC791980}.FullRelease|Win32.ActiveCfg = Release|x86 + {BE211CE1-3955-4674-A664-5038FC791980}.FullRelease|Win32.Build.0 = Release|x86 + {BE211CE1-3955-4674-A664-5038FC791980}.FullRelease|x64.ActiveCfg = Release|x86 + {BE211CE1-3955-4674-A664-5038FC791980}.FullRelease|x86.ActiveCfg = Release|x86 + {BE211CE1-3955-4674-A664-5038FC791980}.FullRelease|x86.Build.0 = Release|x86 + {BE211CE1-3955-4674-A664-5038FC791980}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {BE211CE1-3955-4674-A664-5038FC791980}.Release|Mixed Platforms.Build.0 = Release|x86 + {BE211CE1-3955-4674-A664-5038FC791980}.Release|Win32.ActiveCfg = Release|x86 + {BE211CE1-3955-4674-A664-5038FC791980}.Release|x64.ActiveCfg = Release|x86 + {BE211CE1-3955-4674-A664-5038FC791980}.Release|x86.ActiveCfg = Release|x86 + {BE211CE1-3955-4674-A664-5038FC791980}.Release|x86.Build.0 = Release|x86 + {BE211CE1-3955-4674-A664-5038FC791980}.Test|Mixed Platforms.ActiveCfg = Release|x86 + {BE211CE1-3955-4674-A664-5038FC791980}.Test|Mixed Platforms.Build.0 = Release|x86 + {BE211CE1-3955-4674-A664-5038FC791980}.Test|Win32.ActiveCfg = Release|x86 + {BE211CE1-3955-4674-A664-5038FC791980}.Test|x64.ActiveCfg = Release|x86 + {BE211CE1-3955-4674-A664-5038FC791980}.Test|x86.ActiveCfg = Release|x86 + {BE211CE1-3955-4674-A664-5038FC791980}.Test|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index 00099a4a..51cdf1e0 100644 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -1,9 +1,60 @@ + - restore only single input target to default. +Beta 11: + +- 68000/010 CPU core merge accidentally removed 68000 CLR to memory and Scc to memory dummy read + -modify-write behavior. +- Sometimes after autoswitch (unconfigured mouse left button press) mouse was configured correctly + but mouse input was kept disabled. +- Using stick/dpad to autoswitch now requires move, release, move inside 0.5s window to prevent + accidental switches. +- Some more autoswitch bugs fixed. +- Switching bitplane DMA on just before DDFSTRT handling improved. (Saigon Megademo "Shir Khan" part) +- 68030 + more compatible without cycle-exact was unstable. +- Flush 68020/030 caches and refill prefetch buffers when switching CPU modes (cycle-exact/more compatible) + on the fly. +- 68020 cycle-exact improvements. +- Bitplane graphics was horizontally shifted if program switched from lores to hires less than 4 cycles + before bitplane DMA starts. (Chipset emulation was correct but drawing code saw invalid lores to hires + switch) +- Stupid code fixed in CD image audio code that coud cause random crashes. +- CD image audio start was delayed if audio was compressed (zip/mp3/flac/whatever) and start position + was at the very end of previous track. + +Beta 10: + +- B8 Blerkenwiegel workaround caused buffer overflows in some situations. Fix improved. +- MoreNewStuffy fix (231b11) was not complete, non-modulo bitplane DMA fetches work + differently than modulo adding DMA fetches. (Alpha and Omega / PMC) +- Also above behavior seems to only happen with first plane fetch. (New and Better Routines / Cult) + This needs more testing, someday.. +- '?' disk info button now opens normal dialog window, disk label also included (if dos disk) and + type of bootblock (1.x standard, 2.x+ standard, custom) +- When loading config that has 2 identical game controllers configured in both ports and only one + controller is connected, connected controller was inserted in both ports. +- GamePorts panel port change behavior improved, if new device is already inserted in other port, + device in other port is now always automatically changed, not the one you just changed. +- When clicking mouse that is not inserted in either Amiga port and host system has only one mouse + connected, "Windows mouse" is inserted, not HID mouse. +- 68020 more compatible without cycle-exact works again and also uses new 68020 CE prefetch method. +- 68010 is now supported in more compatible and cycle-exact modes. New instructions supported and + new stack frames emulated but timing is same as 68000, 68010 special timing improvements and loop + mode is not emulated. At least not yet. +- 68010 emulation used some 68020+ only exception stack frames. +- FPU emulator now properly uses prefetch buffer emulation if more compatible or cycle-exact is + enabled. Emulated program crashed in older versions with some FPU instructions. +- On the fly switching from fastest possible to prefetch ("more compatible") or CE didn't fill + prefetch buffers and usually caused emulated program to crash. +- Added "Log window" checkbox to Paths panel, easier non-command line method to open log window. +- On the fly change of A1000 Agnus or No-EHB Denise Advanced chipset didn't do anything. +- A1000 Agnus and vertical bitplane start (DIWSTRT) of zero: nothing happens, bitplanes are + only enabled if it is 1 or larger. + Beta 9: -NOTE: 68020 CE mode can be used now. +NOTE: 68020 CE mode should be usable again. - Added CIA tod bug option to Advanced chipset. Demo The end / Trilobit running under KS 1.3 has corruption in "photos" part if tod alarm bug is not emulated. KS 1.3 + real A500 @@ -43,6 +94,9 @@ all required hardware yet) Lots of work left to do but at least it should not be any worse than old code and it also should be much more accurate now when code has small loops (for example stupid CPU delays). +If there are no demos or games that break or run really badly compared to 2.6.1, this is not anymore +showstopper for 2.7.0 release. + NOTE: 68030 can queue data memory accesses, this is not yet emulated. Beta 8: diff --git a/table68k b/table68k index b8f016b5..ff9aa868 100644 --- a/table68k +++ b/table68k @@ -229,7 +229,10 @@ 0100 1010 1111 1100:000:?????:?????:00: ILLEGAL 0100 1100 00ss sSSS:200:-NZVC:-----:13: MULL.L #1,s[!Areg] +- 2 0 30 fiea 0100 1100 01ss sSSS:200:?????:?????:13: DIVL.L #1,s[!Areg] +- 0 0 50 fiea + 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 @@ -326,9 +329,9 @@ - 0 0 2 fea 1000 rrr0 11ss sSSS:000:?????:?????:13: DIVU.W s[Dreg],Dr -- 2 0 30 +- 2 0 54 1000 rrr0 11ss sSSS:000:?????:?????:13: DIVU.W s[!Areg,Dreg],Dr -- 0 0 30 fea +- 0 0 54 fea 1000 rrr1 00dd dDDD:000:XxZxC:X-Z--:13: SBCD.B d[Dreg],Dr - 0 0 4 @@ -348,9 +351,9 @@ - 2 1 11 1000 rrr1 11ss sSSS:000:?????:?????:13: DIVS.W s[Dreg],Dr -- 2 0 40 +- 2 0 54 1000 rrr1 11ss sSSS:000:?????:?????:13: DIVS.W s[!Areg,Dreg],Dr -- 0 0 40 fea +- 0 0 54 fea 1001 rrr0 zzss sSSS:000:XNZVC:-----:13: SUB.z s[Areg,Dreg],Dr - 2 0 2 @@ -397,7 +400,7 @@ 1100 rrr0 zzss sSSS:000:-NZ00:-----:13: AND.z s[!Areg,Dreg],Dr - 0 1 3 fea 1100 rrr0 11ss sSSS:000:-NZ00:-----:13: MULU.W s[!Areg],Dr -- 2 0 20 fea +- 2 0 25 fea 1100 rrr1 00dd dDDD:000:XxZxC:X-Z--:13: ABCD.B d[Dreg],Dr - 0 0 4 @@ -413,7 +416,7 @@ 1100 rrr1 10dd dDDD:000:-----:-----:33: EXG.L Dr,d[Areg] - 4 0 4 1100 rrr1 11ss sSSS:000:-NZ00:-----:13: MULS.W s[!Areg],Dr -- 2 0 20 fea +- 2 0 25 fea 1101 rrr0 zzss sSSS:000:XNZVC:-----:13: ADD.z s[Areg,Dreg],Dr - 2 0 2