From e7348f04f23506826acdb1872b14b016916cc240 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Tue, 20 Dec 2005 18:44:43 +0200 Subject: [PATCH] imported winuaesrc1200b4.zip --- blitter.c | 51 ++-- compemu_raw_x86.c | 436 +++++++++------------------------- compemu_support.c | 291 +++++------------------ custom.c | 43 ++-- drawing.c | 2 +- fpp.c | 23 +- gencpu.c | 10 +- include/compemu.h | 22 +- memory.c | 2 +- od-win32/direct3d.c | 42 ++-- od-win32/opengl.c | 42 ++-- od-win32/resources/resource.h | 2 + od-win32/resources/winuae.rc | 93 ++++---- od-win32/win32.h | 2 +- od-win32/win32gui.c | 1 + 15 files changed, 336 insertions(+), 726 deletions(-) diff --git a/blitter.c b/blitter.c index e787f135..b6363505 100755 --- a/blitter.c +++ b/blitter.c @@ -60,7 +60,7 @@ static int blit_cyclecounter, blit_maxcyclecounter, blit_slowdown; static int blit_linecyclecounter, blit_misscyclecounter; #ifdef CPUEMU_6 -extern int cycle_line[]; +extern uae_u8 cycle_line[]; #endif static long blit_firstline_cycles; @@ -170,7 +170,7 @@ static int blit_cycle_diagram_fill[][10] = /* - line draw takes 4 cycles (two 2-cycle blits combined) + line draw takes 4 cycles (-X-X) it also have real idle cycles and only 2 dma fetches (read from C, write to D, but see below) @@ -186,7 +186,7 @@ static int blit_cycle_diagram_fill[][10] = static int blit_cycle_diagram_line[] = { - 0, 4, 3,5,4,5 /* guessed */ + 0, 4, 0,3,0,4, 0,0,0,0,0,0,0,0,0,0 /* guessed */ }; static int blit_cycle_diagram_finald[] = @@ -258,7 +258,7 @@ STATIC_INLINE int canblit (int hpos) return 0; if (cycle_line[hpos] == 0) return 1; - if (cycle_line[hpos] & (CYCLE_REFRESH | CYCLE_SPRITE | CYCLE_MISC)) + if (cycle_line[hpos] & CYCLE_REFRESH) return -1; return 0; } @@ -526,6 +526,10 @@ static void blitter_line(void) blitahold = 0; blitonedot = 1; blt_info.bltddat = blit_func(blitahold, blitbhold, blitchold, bltcon0 & 0xFF); +} + +static void blitter_line_proc(void) +{ if (!blitsign){ if (bltcon0 & 0x800) bltapt += (uae_s16)blt_info.bltamod; @@ -581,35 +585,31 @@ static void decide_blitter_line (int hpos) while (blit_last_hpos < hpos) { int c = channel_state (blit_cyclecounter); for (;;) { - - if (c == 5) { - blit_cyclecounter++; - break; + if (c) { + if (!canblit(blit_last_hpos)) + break; } -#if 1 - if (c && canblit(blit_last_hpos) <= 0) - break; -#endif -#if 1 - if (c != 0) - cycle_line[blit_last_hpos] |= CYCLE_BLITTER; -#endif blit_cyclecounter++; - if (c == 4) { - /* believe it or not but try Cardamon or Cardamom without this.. */ - if (ddat1use) - bltdpt = bltcpt; + if (c == 3) { blitter_read(); + cycle_line[blit_last_hpos] |= CYCLE_BLITTER; + } else if (c == 4) { + if (ddat1use) { + bltdpt = bltcpt; + } + ddat1use = 1; blitter_line(); - blitter_write(); + blitter_line_proc(); blitter_nxline(); - ddat1use = 1; + blitter_write(); + cycle_line[blit_last_hpos] |= CYCLE_BLITTER; if (blt_info.vblitsize == 0) { - blitter_done(); - return; + bltdpt = bltcpt; + blitter_done(); + return; } } - break; + break; } blit_last_hpos++; } @@ -628,6 +628,7 @@ static void actually_do_blit(void) do { blitter_read(); blitter_line(); + blitter_line_proc(); blitter_write(); bltdpt = bltcpt; blitter_nxline(); diff --git a/compemu_raw_x86.c b/compemu_raw_x86.c index 950bc61f..80eaa4cf 100755 --- a/compemu_raw_x86.c +++ b/compemu_raw_x86.c @@ -97,7 +97,7 @@ static uae_u32 swap32(uae_u32 x) static __inline__ int isbyte(uae_s32 x) { - return (x>=-128 && x<=127); + return (x>=-128 && x<=127); } LOWFUNC(NONE,WRITE,1,raw_push_l_r,(R4 r)) @@ -573,8 +573,12 @@ 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) +#ifdef JIT_DEBUG + if (d!=MUL_NREG1 || s!=MUL_NREG2) { + printf("Bad register in IMUL: d=%d, s=%d\n",d,s); abort(); + } +#endif emit_byte(0xf7); emit_byte(0xea); } @@ -582,24 +586,17 @@ 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) { printf("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_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); @@ -615,307 +612,118 @@ LOWFUNC(NONE,NONE,2,raw_mov_w_rr,(W2 d, R2 s)) } 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)) +LOWFUNC(NONE,READ,3,raw_mov_l_rrm_indexed,(W4 d, R4 baser, R4 index)) { - 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(); + if (baser==5) { + emit_byte(0x44+8*d); + emit_byte(8*index+baser); + emit_byte(0); + return; } - 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); + emit_byte(0x04+8*d); + emit_byte(8*index+baser); } -LENDFUNC(NONE,WRITE,4,raw_mov_l_mrr_indexed,(R4 baser, R4 index, IMM factor, R4 s)) +LENDFUNC(NONE,READ,3,raw_mov_l_rrm_indexed,(W4 d, R4 baser, R4 index)) -LOWFUNC(NONE,WRITE,4,raw_mov_w_mrr_indexed,(R4 baser, R4 index, IMM factor, R2 s)) +LOWFUNC(NONE,READ,3,raw_mov_w_rrm_indexed,(W2 d, R4 baser, R4 index)) { - 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); + 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,WRITE,4,raw_mov_w_mrr_indexed,(R4 baser, R4 index, IMM factor, R2 s)) +LENDFUNC(NONE,READ,3,raw_mov_w_rrm_indexed,(W2 d, R4 baser, R4 index)) -LOWFUNC(NONE,WRITE,4,raw_mov_b_mrr_indexed,(R4 baser, R4 index, IMM factor, R1 s)) +LOWFUNC(NONE,READ,3,raw_mov_b_rrm_indexed,(W1 d, R4 baser, R4 index)) { - 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); + 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,WRITE,4,raw_mov_b_mrr_indexed,(R4 baser, R4 index, IMM factor, R1 s)) +LENDFUNC(NONE,READ,3,raw_mov_b_rrm_indexed,(W1 d, R4 baser, R4 index)) -LOWFUNC(NONE,WRITE,5,raw_mov_l_bmrr_indexed,(IMM base, R4 baser, R4 index, IMM factor, R4 s)) +LOWFUNC(NONE,WRITE,3,raw_mov_l_mrr_indexed,(R4 baser, R4 index, 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); + 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,5,raw_mov_l_bmrr_indexed,(IMM base, R4 baser, R4 index, IMM factor, R4 s)) +LENDFUNC(NONE,WRITE,3,raw_mov_l_mrr_indexed,(R4 baser, R4 index, R4 s)) -LOWFUNC(NONE,WRITE,5,raw_mov_w_bmrr_indexed,(IMM base, R4 baser, R4 index, IMM factor, R2 s)) +LOWFUNC(NONE,WRITE,3,raw_mov_w_mrr_indexed,(R4 baser, R4 index, 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); + 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,5,raw_mov_w_bmrr_indexed,(IMM base, R4 baser, R4 index, IMM factor, R2 s)) +LENDFUNC(NONE,WRITE,3,raw_mov_w_mrr_indexed,(R4 baser, R4 index, R2 s)) -LOWFUNC(NONE,WRITE,5,raw_mov_b_bmrr_indexed,(IMM base, R4 baser, R4 index, IMM factor, R1 s)) +LOWFUNC(NONE,WRITE,3,raw_mov_b_mrr_indexed,(R4 baser, R4 index, 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); + 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,READ,5,raw_mov_b_brrm_indexed,(W1 d, IMM base, R4 baser, R4 index, IMM factor)) +LENDFUNC(NONE,WRITE,3,raw_mov_b_mrr_indexed,(R4 baser, R4 index, R1 s)) -LOWFUNC(NONE,READ,4,raw_mov_l_rm_indexed,(W4 d, IMM base, R4 index, IMM factor)) +LOWFUNC(NONE,READ,3,raw_mov_l_rm_indexed,(W4 d, IMM base, R4 index)) { - 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_byte(0x85+8*index); emit_long(base); } -LENDFUNC(NONE,READ,4,raw_mov_l_rm_indexed,(W4 d, IMM base, R4 index, IMM factor)) +LENDFUNC(NONE,READ,3,raw_mov_l_rm_indexed,(W4 d, IMM base, R4 index)) -LOWFUNC(NONE,READ,5,raw_cmov_l_rm_indexed,(W4 d, IMM base, R4 index, IMM factor, IMM cond)) +LOWFUNC(NONE,READ,4,raw_cmov_l_rm_indexed,(W4 d, IMM base, R4 index, 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); } + emit_byte(0x04+8*d); + emit_byte(0x85+8*index); + emit_long(base); } -LENDFUNC(NONE,READ,5,raw_cmov_l_rm_indexed,(W4 d, IMM base, R4 index, IMM factor, IMM cond)) +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)) { @@ -1049,43 +857,37 @@ 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(); - } - 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*fi+8*index+s); + 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,4,raw_lea_l_rr_indexed,(W4 d, R4 s, R4 index, IMM factor)) +LOWFUNC(NONE,NONE,3,raw_lea_l_rr_indexed,(W4 d, R4 s, R4 index)) { - 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); + 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,4,raw_lea_l_rr_indexed,(W4 d, R4 s, R4 index, IMM factor)) +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)) { @@ -1532,24 +1334,6 @@ LOWFUNC(WRITE,NONE,2,raw_cmp_b,(R1 d, R1 s)) } 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); @@ -1629,18 +1413,19 @@ static __inline__ void raw_jmp_r(R4 r) static __inline__ void raw_jmp_m_indexed(uae_u32 base, uae_u32 r, uae_u32 m) { - 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(); + 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(0x05+8*r+0x40*mu); + emit_byte(8*r+sib); emit_long(base); } @@ -1652,7 +1437,6 @@ static __inline__ void raw_jmp_m(uae_u32 base) emit_long(base); } - static __inline__ void raw_call(uae_u32 t) { lopt_emit_all(); @@ -2011,7 +1795,7 @@ int EvalException ( LPEXCEPTION_POINTERS blah, int n_except ) } #endif if (dir==SIG_READ) { - switch(size) { + 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; @@ -2019,7 +1803,7 @@ int EvalException ( LPEXCEPTION_POINTERS blah, int n_except ) } } else { /* write */ - switch(size) { + 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; diff --git a/compemu_support.c b/compemu_support.c index 620c23f1..cb9918f9 100755 --- a/compemu_support.c +++ b/compemu_support.c @@ -126,7 +126,7 @@ static uae_u8 *popallspace; uae_u32 m68k_pc_offset; -/* Some arithmetic ooperations can be optimized away if the operands +/* 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 @@ -915,7 +915,7 @@ static int alloc_reg_hinted(int r, int size, int willclobber, int hint) 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); + raw_lea_l_rr_indexed(rr,rr,bestreg); live.state[r].validsize=4; live.nat[rr].touched=touchcnt++; return rr; @@ -2199,8 +2199,6 @@ MIDFUNC(2,shrl_b_rr,(RW1 d, R1 r)) } MENDFUNC(2,shrl_b_rr,(RW1 d, R1 r)) - - MIDFUNC(2,shll_l_ri,(RW4 r, IMM i)) { if (!i && !needflags) @@ -2368,7 +2366,6 @@ MIDFUNC(2,shra_b_rr,(RW1 d, R1 r)) } MENDFUNC(2,shra_b_rr,(RW1 d, R1 r)) - MIDFUNC(2,setcc,(W1 d, IMM cc)) { CLOBBER_SETCC; @@ -2478,17 +2475,6 @@ MIDFUNC(2,mul_64_32,(RW4 d, RW4 s)) } 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); - unlock(s); - unlock(d); -} -MENDFUNC(2,mul_32_32,(RW4 d, R4 s)) - MIDFUNC(2,sign_extend_16_rr,(W4 d, R2 s)) { int isrmw; @@ -2551,7 +2537,6 @@ MIDFUNC(2,sign_extend_8_rr,(W4 d, R1 s)) } MENDFUNC(2,sign_extend_8_rr,(W4 d, R1 s)) - MIDFUNC(2,zero_extend_16_rr,(W4 d, R2 s)) { int isrmw; @@ -2649,52 +2634,50 @@ MIDFUNC(2,mov_w_rr,(W2 d, R2 s)) } MENDFUNC(2,mov_w_rr,(W2 d, R2 s)) - -MIDFUNC(4,mov_l_rrm_indexed,(W4 d,R4 baser, R4 index, IMM factor)) +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,factor); + raw_mov_l_rrm_indexed(d,baser,index); unlock(d); unlock(baser); unlock(index); } -MENDFUNC(4,mov_l_rrm_indexed,(W4 d,R4 baser, R4 index, IMM factor)) +MENDFUNC(3,mov_l_rrm_indexed,(W4 d,R4 baser, R4 index)) -MIDFUNC(4,mov_w_rrm_indexed,(W2 d, R4 baser, R4 index, IMM factor)) +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,factor); + raw_mov_w_rrm_indexed(d,baser,index); unlock(d); unlock(baser); unlock(index); } -MENDFUNC(4,mov_w_rrm_indexed,(W2 d, R4 baser, R4 index, IMM factor)) +MENDFUNC(3,mov_w_rrm_indexed,(W2 d, R4 baser, R4 index)) -MIDFUNC(4,mov_b_rrm_indexed,(W1 d, R4 baser, R4 index, IMM factor)) +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,factor); + raw_mov_b_rrm_indexed(d,baser,index); unlock(d); unlock(baser); unlock(index); } -MENDFUNC(4,mov_b_rrm_indexed,(W1 d, R4 baser, R4 index, IMM factor)) - +MENDFUNC(3,mov_b_rrm_indexed,(W1 d, R4 baser, R4 index)) -MIDFUNC(4,mov_l_mrr_indexed,(R4 baser, R4 index, IMM factor, R4 s)) +MIDFUNC(3,mov_l_mrr_indexed,(R4 baser, R4 index, R4 s)) { CLOBBER_MOV; baser=readreg(baser,4); @@ -2704,185 +2687,61 @@ MIDFUNC(4,mov_l_mrr_indexed,(R4 baser, R4 index, IMM factor, R4 s)) Dif (baser==s || index==s) abort(); - - raw_mov_l_mrr_indexed(baser,index,factor,s); + raw_mov_l_mrr_indexed(baser,index,s); unlock(s); unlock(baser); unlock(index); } -MENDFUNC(4,mov_l_mrr_indexed,(R4 baser, R4 index, IMM factor, R4 s)) +MENDFUNC(3,mov_l_mrr_indexed,(R4 baser, R4 index, R4 s)) -MIDFUNC(4,mov_w_mrr_indexed,(R4 baser, R4 index, IMM factor, R2 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,factor,s); + raw_mov_w_mrr_indexed(baser,index,s); unlock(s); unlock(baser); unlock(index); } -MENDFUNC(4,mov_w_mrr_indexed,(R4 baser, R4 index, IMM factor, R2 s)) +MENDFUNC(3,mov_w_mrr_indexed,(R4 baser, R4 index, R2 s)) -MIDFUNC(4,mov_b_mrr_indexed,(R4 baser, R4 index, IMM factor, R1 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,factor,s); - unlock(s); - unlock(baser); - unlock(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); - unlock(s); - unlock(baser); - unlock(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); - unlock(s); - unlock(baser); - unlock(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); + raw_mov_b_mrr_indexed(baser,index,s); unlock(s); unlock(baser); unlock(index); } -MENDFUNC(5,mov_b_bmrr_indexed,(IMM base, R4 baser, R4 index, IMM factor, R1 s)) - +MENDFUNC(3,mov_b_mrr_indexed,(R4 baser, R4 index, 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); - unlock(d); - unlock(baser); - unlock(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); - unlock(d); - unlock(baser); - unlock(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); - unlock(d); - unlock(baser); - unlock(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)) +/* 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+factor*live.state[index].val); + COMPCALL(mov_l_rm)(d,base+4*live.state[index].val); return; } CLOBBER_MOV; index=readreg_offset(index,4); - base+=get_offset(indexreg)*factor; + base+=get_offset(indexreg)*4; d=writereg(d,4); - raw_mov_l_rm_indexed(d,base,index,factor); + raw_mov_l_rm_indexed(d,base,index); unlock(index); unlock(d); } -MENDFUNC(4,mov_l_rm_indexed,(W4 d, IMM base, R4 index, IMM factor)) - +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)) @@ -3127,10 +2986,6 @@ 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); @@ -3143,20 +2998,6 @@ MIDFUNC(5,lea_l_brr_indexed,(W4 d, R4 s, R4 index, IMM factor, IMM offset)) } 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); - unlock(d); - unlock(index); - unlock(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)) { @@ -3452,7 +3293,6 @@ MIDFUNC(2,test_b_rr,(R1 d, R1 s)) } MENDFUNC(2,test_b_rr,(R1 d, R1 s)) - MIDFUNC(2,and_l_ri,(RW4 d, IMM i)) { if (isconst (d) && ! needflags) { @@ -3985,7 +3825,6 @@ MIDFUNC(5,call_r_02,(R4 r, R4 in1, R4 in2, IMM isize1, IMM isize2)) } MENDFUNC(5,call_r_02,(R4 r, R4 in1, R4 in2, IMM isize1, IMM isize2)) - MIDFUNC(1,forget_about,(W4 r)) { if (isinreg(r)) @@ -4633,7 +4472,6 @@ void init_comp(void) live.fate[i].mem=(uae_u32*)(fscratch+i); } - for (i=0;i1) { /* IBrowse does this! */ - add_l(f,address); /* f now has the final address */ - switch(size) { - case 2: bswap_16(source); mov_w_Rr(f,source,0); bswap_16(source); break; - case 4: bswap_32(source); mov_l_Rr(f,source,0); bswap_32(source); break; + 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: bswap_16(source); mov_w_Rr(f,source,0); + bswap_16(source); return; + case 4: bswap_32(source); mov_l_Rr(f,source,0); + bswap_32(source); return; + } } } - else { - /* f now holds the offset */ - switch(size) { - case 1: mov_b_mrr_indexed(address,f,1,source); break; - case 2: bswap_16(source); mov_w_mrr_indexed(address,f,1,source); bswap_16(source); break; - case 4: bswap_32(source); mov_l_mrr_indexed(address,f,1,source); bswap_32(source); break; - } + switch (size) { /* f now holds the offset */ + case 1: mov_b_mrr_indexed(address,f,source); break; + case 2: bswap_16(source); mov_w_mrr_indexed(address,f,source); + bswap_16(source); break; /* base, index, source */ + case 4: bswap_32(source); mov_l_mrr_indexed(address,f,source); + 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,4); + 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 */ @@ -5146,7 +4983,6 @@ static __inline__ void writemem(int address, int source, int offset, int size, i forget_about(tmp); } - void writebyte(int address, int source, int tmp) { int distrust; @@ -5247,13 +5083,13 @@ static void readmem_real(int address, int dest, int offset, int size, int tmp) 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,4); + 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,1); break; - case 2: mov_w_rrm_indexed(dest,address,f,1); bswap_16(dest); break; - case 4: mov_l_rrm_indexed(dest,address,f,1); bswap_32(dest); break; + case 1: mov_b_rrm_indexed(dest,address,f); break; + case 2: mov_w_rrm_indexed(dest,address,f); bswap_16(dest); break; + case 4: mov_l_rrm_indexed(dest,address,f); bswap_32(dest); break; } forget_about(tmp); } @@ -5266,7 +5102,7 @@ static __inline__ void readmem(int address, int dest, int offset, int size, int 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,4); + 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 */ @@ -5349,7 +5185,7 @@ static __inline__ void get_n_addr_real(int address, int dest, int tmp) 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, 4); + mov_l_rm_indexed(f,(uae_u32)baseaddr,f); add_l(dest,f); forget_about(tmp); } @@ -5382,16 +5218,14 @@ void get_n_addr_jmp(int address, int dest, int tmp) 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,4); + mov_l_rm_indexed(dest,(uae_u32)baseaddr,f); add_l(dest,address); and_l_ri (dest, ~1); forget_about(tmp); #endif } - -/* base is a register, but dp is an actual value. - target is a register, as is tmp */ +/* 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; @@ -5449,10 +5283,10 @@ void calc_disp_ea_020(int base, uae_u32 dp, int target, int tmp) else { /* 68000 version */ if ((dp & 0x800) == 0) { /* Sign extend */ sign_extend_16_rr(target,reg); - lea_l_brr_indexed(target,base,target,1<= 2) hsyncdelay(); - return v; + return vp; } STATIC_INLINE void COP1LCH (uae_u16 v) { cop1lc = (cop1lc & 0xffff) | ((uae_u32)v << 16); } @@ -2462,6 +2463,8 @@ static void COPJMP (int num) unset_special (SPCFLAG_COPPER); cop_state.ignore_next = 0; + if (!oldstrobe) + cop_state.state_prev = cop_state.state; cop_state.state = COP_read1; cop_state.vpos = vpos; cop_state.hpos = current_hpos () & ~1; @@ -2471,8 +2474,8 @@ static void COPJMP (int num) if (dmaen (DMA_COPPER)) { copper_enabled_thisline = 1; set_special (SPCFLAG_COPPER); - } else if (oldstrobe > 0 && oldstrobe != num) { - /* dma disabled and accessing both COPxJMPs -> copper stops! */ + } else if (oldstrobe > 0 && oldstrobe != num && cop_state.state_prev == COP_wait) { + /* dma disabled, copper idle and accessing both COPxJMPs -> copper stops! */ cop_state.state = COP_stop; } } @@ -3706,7 +3709,8 @@ void blitter_done_notify (void) cop_state.hpos = current_hpos () & ~1; cop_state.vpos = vpos; - cop_state.state = COP_wait; + /* apparently there is small delay until copper wakes up.. */ + cop_state.state = COP_wait_in2; compute_spcflag_copper (); } @@ -3891,7 +3895,7 @@ static void do_sprites (int hpos) #ifndef CUSTOM_SIMPLE maxspr = hpos; - minspr = last_sprite_hpos; + minspr = last_sprite_hpos + 1; if (minspr >= SPR0_HPOS + MAX_SPRITES * 4 || maxspr < SPR0_HPOS) return; @@ -3901,7 +3905,7 @@ static void do_sprites (int hpos) if (minspr < SPR0_HPOS) minspr = SPR0_HPOS; - for (i = minspr; i < maxspr; i++) { + for (i = minspr; i <= maxspr; i++) { int cycle = -1; int num = (i - SPR0_HPOS) / 4; switch ((i - SPR0_HPOS) & 3) @@ -4264,25 +4268,10 @@ static void hsync_handler (void) if (currprefs.cpu_cycle_exact || currprefs.blitter_cycle_exact) { decide_blitter (hpos); memset (cycle_line, 0, sizeof cycle_line); -#if 1 -{ - cycle_line[maxhpos - 1] = CYCLE_REFRESH; cycle_line[1] = CYCLE_REFRESH; + cycle_line[3] = CYCLE_REFRESH; cycle_line[5] = CYCLE_REFRESH; cycle_line[7] = CYCLE_REFRESH; -} -#endif -#if 0 -{ - int i; - for (i = 12; i < 0x16; i += 2) - cycle_line[i] = CYCLE_NOCPU; - //cycle_line[4] = CYCLE_REFRESH; - //cycle_line[6] = CYCLE_REFRESH; - //cycle_line[8] = CYCLE_REFRESH; - //cycle_line[10] = CYCLE_REFRESH; -} -#endif } #endif if ((currprefs.chipset_mask & CSMASK_AGA) || (!currprefs.chipset_mask & CSMASK_ECS_AGNUS)) diff --git a/drawing.c b/drawing.c index f0266b91..08910f97 100755 --- a/drawing.c +++ b/drawing.c @@ -793,7 +793,7 @@ static void decode_ham (int pix, int stoppos) #endif ham_lastcolor = colors_for_drawing.color_regs_ecs[pv]; - ham_linebuf[ham_decode_pixel++] = 0; //ham_lastcolor; + ham_linebuf[ham_decode_pixel++] = ham_lastcolor; } #ifdef AGA } else if (currprefs.chipset_mask & CSMASK_AGA) { diff --git a/fpp.c b/fpp.c index f1365d00..8d577c57 100755 --- a/fpp.c +++ b/fpp.c @@ -351,7 +351,6 @@ STATIC_INLINE int get_fp_value (uae_u32 opcode, uae_u16 extra, fptype *src) break; case 3: tmppc = m68k_getpc (); - write_log ("####### tpmpc %08lx\n", tmppc); tmp = next_iword (); ad = get_disp_ea_020 (tmppc, tmp); break; @@ -1272,7 +1271,10 @@ void fpp_opp (uae_u32 opcode, uae_u16 extra) regs.fp[reg] = sinh (src); break; case 0x03: /* FINTRZ */ - regs.fp[reg] = (int) src; + if (src >= 0.0) + regs.fp[reg] = floor (src); + else + regs.fp[reg] = ceil (src); break; case 0x04: /* FSQRT */ case 0x41: @@ -1298,7 +1300,7 @@ void fpp_opp (uae_u32 opcode, uae_u16 extra) break; case 0x0d: /* FATANH */ #if 1 /* The BeBox doesn't have atanh, and it isn't in the HPUX libm either */ - regs.fp[reg] = log ((1 + src) / (1 - src)) / 2; + regs.fp[reg] = 0.5 * log ((1 + src) / (1 - src)); #else regs.fp[reg] = atanh (src); #endif @@ -1371,7 +1373,14 @@ void fpp_opp (uae_u32 opcode, uae_u16 extra) fround (reg); break; case 0x21: /* FMOD */ - regs.fp[reg] = regs.fp[reg] - (double) ((int) (regs.fp[reg] / src)) * src; + { + fptype divi = regs.fp[reg] / src; + + if (divi >= 0.0) + regs.fp[reg] -= src * floor (divi); + else + regs.fp[reg] -= src * ceil (divi); + } break; case 0x22: /* FADD */ case 0x62: @@ -1391,10 +1400,14 @@ void fpp_opp (uae_u32 opcode, uae_u16 extra) regs.fp[reg] /= src; break; case 0x25: /* FREM */ - regs.fp[reg] = regs.fp[reg] - (double) ((int) (regs.fp[reg] / src + 0.5)) * src; + regs.fp[reg] -= src * floor ((regs.fp[reg] / src) + 0.5); break; case 0x26: /* FSCALE */ +#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; diff --git a/gencpu.c b/gencpu.c index d49f03d3..37f80b48 100755 --- a/gencpu.c +++ b/gencpu.c @@ -2012,13 +2012,15 @@ static void gen_opcode (unsigned long int opcode) fill_prefetch_next(); start_brace (); printf ("\tuae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src;\n"); - if (using_ce) + if (using_ce) { printf ("\tint cycles = 36 * %d, bits;\n", CYCLE_UNIT / 2); + printf ("\tuae_u32 usrc;\n"); + } genflags (flag_logical, sz_long, "newv", "", ""); if (using_ce) { - printf ("\tsrc <<= 1;\n"); - printf ("\tfor(bits = 0; bits < 16 && src; bits++, src >>= 1)\n"); - printf ("\t\tif ((src & 3) == 1 || (src & 3) == 2) cycles += 2 * %d;\n", CYCLE_UNIT / 2); + 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 * %d;\n", CYCLE_UNIT / 2); addcycles3 ("\t"); } genastore ("newv", curi->dmode, "dstreg", sz_long, "dst"); diff --git a/include/compemu.h b/include/compemu.h index 93e1f2b1..0157dc68 100755 --- a/include/compemu.h +++ b/include/compemu.h @@ -308,22 +308,15 @@ 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(mul_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, IMM factor)); -DECLARE(mov_w_rrm_indexed(W2 d, R4 baser, R4 index, IMM factor)); -DECLARE(mov_b_rrm_indexed(W1 d, R4 baser, R4 index, IMM factor)); -DECLARE(mov_l_mrr_indexed(R4 baser, R4 index, IMM factor, R4 s)); -DECLARE(mov_w_mrr_indexed(R4 baser, R4 index, IMM factor, R2 s)); -DECLARE(mov_b_mrr_indexed(R4 baser, R4 index, IMM factor, R1 s)); -DECLARE(mov_l_bmrr_indexed(IMM base, R4 baser, R4 index, IMM factor, R4 s)); -DECLARE(mov_w_bmrr_indexed(IMM base, R4 baser, R4 index, IMM factor, R2 s)); -DECLARE(mov_b_bmrr_indexed(IMM base, R4 baser, R4 index, IMM factor, R1 s)); -DECLARE(mov_l_brrm_indexed(W4 d, IMM base, R4 baser, R4 index, IMM factor)); -DECLARE(mov_w_brrm_indexed(W2 d, IMM base, R4 baser, R4 index, IMM factor)); -DECLARE(mov_b_brrm_indexed(W1 d, IMM base, R4 baser, R4 index, IMM factor)); -DECLARE(mov_l_rm_indexed(W4 d, IMM base, R4 index, IMM factor)); +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)); @@ -338,7 +331,6 @@ 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(lea_l_rr_indexed(W4 d, R4 s, R4 index, IMM factor)); 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)); diff --git a/memory.c b/memory.c index 8938d630..40e89c0f 100755 --- a/memory.c +++ b/memory.c @@ -522,7 +522,7 @@ uae_u32 REGPARAM2 dummy_wget (uaecptr addr) #ifdef JIT special_mem |= S_READ; #endif - if (currprefs.illegal_mem) { + if (currprefs.illegal_mem && addr < 0xf00000) { if (illegal_count < MAX_ILG) { illegal_count++; write_log ("Illegal wget at %08lx PC=%x\n", addr, m68k_getpc()); diff --git a/od-win32/direct3d.c b/od-win32/direct3d.c index 8ae54798..8aa50cfe 100755 --- a/od-win32/direct3d.c +++ b/od-win32/direct3d.c @@ -424,36 +424,28 @@ static void BlitRect(LPDIRECT3DDEVICE9 dev, LPDIRECT3DTEXTURE9 src, static void calc (float *xp, float *yp, float *sxp, float *syp) { - int xm, ym; - int fx, fy; float x, y, sx, sy, tx, ty; - double mx, my; + double mx, my, fx, fy; - xm = currprefs.gfx_lores ? 2 : 1; - ym = currprefs.gfx_linedbl ? 1 : 2; -#if 0 - if (window_w >= 1024) - xm *= 2; - else if (window_w < 500) - xm /= 2; - if (window_h >= 960) - ym *= 2; - else if (window_h < 350) - ym /= 2; -#endif - fx = (tin_w * xm - window_w) / 2; - fy = (tin_h * ym - window_h) / 2; + fx = (twidth * window_w / tin_w) / 2; + fy = (theight * window_h / tin_h) / 2; + + tx = fx / ((currprefs.gfx_filter_horiz_zoom_mult + currprefs.gfx_filter_horiz_zoom / 4) / 1000.0); + ty = fy / ((currprefs.gfx_filter_vert_zoom_mult + currprefs.gfx_filter_vert_zoom / 4) / 1000.0); + + mx = (currprefs.gfx_filter_horiz_offset / 1000.0) * fx; + my = (currprefs.gfx_filter_vert_offset / 1000.0) * fy; - mx = (currprefs.gfx_filter_horiz_zoom_mult * (currprefs.gfx_filter_horiz_zoom + 100)) / (100.0 * 1000.0); - my = (currprefs.gfx_filter_vert_zoom_mult * (currprefs.gfx_filter_vert_zoom + 100)) / (100.0 * 1000.0); + x = -tx; + y = -ty; + sx = tx; + sy = ty; - tx = x = (float)((window_w * currprefs.gfx_filter_horiz_offset / 100.0) * mx); - ty = y = (float)((window_h * currprefs.gfx_filter_vert_offset / 100.0) * my); - sx = x + (float)((twidth * window_w / tin_w) * mx); - sy = y + (float)((theight * window_h / tin_h) * my); + x += fx + mx; + y += fy + my; + sx += tx + mx; + sy += ty + my; - x -= fx; y -= fy; - sx += 2 * fx; sy += 2 * fy; *xp = x; *yp = y; *sxp = sx; *syp = sy; } diff --git a/od-win32/opengl.c b/od-win32/opengl.c index 2f145281..390b9db9 100755 --- a/od-win32/opengl.c +++ b/od-win32/opengl.c @@ -459,22 +459,31 @@ void OGL_resize (int width, int height) static void OGL_dorender (int newtex) { - float x1, y1, x2, y2, tx, ty; uae_u8 *data = gfxvidinfo.bufmem; - int fx, fy, xm, ym; + float x1, y1, x2, y2, tx, ty; + double mx, my, fx, fy, xm, ym; xm = currprefs.gfx_lores ? 2 : 1; ym = currprefs.gfx_linedbl ? 1 : 2; - if (w_width >= 1024) - xm *= 2; - else if (w_width < 500) - xm /= 2; - if (w_height >= 960) - ym *= 2; - else if (w_height < 350) - ym /= 2; - fx = (t_width * xm - w_width) / 2; - fy = (t_height * ym - w_height) / 2; + + fx = (required_texture_size * w_width / t_width) / 2.0; + fy = (required_texture_size * w_height / t_height) / 2.0; + + tx = fx / ((currprefs.gfx_filter_horiz_zoom_mult + currprefs.gfx_filter_horiz_zoom / 4.0) / 1000.0); + ty = fy / ((currprefs.gfx_filter_vert_zoom_mult + currprefs.gfx_filter_vert_zoom / 4.0) / 1000.0); + + mx = (currprefs.gfx_filter_horiz_offset / 1000.0) * fx; + my = (currprefs.gfx_filter_vert_offset / 1000.0) * fy; + + x1 = -tx; + y1 = -ty; + x2 = tx; + y2 = ty; + x1 += fx + mx; + y1 += fy + my; + x2 += tx + mx; + y2 += ty + my; + #ifdef FSAA glEnable (GL_MULTISAMPLE_ARB); @@ -483,15 +492,6 @@ static void OGL_dorender (int newtex) glMatrixMode (GL_MODELVIEW); glLoadIdentity (); - tx = x1 = (float)(w_width * currprefs.gfx_filter_horiz_offset / 100.0); - ty = y1 = (float)(w_height * currprefs.gfx_filter_vert_offset / 100.0); - x2 = x1 + (float)((required_texture_size * w_width / t_width) * ((currprefs.gfx_filter_horiz_zoom_mult * (currprefs.gfx_filter_horiz_zoom + 100)) / (100.0 * 1000.0))); - y2 = y1 + (float)((required_texture_size * w_height / t_height) * ((currprefs.gfx_filter_vert_zoom_mult * (currprefs.gfx_filter_vert_zoom + 100)) / (100.0 * 1000.0))); - x1 += (x2 - tx) / 2; - y1 += (y2 - ty) / 2; - x1 -= fx; y1 -= fy; - x2 += 2 * fx; y2 += 2 * fy; - glBindTexture (GL_TEXTURE_2D, tex[0]); if (newtex) glTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, t_width, t_height, ti2d_format, ti2d_type, data); diff --git a/od-win32/resources/resource.h b/od-win32/resources/resource.h index bd28b008..30a02436 100755 --- a/od-win32/resources/resource.h +++ b/od-win32/resources/resource.h @@ -312,6 +312,8 @@ #define IDC_CAPS 1077 #define IDC_ABIME 1078 #define IDC_AMIGASYS 1079 +#define IDC_AMIGASYS2 1080 +#define IDC_AMIKIT 1080 #define IDC_RICHEDIT1 1091 #define IDC_RICHEDIT2 1092 #define IDC_CONTRIBUTORS 1124 diff --git a/od-win32/resources/winuae.rc b/od-win32/resources/winuae.rc index a84020ad..e4167072 100755 --- a/od-win32/resources/winuae.rc +++ b/od-win32/resources/winuae.rc @@ -37,21 +37,21 @@ EXSTYLE WS_EX_CONTEXTHELP FONT 8, "MS Sans Serif", 0, 0, 0x1 BEGIN GROUPBOX "System ROM Settings",-1,5,0,290,74 - RTEXT "Main ROM File:",IDC_ROMTEXT,10,15,75,10 + RTEXT "Main ROM file:",IDC_ROMTEXT,10,15,75,10 COMBOBOX IDC_ROMFILE,89,12,186,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "...",IDC_KICKCHOOSER,280,10,10,15 - RTEXT "Extended ROM File:",IDC_ROMFILE2TEXT,10,35,75,10 + RTEXT "Extended ROM file:",IDC_ROMFILE2TEXT,10,35,75,10 COMBOBOX IDC_ROMFILE2,89,31,186,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "...",IDC_ROMCHOOSER2,280,30,10,15 - CONTROL "MapROM emulation [] Creates BlizKick-compatible memory area.",IDC_MAPROM, + CONTROL "MapROM emulation [] Creates a BlizKick-compatible memory area.",IDC_MAPROM, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,95,54,82,10 CONTROL "ShapeShifter support [] Patches the system ROM for ShapeShifter compatibility.",IDC_KICKSHIFTER, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,54,80,10 GROUPBOX "Miscellaneous",-1,5,76,290,57 - RTEXT "Cartridge ROM File:",IDC_FLASHTEXT2,8,93,75,10 + RTEXT "Cartridge ROM file:",IDC_FLASHTEXT2,8,93,75,10 COMBOBOX IDC_CARTFILE,89,90,186,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "...",IDC_CARTCHOOSER,280,90,10,15 - RTEXT "Flash RAM File:",IDC_FLASHTEXT,8,112,75,10 + RTEXT "Flash RAM file:",IDC_FLASHTEXT,8,112,75,10 EDITTEXT IDC_FLASHFILE,89,110,185,13,ES_AUTOHSCROLL PUSHBUTTON "...",IDC_FLASHCHOOSER,280,110,10,15 END @@ -87,7 +87,7 @@ BEGIN COMBOBOX IDC_DA_MODE,35,183,58,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | NOT WS_VISIBLE | WS_VSCROLL | WS_TABSTOP CONTROL "",IDC_DA_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | NOT WS_VISIBLE | WS_TABSTOP,99,179,101,20 PUSHBUTTON "Detect Pixel Format",IDC_TEST16BIT,210,181,73,14 - LTEXT "FPS Adj.:",IDC_REFRESH2TEXT,17,149,30,8 + LTEXT "FPS adj.:",IDC_REFRESH2TEXT,17,149,30,8 CONTROL "",IDC_FRAMERATE2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,47,144,127,20 EDITTEXT IDC_RATE2TEXT,178,148,26,12,ES_CENTER | ES_READONLY COMBOBOX IDC_RESOLUTIONDEPTH,112,27,32,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP @@ -131,7 +131,7 @@ BEGIN CONTROL "68040",IDC_CPU6,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,10,108,66,10 CONTROL "More compatible [] Emulate 68000's prefetch registers. More compatible but slower.",IDC_COMPATIBLE, "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,10,130,70,10 - CONTROL "JIT [] Enable just-in-time CPU emulator. Significantly increases the speed of CPU emulation. Requires 68020 or 68040 CPU.",IDC_JITENABLE, + CONTROL "JIT [] Enable just-in-time CPU emulator. Significantly increases the speed of the CPU emulation. Requires 68020 or 68040 CPU.",IDC_JITENABLE, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,145,64,10 GROUPBOX "CPU Emulation Speed",IDC_STATIC,90,5,205,86 CONTROL "Fastest possible, but maintain chipset timing",IDC_CS_HOST, @@ -192,8 +192,8 @@ BEGIN PUSHBUTTON "...",IDC_DF3,287,109,10,15 GROUPBOX "New Floppy Disk Image",IDC_SETTINGSTEXT,5,183,289,35 COMBOBOX IDC_FLOPPYTYPE,16,196,51,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "Create standard disk [] Creates a standard 880 KB ADF disk image.",IDC_CREATE,76,196,97,15 - PUSHBUTTON "Create custom disk [] Creates a low level (MFM) ADF disk image (about 2MB). Useful for programs that use non-standard disk formats (for example some save disks or DOS-formatted floppies)",IDC_CREATE_RAW,183,196,101,15 + PUSHBUTTON "Create Standard Disk [] Creates a standard 880 KB ADF disk image.",IDC_CREATE,76,196,97,15 + PUSHBUTTON "Create Custom Disk [] Creates a low level (MFM) ADF disk image (about 2MB). Useful for programs that use non-standard disk formats (for example some save disks or DOS-formatted floppies)",IDC_CREATE_RAW,183,196,101,15 GROUPBOX "Floppy Drive Emulation Speed",IDC_SETTINGSTEXT2,5,144,289,35 CONTROL "",IDC_FLOPPYSPD,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,32,152,116,20 EDITTEXT IDC_FLOPPYSPDTEXT,169,155,107,12,ES_CENTER | ES_READONLY @@ -209,9 +209,9 @@ EXSTYLE WS_EX_CONTEXTHELP FONT 8, "MS Sans Serif", 0, 0, 0x1 BEGIN CONTROL "List1",IDC_VOLUMELIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,5,0,290,182 - PUSHBUTTON "Add &directory...",IDC_NEW_FS,5,186,60,15 - PUSHBUTTON "Add &hardfile...",IDC_NEW_HF,70,186,60,15 - PUSHBUTTON "Add ha&rd drive...",IDC_NEW_HD,135,186,60,15 + PUSHBUTTON "Add &Directory...",IDC_NEW_FS,5,186,60,15 + PUSHBUTTON "Add &Hardfile...",IDC_NEW_HF,70,186,60,15 + PUSHBUTTON "Add Ha&rd Drive...",IDC_NEW_HD,135,186,60,15 PUSHBUTTON "Remove",IDC_REMOVE,235,186,60,15 PUSHBUTTON "&Properties",IDC_EDIT,235,207,60,15 CONTROL "Add PC drives at startup",IDC_MAPDRIVES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,205,100,10,0,HIDC_MAPDRIVES @@ -234,7 +234,7 @@ BEGIN GROUPBOX "Volume",IDC_STATIC,131,30,164,31 CONTROL "",IDC_SOUNDVOLUME,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,137,38,105,20 EDITTEXT IDC_SOUNDVOLUME2,247,41,40,12,ES_CENTER | ES_READONLY - GROUPBOX "Sound buffer size",IDC_STATIC,132,67,164,31 + GROUPBOX "Sound Buffer Size",IDC_STATIC,132,67,164,31 CONTROL "Slider1",IDC_SOUNDBUFFERRAM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,138,75,106,19 EDITTEXT IDC_SOUNDBUFFERMEM,248,78,40,12,ES_CENTER | ES_READONLY GROUPBOX "Settings",IDC_SOUNDINTERPOLATION2,6,101,290,60 @@ -277,14 +277,14 @@ BEGIN CONTROL "Ignore link",IDC_CONFIGNOLINK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,146,206,48,10 EDITTEXT IDC_EDITPATH,199,161,49,15,ES_AUTOHSCROLL | WS_DISABLED,0,HIDC_EDITPATH CONTROL "Autoload",IDC_CONFIGAUTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,253,163,42,10 - GROUPBOX "Additional information",IDC_STATIC,199,179,96,38,BS_LEFT + GROUPBOX "Additional Information",IDC_STATIC,199,179,96,38,BS_LEFT PUSHBUTTON "View",IDC_VIEWINFO,210,195,35,15 PUSHBUTTON "Set",IDC_SETINFO,250,195,35,15 PUSHBUTTON "Load",IDC_QUICKLOAD,5,225,40,15 PUSHBUTTON "Save",IDC_QUICKSAVE,50,225,40,15 - PUSHBUTTON "Load from...",IDC_LOAD,125,225,45,15 - PUSHBUTTON "Save as...",IDC_SAVE,175,225,40,15 + PUSHBUTTON "Load From...",IDC_LOAD,125,225,45,15 PUSHBUTTON "Delete",IDC_DELETE,255,225,40,15 + PUSHBUTTON "Save As...",IDC_SAVE,175,225,40,15 END IDD_PORTS DIALOGEX 0, 0, 300, 222 @@ -297,7 +297,7 @@ BEGIN PUSHBUTTON "Flush print job",IDC_FLUSHPRINTER,220,14,58,12 CONTROL "PostScript detection",IDC_PSPRINTERDETECT,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,11,33,78,12 CONTROL "PostScript printer emulation",IDC_PSPRINTER,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,93,33,100,12 - RTEXT "Autoflush timeout [] Time in seconds after pending print job is automatically flushed.",IDC_PRINTERAUTOFLUSHTXT,202,32,57,15,SS_NOTIFY | SS_CENTERIMAGE + RTEXT "Autoflush timeout [] Time in seconds after a pending print job is automatically flushed.",IDC_PRINTERAUTOFLUSHTXT,202,32,57,15,SS_NOTIFY | SS_CENTERIMAGE EDITTEXT IDC_PRINTERAUTOFLUSH,263,33,25,12,ES_NUMBER RTEXT "Ghostscript extra parameters:",IDC_STATIC,12,49,91,15,SS_CENTERIMAGE EDITTEXT IDC_PS_PARAMS,120,50,169,12,ES_AUTOHSCROLL @@ -346,7 +346,8 @@ BEGIN CONTROL "",IDC_CAPS,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,200,145,80,15 CONTROL "",IDC_ABIME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,110,145,80,15 CONTROL "",IDC_CLOANTOHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,20,90,80,20 - CONTROL "",IDC_AMIGASYS,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,110,169,80,15 + CONTROL "",IDC_AMIGASYS,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,63,169,80,15 + CONTROL "",IDC_AMIKIT,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,157,169,80,15 END IDD_MISC1 DIALOGEX 0, 0, 300, 219 @@ -443,7 +444,7 @@ END IDD_SETINFO DIALOGEX 0, 0, 229, 85 STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Info Settings" +CAPTION "Additional Information Settings" FONT 8, "MS Sans Serif", 0, 0, 0x0 BEGIN RTEXT "Path:",-1,5,20,24,15,SS_CENTERIMAGE @@ -458,11 +459,11 @@ STYLE DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD FONT 8, "MS Sans Serif", 0, 0, 0x0 BEGIN GROUPBOX "Chipset",IDC_STATIC,14,11,145,82 - CONTROL "OCS [] Original Amiga chipset. A1000 and most A500s.",IDC_OCS, + CONTROL "OCS [] Original chipset. A1000 and most A500s.",IDC_OCS, "Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,38,31,51,10 - CONTROL "ECS Agnus [] Enhanced Chipset (ECS Agnus chip only). Later A500 and A2000 hardware revisions.",IDC_ECS_AGNUS, + CONTROL "ECS Agnus [] Enhanced chipset (ECS Agnus chip only). Later A500 and A2000 hardware revisions.",IDC_ECS_AGNUS, "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,38,47,55,10 - CONTROL "Full ECS [] Full ECS Chipset (ECS Agnus and ECS Denise chips). A500+, A600, A3000.",IDC_ECS, + CONTROL "Full ECS [] Full ECS chipset (ECS Agnus and ECS Denise chips). A500+, A600 and A3000.",IDC_ECS, "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,38,63,52,10 CONTROL "AGA [] Advanced Graphics Architecture chipset. A1200, A4000 and CD32.",IDC_AGA, "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,101,31,51,10 @@ -678,7 +679,7 @@ BEGIN RTEXT "Best compatibility",IDC_STATIC,13,70,67,10,SS_CENTERIMAGE CONTROL "",IDC_QUICKSTART_COMPATIBILITY,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,88,65,115,21 RTEXT "Low compatibility",IDC_STATIC,215,70,63,10,SS_CENTERIMAGE - GROUPBOX "Host configuration",IDC_QUICKSTART_HOST,3,91,294,33 + GROUPBOX "Host Configuration",IDC_QUICKSTART_HOST,3,91,294,33 RTEXT "Configuration:",IDC_STATIC,5,105,55,10,SS_CENTERIMAGE COMBOBOX IDC_QUICKSTART_HOSTCONFIG,65,103,225,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP GROUPBOX "Emulated Floppy Drives",IDC_QUICKSTART_DF,3,126,294,84 @@ -818,8 +819,8 @@ IDI_PATHS ICON "paths.ico" // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,1,1,0 - PRODUCTVERSION 1,1,1,0 + FILEVERSION 1,2,0,0 + PRODUCTVERSION 1,2,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -835,12 +836,12 @@ BEGIN BLOCK "040904b0" BEGIN VALUE "FileDescription", "WinUAE" - VALUE "FileVersion", "1.1.1" + VALUE "FileVersion", "1.2" VALUE "InternalName", "WinUAE" VALUE "LegalCopyright", "© 1996-2005 under the GNU Public License (GPL)" VALUE "OriginalFilename", "WinUAE.exe" VALUE "ProductName", "WinUAE" - VALUE "ProductVersion", "1.1.1" + VALUE "ProductVersion", "1.2" END END BLOCK "VarFileInfo" @@ -1071,7 +1072,7 @@ BEGIN IDS_AVIOUTPUT_NOCODEC "no codec selected" IDS_DISK_IMAGENAME "Disk image" IDS_DISK_DRIVENAME "Drive" - IDS_AGA8BIT "AGA emulation requires a 16 bit or higher display depth\nSwitching from 8-bit to 16-bit" + IDS_AGA8BIT "AGA emulation requires a 16-bit or higher display depth.\nSwitching from 8-bit to 16-bit." IDS_UNSUPPORTEDSCREENMODE "The selected screen mode can't be displayed in a window, because %s\nSwitching to full-screen display." IDS_UNSUPPORTEDSCREENMODE_1 @@ -1081,9 +1082,9 @@ END STRINGTABLE BEGIN IDS_UNSUPPORTEDSCREENMODE_2 - "the desktop is running in 8 bit color depth, which WinUAE can't use in windowed mode." + "the desktop is running in 8-bit color depth, which WinUAE can't use in windowed mode." IDS_UNSUPPORTEDSCREENMODE_3 - "the desktop is too small for the specified window size" + "the desktop is too small for the specified window size." IDS_UNSUPPORTEDSCREENMODE_4 "you selected an RTG (Picasso96) display with a color depth different from that of the desktop and an overlay was unavailable." IDS_FLOPPYTYPE35DD "3.5"" DD" @@ -1095,7 +1096,7 @@ BEGIN IDS_TREEVIEW_HOST "Host" IDS_TREEVIEW_MISC "Miscellaneous" IDS_TREEVIEW_SETTINGS "Settings" - IDS_WINUAETITLE_MMB "[Mouse active - press ALT+TAB or middle-button to cancel]" + IDS_WINUAETITLE_MMB "[Mouse active - press ALT+TAB or middle mouse button to cancel]" IDS_WINUAETITLE_NORMAL "[Mouse active - press ALT+TAB to cancel]" IDS_STARTEMULATION "Start" IDS_TREEVIEW_ABOUT "About" @@ -1103,12 +1104,12 @@ END STRINGTABLE BEGIN - IDS_NOHARDDRIVES "No Amiga formatted or completely empty harddrives detected." + IDS_NOHARDDRIVES "No hard disks detected that were either empty or RDB-partitioned." IDS_DEFAULT_HOST "Default Configuration" IDS_SOUND_4CHANNEL "4 Channels" IDS_HF_FS_CUSTOM "Custom" IDS_SELECTFS "Select file system handler (FastFileSystem, SmartFilesystem, etc.)" - IDS_KEYJOY "Keyboard Layout A (Numeric keypad, 0 and 5 = fire)\nKeyboard Layout B (Cursor keys, right CTRL and ALT = fire)\nKeyboard Layout C (T=up B=down F=left H=right, left ALT = fire)\nX-Arcade (Left)\nX-Arcade (Right)" + IDS_KEYJOY "Keyboard Layout A (Numeric keypad, 0 and 5 = Fire)\nKeyboard Layout B (Cursor keys, Right CTRL and ALT = Fire)\nKeyboard Layout C (T=Up B=Down F=Left H=Right, Left ALT = Fire)\nX-Arcade (Left)\nX-Arcade (Right)" IDS_STATEFILE_UNCOMPRESSED "Uncompressed" IDS_STATEFILE_RAMDUMP "RAM dump" IDS_STATEFILE_WAVE "Wave audio dump" @@ -1128,20 +1129,20 @@ END STRINGTABLE BEGIN IDS_NUMSG_NOEXTROM "No extended ROM found." - IDS_NUMSG_MODRIP_NOTFOUND "No modules or compressed data found." + IDS_NUMSG_MODRIP_NOTFOUND "No music modules or packed data found." IDS_NUMSG_MODRIP_FINISHED "Scan finished." - IDS_NUMSG_MODRIP_SAVE "Module/packed data found\n%s\nDo you want to save it?" - IDS_NUMSG_KS68020 "The selected system ROM requires a 68020 CPU or higher CPU." + IDS_NUMSG_MODRIP_SAVE "Module/packed data found\n%s\nWould you like to save it?" + IDS_NUMSG_KS68020 "The selected system ROM requires a 68020 or higher CPU." IDS_NUMSG_ROMNEED "One of the following system ROMs is required:\n\n%s\n\nCheck the System ROM path in the Paths panel and click Rescan ROMs." - IDS_NUMSG_STATEHD "WARNING: State saves do not support hard drive emulation. This message does not appear again." - IDS_NUMSG_NOCAPS "This disk image needs the SPS plugin\nwhich is available from\nhttp//www.softpres.org/" + IDS_NUMSG_STATEHD "WARNING: State saves do not support hard drive emulation. This message will not appear again." + IDS_NUMSG_NOCAPS "Selected disk image needs the SPS plugin\nwhich is available from\nhttp//www.softpres.org/" IDS_NUMSG_OLDCAPS "You need an updated SPS plugin\nwhich is available from\nhttp//www.softpres.org/" IDS_IMGCHK_BOOTBLOCKCRCERROR - "Selected floppy disk image is not bootable (boot block checksum error)" - IDS_IMGCHK_BOOTBLOCKNO "Selected floppy disk image is not bootable (no boot block)" - IDS_IMGCHK_DAMAGED "Selected floppy disk image is damaged or unformatted" - IDS_IMGCHK_KS2 "Selected floppy disk image requires a 2.04 or later system ROM.\nThe configuration has been updated." - IDS_IMGCHK_KS3 "Selected floppy disk image requires a 3.0 or later system ROM.\nThe configuration has been updated." + "The selected floppy disk image is not bootable (boot block checksum error)" + IDS_IMGCHK_BOOTBLOCKNO "The selected floppy disk image is not bootable (no boot block)" + IDS_IMGCHK_DAMAGED "The selected floppy disk image is damaged or unformatted" + IDS_IMGCHK_KS2 "The selected floppy disk image requires a 2.04 or later system ROM.\nThe configuration has been updated." + IDS_IMGCHK_KS3 "The selected floppy disk image requires a 3.0 or later system ROM.\nThe configuration has been updated." IDS_ROMSCANEND "Scan of ROMs finished" END @@ -1153,9 +1154,9 @@ BEGIN "Warning: The safety test has been disabled, and non-empty hard disks were detected.\n\nHard disks marked with 'HD_*_' are not empty." IDS_NUMSG_KS68EC020 "The selected system ROM requires a 68EC020 or higher CPU." IDS_ROMSCANNOROMS "No supported system ROMs detected." - IDS_NUMSG_KICKREP "You need to have a floppy disk image file in DF0 to use the system ROM replacement." - IDS_NUMSG_KICKREPNO "The floppy disk image file in DF0: is not compatible with the system ROM replacement functionality." - IDS_NUMSG_NOROM "Could not load Kickstart ROM, trying Kickstart replacement." + IDS_NUMSG_KICKREP "You need to have a floppy disk (image file) in DF0: to use the system ROM replacement." + IDS_NUMSG_KICKREPNO "The floppy disk (image file) in DF0: is not compatible with the system ROM replacement functionality." + IDS_NUMSG_NOROM "Could not load Kickstart ROM, trying system ROM replacement." IDS_HDCLONE_OK "Hard drive image file created succesfully." IDS_HDCLONE_FAIL "Hard drive image file creation failed, error code %d." END diff --git a/od-win32/win32.h b/od-win32/win32.h index 3dbae2c1..a0836991 100755 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -22,7 +22,7 @@ extern int manual_palette_refresh_needed; extern int mouseactive, focus; extern int ignore_messages_all; #define WINUAEBETA 1 -#define WINUAEBETASTR " Beta 3" +#define WINUAEBETASTR " Beta 4" extern char start_path_exe[MAX_DPATH]; extern char start_path_data[MAX_DPATH]; diff --git a/od-win32/win32gui.c b/od-win32/win32gui.c index a60ac10e..40fff4e1 100755 --- a/od-win32/win32gui.c +++ b/od-win32/win32gui.c @@ -2485,6 +2485,7 @@ static urlinfo urls[] = {IDC_ABIME, FALSE, "abime.net", "http://www.abime.net/"}, {IDC_CAPS, FALSE, "SPS", "http://www.softpres.org/"}, {IDC_AMIGASYS, FALSE, "AmigaSYS", "http://amigasys.fw.hu/"}, + {IDC_AMIKIT, FALSE, "AmiKit", "http://amikit.amiga.sk/"}, { -1, FALSE, NULL, NULL } }; -- 2.47.3