26.05.2010

parent 362b9d4a
...@@ -554,8 +554,11 @@ static void led_vsync (void) ...@@ -554,8 +554,11 @@ static void led_vsync (void)
v = 255; v = 255;
else if (led_cycles_off && !led_cycles_on) else if (led_cycles_off && !led_cycles_on)
v = 0; v = 0;
else else if (led_cycles_off)
v = led_cycles_on * 255 / led_cycles_off; v = led_cycles_on * 255 / led_cycles_off;
else
v = 255;
if (v < 0) if (v < 0)
v = 0; v = 0;
if (v > 255) if (v > 255)
...@@ -606,12 +609,13 @@ static void bfe001_change (void) ...@@ -606,12 +609,13 @@ static void bfe001_change (void)
//activate_debugger (); //activate_debugger ();
map_overlay (0); map_overlay (0);
} }
}
#ifdef CD32 #ifdef CD32
} else if (currprefs.cs_cd32cd && (v & 1) != oldcd32mute) { if (currprefs.cs_cd32cd && (v & 1) != oldcd32mute) {
oldcd32mute = v & 1; oldcd32mute = v & 1;
akiko_mute (oldcd32mute ? 0 : 1); akiko_mute (oldcd32mute ? 0 : 1);
#endif
} }
#endif
} }
static uae_u8 ReadCIAA (unsigned int addr) static uae_u8 ReadCIAA (unsigned int addr)
...@@ -1207,6 +1211,10 @@ void CIA_reset (void) ...@@ -1207,6 +1211,10 @@ void CIA_reset (void)
#endif #endif
if (savestate_state) { if (savestate_state) {
bfe001_change (); bfe001_change ();
if (!currprefs.cs_ciaoverlay) {
map_overlay (1);
oldovl = false;
}
/* select drives */ /* select drives */
DISK_select (ciabprb); DISK_select (ciabprb);
} }
......
...@@ -134,8 +134,7 @@ STATIC_INLINE int comp_fp_get (uae_u32 opcode, uae_u16 extra, int treg) ...@@ -134,8 +134,7 @@ STATIC_INLINE int comp_fp_get (uae_u32 opcode, uae_u16 extra, int treg)
} }
case 2: /* (d16,PC) */ case 2: /* (d16,PC) */
{ {
uae_u32 address=start_pc+((uae_char*)comp_pc_p-(uae_char*)start_pc_p)+ uae_u32 address=start_pc+((uae_char*)comp_pc_p-(uae_char*)start_pc_p)+m68k_pc_offset;
m68k_pc_offset;
uae_s32 PC16off =(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); uae_s32 PC16off =(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2);
mov_l_ri(S1,address+PC16off); mov_l_ri(S1,address+PC16off);
break; break;
...@@ -179,8 +178,7 @@ STATIC_INLINE int comp_fp_get (uae_u32 opcode, uae_u16 extra, int treg) ...@@ -179,8 +178,7 @@ STATIC_INLINE int comp_fp_get (uae_u32 opcode, uae_u16 extra, int treg)
} }
case 5: case 5:
{ {
uae_u32 longarray[] = {comp_get_ilong(m68k_pc_offset-4), uae_u32 longarray[] = {comp_get_ilong(m68k_pc_offset-4), comp_get_ilong(m68k_pc_offset-8)};
comp_get_ilong(m68k_pc_offset-8)};
float si = (float)*(double *)longarray; float si = (float)*(double *)longarray;
if (*(double *)longarray == (double)si) { if (*(double *)longarray == (double)si) {
...@@ -369,6 +367,7 @@ STATIC_INLINE int comp_fp_put (uae_u32 opcode, uae_u16 extra) ...@@ -369,6 +367,7 @@ STATIC_INLINE int comp_fp_put (uae_u32 opcode, uae_u16 extra)
return -1; return -1;
} }
} }
switch (size) { switch (size) {
case 0: /* Long */ case 0: /* Long */
fmovi_mrb((uae_u32)temp_fp,sreg, clamp_bounds.l); fmovi_mrb((uae_u32)temp_fp,sreg, clamp_bounds.l);
...@@ -470,7 +469,7 @@ void comp_fscc_opp (uae_u32 opcode, uae_u16 extra) ...@@ -470,7 +469,7 @@ void comp_fscc_opp (uae_u32 opcode, uae_u16 extra)
write_log ("JIT: fscc_opp at %08lx\n", M68K_GETPC); write_log ("JIT: fscc_opp at %08lx\n", M68K_GETPC);
#endif #endif
if (extra&0x20) { /* only cc from 00 to 1f are defined */ if (extra & 0x20) { /* only cc from 00 to 1f are defined */
FAIL(1); FAIL(1);
return; return;
} }
...@@ -480,33 +479,67 @@ void comp_fscc_opp (uae_u32 opcode, uae_u16 extra) ...@@ -480,33 +479,67 @@ void comp_fscc_opp (uae_u32 opcode, uae_u16 extra)
} }
fflags_into_flags(S2); fflags_into_flags(S2);
reg=(opcode&7); reg = (opcode & 7);
mov_l_ri(S1,255); mov_l_ri(S1,255);
mov_l_ri(S4,0); mov_l_ri(S4,0);
switch(extra&0x0f) { /* according to fpp.c, the 0x10 bit is ignored */
switch (extra & 0x0f) { /* according to fpp.c, the 0x10 bit is ignored */
case 0: break; /* set never */ case 0: break; /* set never */
case 1: mov_l_rr(S2,S4); case 1:
mov_l_rr(S2,S4);
cmov_l_rr(S4,S1,4);
cmov_l_rr(S4,S2,10);
break;
case 2:
cmov_l_rr(S4,S1,7);
break;
case 3:
cmov_l_rr(S4,S1,3);
break;
case 4:
mov_l_rr(S2,S4);
cmov_l_rr(S4,S1,2);
cmov_l_rr(S4,S2,10);
break;
case 5:
mov_l_rr(S2,S4);
cmov_l_rr(S4,S1,6);
cmov_l_rr(S4,S2,10);
break;
case 6:
cmov_l_rr(S4,S1,5);
break;
case 7:
cmov_l_rr(S4,S1,11);
break;
case 8:
cmov_l_rr(S4,S1,10);
break;
case 9:
cmov_l_rr(S4,S1,4);
break;
case 10:
cmov_l_rr(S4,S1,10);
cmov_l_rr(S4,S1,7);
break;
case 11:
cmov_l_rr(S4,S1,4); cmov_l_rr(S4,S1,4);
cmov_l_rr(S4,S2,10); break; cmov_l_rr(S4,S1,3);
case 2: cmov_l_rr(S4,S1,7); break; break;
case 3: cmov_l_rr(S4,S1,3); break; case 12:
case 4: mov_l_rr(S2,S4);
cmov_l_rr(S4,S1,2); cmov_l_rr(S4,S1,2);
cmov_l_rr(S4,S2,10); break; break;
case 5: mov_l_rr(S2,S4); case 13:
cmov_l_rr(S4,S1,6); cmov_l_rr(S4,S1,6);
cmov_l_rr(S4,S2,10); break; break;
case 6: cmov_l_rr(S4,S1,5); break; case 14:
case 7: cmov_l_rr(S4,S1,11); break; cmov_l_rr(S4,S1,5);
case 8: cmov_l_rr(S4,S1,10); break; cmov_l_rr(S4,S1,10);
case 9: cmov_l_rr(S4,S1,4); break; break;
case 10: cmov_l_rr(S4,S1,10); cmov_l_rr(S4,S1,7); break; case 15:
case 11: cmov_l_rr(S4,S1,4); cmov_l_rr(S4,S1,3); break; mov_l_rr(S4,S1);
case 12: cmov_l_rr(S4,S1,2); break; break;
case 13: cmov_l_rr(S4,S1,6); break;
case 14: cmov_l_rr(S4,S1,5); cmov_l_rr(S4,S1,10); break;
case 15: mov_l_rr(S4,S1); break;
} }
if (!(opcode & 0x38)) if (!(opcode & 0x38))
...@@ -543,18 +576,16 @@ void comp_fbcc_opp (uae_u32 opcode) ...@@ -543,18 +576,16 @@ void comp_fbcc_opp (uae_u32 opcode)
return; return;
} }
if (opcode&0x20) { /* only cc from 00 to 1f are defined */ if (opcode & 0x20) { /* only cc from 00 to 1f are defined */
FAIL(1); FAIL(1);
return; return;
} }
if (!(opcode&0x40)) { if (!(opcode & 0x40)) {
off=(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2);
} } else {
else { off = comp_get_ilong((m68k_pc_offset+=4)-4);
off=comp_get_ilong((m68k_pc_offset+=4)-4);
} }
mov_l_ri(S1,(uae_u32) mov_l_ri(S1,(uae_u32)(comp_pc_p+off-(m68k_pc_offset-start_68k_offset)));
(comp_pc_p+off-(m68k_pc_offset-start_68k_offset)));
mov_l_ri(PC_P,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p);
/* Now they are both constant. Might as well fold in m68k_pc_offset */ /* Now they are both constant. Might as well fold in m68k_pc_offset */
...@@ -565,9 +596,9 @@ void comp_fbcc_opp (uae_u32 opcode) ...@@ -565,9 +596,9 @@ void comp_fbcc_opp (uae_u32 opcode)
/* according to fpp.c, the 0x10 bit is ignored /* according to fpp.c, the 0x10 bit is ignored
(it handles exception handling, which we don't (it handles exception handling, which we don't
do, anyway ;-) */ do, anyway ;-) */
cc=opcode&0x0f; cc = opcode & 0x0f;
v1=get_const(PC_P); v1 = get_const(PC_P);
v2=get_const(S1); v2 = get_const(S1);
fflags_into_flags(S2); fflags_into_flags(S2);
// mov_l_mi((uae_u32)&foink3,cc); // mov_l_mi((uae_u32)&foink3,cc);
...@@ -576,7 +607,8 @@ void comp_fbcc_opp (uae_u32 opcode) ...@@ -576,7 +607,8 @@ void comp_fbcc_opp (uae_u32 opcode)
case 1: case 1:
mov_l_rr(S2,PC_P); mov_l_rr(S2,PC_P);
cmov_l_rr(PC_P,S1,4); cmov_l_rr(PC_P,S1,4);
cmov_l_rr(PC_P,S2,10); break; cmov_l_rr(PC_P,S2,10);
break;
case 2: register_branch(v1,v2,7); break; case 2: register_branch(v1,v2,7); break;
case 3: register_branch(v1,v2,3); break; case 3: register_branch(v1,v2,3); break;
case 4: case 4:
...@@ -731,8 +763,7 @@ void comp_fpp_opp (uae_u32 opcode, uae_u16 extra) ...@@ -731,8 +763,7 @@ void comp_fpp_opp (uae_u32 opcode, uae_u16 extra)
if (extra & 0x0400) { /* FPIAR */ if (extra & 0x0400) { /* FPIAR */
mov_l_mr((uae_u32)&regs.fpiar,opcode & 15); return; mov_l_mr((uae_u32)&regs.fpiar,opcode & 15); return;
} }
} } else if ((opcode & 0x3f) == 0x3c) {
else if ((opcode & 0x3f) == 0x3c) {
if (extra & 0x1000) { /* FPCR */ if (extra & 0x1000) { /* FPCR */
uae_u32 val=comp_get_ilong((m68k_pc_offset+=4)-4); uae_u32 val=comp_get_ilong((m68k_pc_offset+=4)-4);
mov_l_mi((uae_u32)&regs.fpcr,val); mov_l_mi((uae_u32)&regs.fpcr,val);
...@@ -785,10 +816,11 @@ void comp_fpp_opp (uae_u32 opcode, uae_u16 extra) ...@@ -785,10 +816,11 @@ void comp_fpp_opp (uae_u32 opcode, uae_u16 extra)
case 1: case 1:
case 3: case 3:
default: default:
FAIL(1); return; FAIL(1);
return;
} }
ad=comp_fp_adr (opcode); ad = comp_fp_adr (opcode);
if (ad<0) { if (ad < 0) {
m68k_setpc (m68k_getpc () - 4); m68k_setpc (m68k_getpc () - 4);
op_illg (opcode); op_illg (opcode);
return; return;
...@@ -822,8 +854,7 @@ void comp_fpp_opp (uae_u32 opcode, uae_u16 extra) ...@@ -822,8 +854,7 @@ void comp_fpp_opp (uae_u32 opcode, uae_u16 extra)
} }
list <<= 1; list <<= 1;
} }
} } else { /* Postincrement */
else { /* Postincrement */
for (reg = 0; reg <= 7; reg++) { for (reg = 0; reg <= 7; reg++) {
if (list & 0x80) { if (list & 0x80) {
fmov_ext_mr((uintptr)temp_fp,reg); fmov_ext_mr((uintptr)temp_fp,reg);
...@@ -855,10 +886,11 @@ void comp_fpp_opp (uae_u32 opcode, uae_u16 extra) ...@@ -855,10 +886,11 @@ void comp_fpp_opp (uae_u32 opcode, uae_u16 extra)
case 1: case 1:
case 3: case 3:
default: default:
FAIL(1); return; FAIL(1);
return;
} }
ad=comp_fp_adr (opcode); ad=comp_fp_adr (opcode);
if (ad<0) { if (ad < 0) {
m68k_setpc (m68k_getpc () - 4); m68k_setpc (m68k_getpc () - 4);
op_illg (opcode); op_illg (opcode);
return; return;
...@@ -877,8 +909,7 @@ void comp_fpp_opp (uae_u32 opcode, uae_u16 extra) ...@@ -877,8 +909,7 @@ void comp_fpp_opp (uae_u32 opcode, uae_u16 extra)
abort(); abort();
} }
if (incr < 0) { if (incr < 0) { // not reached
// not reached
for (reg = 7; reg >= 0; reg--) { for (reg = 7; reg >= 0; reg--) {
if (list & 0x80) { if (list & 0x80) {
sub_l_ri(ad,4); sub_l_ri(ad,4);
...@@ -894,8 +925,7 @@ void comp_fpp_opp (uae_u32 opcode, uae_u16 extra) ...@@ -894,8 +925,7 @@ void comp_fpp_opp (uae_u32 opcode, uae_u16 extra)
} }
list <<= 1; list <<= 1;
} }
} } else {
else {
for (reg = 0; reg <= 7; reg++) { for (reg = 0; reg <= 7; reg++) {
if (list & 0x80) { if (list & 0x80) {
readword(ad,S2,S3); readword(ad,S2,S3);
......
...@@ -687,10 +687,10 @@ LOWFUNC(NONE,READ,3,raw_mov_l_rrm_indexed,(W4 d, R4 baser, R4 index)) ...@@ -687,10 +687,10 @@ LOWFUNC(NONE,READ,3,raw_mov_l_rrm_indexed,(W4 d, R4 baser, R4 index))
emit_byte(8*index+baser); emit_byte(8*index+baser);
emit_byte(0); emit_byte(0);
return; return;
} }
emit_byte(0x04+8*d); emit_byte(0x04+8*d);
emit_byte(8*index+baser); emit_byte(8*index+baser);
} }
LENDFUNC(NONE,READ,3,raw_mov_l_rrm_indexed,(W4 d, R4 baser, R4 index)) LENDFUNC(NONE,READ,3,raw_mov_l_rrm_indexed,(W4 d, R4 baser, R4 index))
LOWFUNC(NONE,READ,3,raw_mov_w_rrm_indexed,(W2 d, R4 baser, R4 index)) LOWFUNC(NONE,READ,3,raw_mov_w_rrm_indexed,(W2 d, R4 baser, R4 index))
...@@ -702,10 +702,10 @@ LOWFUNC(NONE,READ,3,raw_mov_w_rrm_indexed,(W2 d, R4 baser, R4 index)) ...@@ -702,10 +702,10 @@ LOWFUNC(NONE,READ,3,raw_mov_w_rrm_indexed,(W2 d, R4 baser, R4 index))
emit_byte(8*index+baser); emit_byte(8*index+baser);
emit_byte(0); emit_byte(0);
return; return;
} }
emit_byte(0x04+8*d); emit_byte(0x04+8*d);
emit_byte(8*index+baser); emit_byte(8*index+baser);
} }
LENDFUNC(NONE,READ,3,raw_mov_w_rrm_indexed,(W2 d, R4 baser, R4 index)) LENDFUNC(NONE,READ,3,raw_mov_w_rrm_indexed,(W2 d, R4 baser, R4 index))
LOWFUNC(NONE,READ,3,raw_mov_b_rrm_indexed,(W1 d, R4 baser, R4 index)) LOWFUNC(NONE,READ,3,raw_mov_b_rrm_indexed,(W1 d, R4 baser, R4 index))
...@@ -716,10 +716,10 @@ LOWFUNC(NONE,READ,3,raw_mov_b_rrm_indexed,(W1 d, R4 baser, R4 index)) ...@@ -716,10 +716,10 @@ LOWFUNC(NONE,READ,3,raw_mov_b_rrm_indexed,(W1 d, R4 baser, R4 index))
emit_byte(8*index+baser); emit_byte(8*index+baser);
emit_byte(0); emit_byte(0);
return; return;
} }
emit_byte(0x04+8*d); emit_byte(0x04+8*d);
emit_byte(8*index+baser); emit_byte(8*index+baser);
} }
LENDFUNC(NONE,READ,3,raw_mov_b_rrm_indexed,(W1 d, R4 baser, R4 index)) LENDFUNC(NONE,READ,3,raw_mov_b_rrm_indexed,(W1 d, R4 baser, R4 index))
LOWFUNC(NONE,WRITE,3,raw_mov_l_mrr_indexed,(R4 baser, R4 index, R4 s)) LOWFUNC(NONE,WRITE,3,raw_mov_l_mrr_indexed,(R4 baser, R4 index, R4 s))
...@@ -733,7 +733,7 @@ LOWFUNC(NONE,WRITE,3,raw_mov_l_mrr_indexed,(R4 baser, R4 index, R4 s)) ...@@ -733,7 +733,7 @@ LOWFUNC(NONE,WRITE,3,raw_mov_l_mrr_indexed,(R4 baser, R4 index, R4 s))
} }
emit_byte(0x04+8*s); emit_byte(0x04+8*s);
emit_byte(8*index+baser); emit_byte(8*index+baser);
} }
LENDFUNC(NONE,WRITE,3,raw_mov_l_mrr_indexed,(R4 baser, R4 index, R4 s)) LENDFUNC(NONE,WRITE,3,raw_mov_l_mrr_indexed,(R4 baser, R4 index, R4 s))
LOWFUNC(NONE,WRITE,3,raw_mov_w_mrr_indexed,(R4 baser, R4 index, R2 s)) LOWFUNC(NONE,WRITE,3,raw_mov_w_mrr_indexed,(R4 baser, R4 index, R2 s))
...@@ -748,7 +748,7 @@ LOWFUNC(NONE,WRITE,3,raw_mov_w_mrr_indexed,(R4 baser, R4 index, R2 s)) ...@@ -748,7 +748,7 @@ LOWFUNC(NONE,WRITE,3,raw_mov_w_mrr_indexed,(R4 baser, R4 index, R2 s))
} }
emit_byte(0x04+8*s); emit_byte(0x04+8*s);
emit_byte(8*index+baser); emit_byte(8*index+baser);
} }
LENDFUNC(NONE,WRITE,3,raw_mov_w_mrr_indexed,(R4 baser, R4 index, R2 s)) LENDFUNC(NONE,WRITE,3,raw_mov_w_mrr_indexed,(R4 baser, R4 index, R2 s))
LOWFUNC(NONE,WRITE,3,raw_mov_b_mrr_indexed,(R4 baser, R4 index, R1 s)) LOWFUNC(NONE,WRITE,3,raw_mov_b_mrr_indexed,(R4 baser, R4 index, R1 s))
...@@ -762,7 +762,7 @@ LOWFUNC(NONE,WRITE,3,raw_mov_b_mrr_indexed,(R4 baser, R4 index, R1 s)) ...@@ -762,7 +762,7 @@ LOWFUNC(NONE,WRITE,3,raw_mov_b_mrr_indexed,(R4 baser, R4 index, R1 s))
} }
emit_byte(0x04+8*s); emit_byte(0x04+8*s);
emit_byte(8*index+baser); emit_byte(8*index+baser);
} }
LENDFUNC(NONE,WRITE,3,raw_mov_b_mrr_indexed,(R4 baser, R4 index, R1 s)) LENDFUNC(NONE,WRITE,3,raw_mov_b_mrr_indexed,(R4 baser, R4 index, R1 s))
LOWFUNC(NONE,READ,3,raw_mov_l_rm_indexed,(W4 d, IMM base, R4 index)) LOWFUNC(NONE,READ,3,raw_mov_l_rm_indexed,(W4 d, IMM base, R4 index))
...@@ -789,7 +789,7 @@ LOWFUNC(NONE,READ,4,raw_cmov_l_rm_indexed,(W4 d, IMM base, R4 index, IMM cond)) ...@@ -789,7 +789,7 @@ LOWFUNC(NONE,READ,4,raw_cmov_l_rm_indexed,(W4 d, IMM base, R4 index, IMM cond))
emit_byte(0x04+8*d); emit_byte(0x04+8*d);
emit_byte(0x85+8*index); emit_byte(0x85+8*index);
emit_long(base); emit_long(base);
} }
LENDFUNC(NONE,READ,4,raw_cmov_l_rm_indexed,(W4 d, IMM base, R4 index, 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)) LOWFUNC(NONE,READ,3,raw_cmov_l_rm,(W4 d, IMM mem, IMM cond))
...@@ -1460,7 +1460,7 @@ LOWFUNC(WRITE,READ,0,raw_popfl,(void)) ...@@ -1460,7 +1460,7 @@ LOWFUNC(WRITE,READ,0,raw_popfl,(void))
} }
LENDFUNC(WRITE,READ,0,raw_popfl,(void)) LENDFUNC(WRITE,READ,0,raw_popfl,(void))
/************************************************************************* /*************************************************************************
* Unoptimizable stuff --- jump * * Unoptimizable stuff --- jump *
*************************************************************************/ *************************************************************************/
...@@ -1482,7 +1482,7 @@ STATIC_INLINE void raw_jmp_m_indexed(uae_u32 base, uae_u32 r, uae_u32 m) ...@@ -1482,7 +1482,7 @@ STATIC_INLINE void raw_jmp_m_indexed(uae_u32 base, uae_u32 r, uae_u32 m)
{ {
int sib; int sib;
switch(m) { switch (m) {
case 1: sib = 0x05; break; case 1: sib = 0x05; break;
case 2: sib = 0x45; break; case 2: sib = 0x45; break;
case 4: sib = 0x85; break; case 4: sib = 0x85; break;
...@@ -1716,15 +1716,15 @@ int EvalException ( LPEXCEPTION_POINTERS blah, int n_except ) ...@@ -1716,15 +1716,15 @@ int EvalException ( LPEXCEPTION_POINTERS blah, int n_except )
if (n_except == STATUS_GUARD_PAGE_VIOLATION) if (n_except == STATUS_GUARD_PAGE_VIOLATION)
return mman_guard_exception (blah); return mman_guard_exception (blah);
if( n_except != STATUS_ACCESS_VIOLATION || !canbang) if (n_except != STATUS_ACCESS_VIOLATION || !canbang || currprefs.cachesize == 0)
return EXCEPTION_CONTINUE_SEARCH; return EXCEPTION_CONTINUE_SEARCH;
pExceptRecord = blah->ExceptionRecord; pExceptRecord = blah->ExceptionRecord;
pContext = blah->ContextRecord; pContext = blah->ContextRecord;
if( pContext ) if (pContext)
i = (uae_u8 *)ctxPC; i = (uae_u8 *)ctxPC;
if( pExceptRecord ) if (pExceptRecord)
addr = (uae_u32)(pExceptRecord->ExceptionInformation[1]); addr = (uae_u32)(pExceptRecord->ExceptionInformation[1]);
#ifdef JIT_DEBUG #ifdef JIT_DEBUG
write_log ("JIT: fault address is 0x%x at 0x%x\n",addr,i); write_log ("JIT: fault address is 0x%x at 0x%x\n",addr,i);
...@@ -1816,14 +1816,14 @@ int EvalException ( LPEXCEPTION_POINTERS blah, int n_except ) ...@@ -1816,14 +1816,14 @@ int EvalException ( LPEXCEPTION_POINTERS blah, int n_except )
case 1: pr=&(pContext->Rcx); break; case 1: pr=&(pContext->Rcx); break;
case 2: pr=&(pContext->Rdx); break; case 2: pr=&(pContext->Rdx); break;
case 3: pr=&(pContext->Rbx); break; case 3: pr=&(pContext->Rbx); break;
case 4: pr=(size>1)?NULL:(((uae_u8*)&(pContext->Rax))+1); break; case 4: pr=(size>1) ? NULL:(((uae_u8*)&(pContext->Rax))+1); break;
case 5: pr=(size>1)? case 5: pr=(size>1) ?
(void*)(&(pContext->Rbp)): (void*)(&(pContext->Rbp)):
(void*)(((uae_u8*)&(pContext->Rcx))+1); break; (void*)(((uae_u8*)&(pContext->Rcx))+1); break;
case 6: pr=(size>1)? case 6: pr=(size>1) ?
(void*)(&(pContext->Rsi)): (void*)(&(pContext->Rsi)):
(void*)(((uae_u8*)&(pContext->Rdx))+1); break; (void*)(((uae_u8*)&(pContext->Rdx))+1); break;
case 7: pr=(size>1)? case 7: pr=(size>1) ?
(void*)(&(pContext->Rdi)): (void*)(&(pContext->Rdi)):
(void*)(((uae_u8*)&(pContext->Rbx))+1); break; (void*)(((uae_u8*)&(pContext->Rbx))+1); break;
#else #else
...@@ -1831,14 +1831,14 @@ int EvalException ( LPEXCEPTION_POINTERS blah, int n_except ) ...@@ -1831,14 +1831,14 @@ int EvalException ( LPEXCEPTION_POINTERS blah, int n_except )
case 1: pr=&(pContext->Ecx); break; case 1: pr=&(pContext->Ecx); break;
case 2: pr=&(pContext->Edx); break; case 2: pr=&(pContext->Edx); break;
case 3: pr=&(pContext->Ebx); break; case 3: pr=&(pContext->Ebx); break;
case 4: pr=(size>1)?NULL:(((uae_u8*)&(pContext->Eax))+1); break; case 4: pr=(size>1) ? NULL:(((uae_u8*)&(pContext->Eax))+1); break;
case 5: pr=(size>1)? case 5: pr=(size>1) ?
(void*)(&(pContext->Ebp)): (void*)(&(pContext->Ebp)):
(void*)(((uae_u8*)&(pContext->Ecx))+1); break; (void*)(((uae_u8*)&(pContext->Ecx))+1); break;
case 6: pr=(size>1)? case 6: pr=(size>1) ?
(void*)(&(pContext->Esi)): (void*)(&(pContext->Esi)):
(void*)(((uae_u8*)&(pContext->Edx))+1); break; (void*)(((uae_u8*)&(pContext->Edx))+1); break;
case 7: pr=(size>1)? case 7: pr=(size>1) ?
(void*)(&(pContext->Edi)): (void*)(&(pContext->Edi)):
(void*)(((uae_u8*)&(pContext->Ebx))+1); break; (void*)(((uae_u8*)&(pContext->Ebx))+1); break;
#endif #endif
...@@ -1899,7 +1899,6 @@ int EvalException ( LPEXCEPTION_POINTERS blah, int n_except ) ...@@ -1899,7 +1899,6 @@ int EvalException ( LPEXCEPTION_POINTERS blah, int n_except )
emit_byte(0xe9); emit_byte(0xe9);
emit_long((uae_u32)veccode-(uae_u32)target-4); emit_long((uae_u32)veccode-(uae_u32)target-4);
#ifdef JIT_DEBUG #ifdef JIT_DEBUG
write_log ("JIT: Create jump to %p\n",veccode); write_log ("JIT: Create jump to %p\n",veccode);
write_log ("JIT: Handled one access!\n"); write_log ("JIT: Handled one access!\n");
#endif #endif
...@@ -1979,7 +1978,7 @@ int EvalException ( LPEXCEPTION_POINTERS blah, int n_except ) ...@@ -1979,7 +1978,7 @@ int EvalException ( LPEXCEPTION_POINTERS blah, int n_except )
} }
write_log ("JIT: Can't handle access %08X!\n", i); write_log ("JIT: Can't handle access %08X!\n", i);
#if 0 #if 0
if( i ) if (i)
{ {
int j; int j;
...@@ -2025,9 +2024,9 @@ static void vec(int x, struct sigcontext sc) ...@@ -2025,9 +2024,9 @@ static void vec(int x, struct sigcontext sc)
uae_u32 addr=sc.cr2; uae_u32 addr=sc.cr2;
#endif #endif
int r=-1; int r=-1;
int size = 4; int size=4;
int dir = -1; int dir=-1;
int len = 0; int len=0;
int j; int j;
write_log ("JIT: fault address is %08x at %08x\n",addr,i); write_log ("JIT: fault address is %08x at %08x\n",addr,i);
...@@ -2039,49 +2038,49 @@ static void vec(int x, struct sigcontext sc) ...@@ -2039,49 +2038,49 @@ static void vec(int x, struct sigcontext sc)
/* /*
* Decode access opcode * Decode access opcode
*/ */
if (canbang && i >= compiled_code && i <= current_compile_p) { if (canbang && i>=compiled_code && i<=current_compile_p) {
if (*i == 0x66) { if (*i==0x66) {
i++; i++;
size = 2; size=2;
len++; len++;
} }
switch (i[0]) { switch(i[0]) {
case 0x8a: case 0x8a:
if ((i[1] & 0xc0) == 0x80) { if ((i[1]&0xc0)==0x80) {
r=(i[1]>>3)&7; r=(i[1]>>3)&7;
dir = SIG_READ; dir=SIG_READ;
size = 1; size=1;
len += 6; len+=6;
break; break;
} }
break; break;
case 0x88: case 0x88:
if ((i[1] & 0xc0) == 0x80) { if ((i[1]&0xc0)==0x80) {
r=(i[1]>>3)&7; r=(i[1]>>3)&7;
dir = SIG_WRITE; dir=SIG_WRITE;
size = 1; size=1;
len += 6; len+=6;
break; break;
} }
break; break;
case 0x8b: case 0x8b:
switch (i[1] & 0xc0) { switch(i[1]&0xc0) {
case 0x80: case 0x80:
r=(i[1]>>3)&7; r=(i[1]>>3)&7;
dir = SIG_READ; dir=SIG_READ;
len += 6; len+=6;
break; break;
case 0x40: case 0x40:
r=(i[1]>>3)&7; r=(i[1]>>3)&7;
dir = SIG_READ; dir=SIG_READ;
len += 3; len+=3;
break; break;
case 0x00: case 0x00:
r=(i[1]>>3)&7; r=(i[1]>>3)&7;
dir = SIG_READ; dir=SIG_READ;
len += 2; len+=2;
break; break;
default: default:
break; break;
...@@ -2089,21 +2088,21 @@ static void vec(int x, struct sigcontext sc) ...@@ -2089,21 +2088,21 @@ static void vec(int x, struct sigcontext sc)
break; break;
case 0x89: case 0x89:
switch (i[1] & 0xc0) { switch(i[1]&0xc0) {
case 0x80: case 0x80:
r=(i[1]>>3)&7; r=(i[1]>>3)&7;
dir = SIG_WRITE; dir=SIG_WRITE;
len += 6; len+=6;
break; break;
case 0x40: case 0x40:
r=(i[1]>>3)&7; r=(i[1]>>3)&7;
dir = SIG_WRITE; dir=SIG_WRITE;
len += 3; len+=3;
break; break;
case 0x00: case 0x00:
r=(i[1]>>3)&7; r=(i[1]>>3)&7;
dir = SIG_WRITE; dir=SIG_WRITE;
len += 2; len+=2;
break; break;
} }
break; break;
...@@ -2111,7 +2110,7 @@ static void vec(int x, struct sigcontext sc) ...@@ -2111,7 +2110,7 @@ static void vec(int x, struct sigcontext sc)
} }
if (r!=-1) { if (r!=-1) {
void *pr = NULL; void* pr=NULL;
write_log ("JIT: register was %d, direction was %d, size was %d\n",r,dir,size); write_log ("JIT: register was %d, direction was %d, size was %d\n",r,dir,size);
switch(r) { switch(r) {
...@@ -2119,42 +2118,42 @@ static void vec(int x, struct sigcontext sc) ...@@ -2119,42 +2118,42 @@ static void vec(int x, struct sigcontext sc)
case 1: pr=&(sc.CONTEXT_MEMBER(ecx)); break; case 1: pr=&(sc.CONTEXT_MEMBER(ecx)); break;
case 2: pr=&(sc.CONTEXT_MEMBER(edx)); break; case 2: pr=&(sc.CONTEXT_MEMBER(edx)); break;
case 3: pr=&(sc.CONTEXT_MEMBER(ebx)); break; case 3: pr=&(sc.CONTEXT_MEMBER(ebx)); break;
case 4: pr=(size>1)?NULL:(((uae_u8*)&(sc.CONTEXT_MEMBER(eax)))+1); break; case 4: pr=(size>1) ? NULL:(((uae_u8*)&(sc.CONTEXT_MEMBER(eax)))+1); break;
case 5: pr=(size>1)? case 5: pr=(size>1) ?
(void*)(&(sc.CONTEXT_MEMBER(ebp))): (void*)(&(sc.CONTEXT_MEMBER(ebp))):
(void*)(((uae_u8*)&(sc.CONTEXT_MEMBER(ecx)))+1); break; (void*)(((uae_u8*)&(sc.CONTEXT_MEMBER(ecx)))+1); break;
case 6: pr=(size>1)? case 6: pr=(size>1) ?
(void*)(&(sc.CONTEXT_MEMBER(esi))): (void*)(&(sc.CONTEXT_MEMBER(esi))):
(void*)(((uae_u8*)&(sc.CONTEXT_MEMBER(edx)))+1); break; (void*)(((uae_u8*)&(sc.CONTEXT_MEMBER(edx)))+1); break;
case 7: pr=(size>1)? case 7: pr=(size>1) ?
(void*)(&(sc.CONTEXT_MEMBER(edi))): (void*)(&(sc.CONTEXT_MEMBER(edi))):
(void*)(((uae_u8*)&(sc.CONTEXT_MEMBER(ebx)))+1); break; (void*)(((uae_u8*)&(sc.CONTEXT_MEMBER(ebx)))+1); break;
default: abort(); default: abort();
} }
if (pr) { if (pr) {
blockinfo *bi; blockinfo* bi;
if (currprefs.comp_oldsegv) { if (currprefs.comp_oldsegv) {
addr-=(uae_u8)NATMEM_OFFSET; addr-=(uae_u8)NATMEM_OFFSET;
if ((addr >= 0x10000000 && addr < 0x40000000) || if ((addr>=0x10000000 && addr<0x40000000) ||
(addr >= 0x50000000)) { (addr>=0x50000000)) {
write_log ("JIT: Suspicious address in %x SEGV handler.\n",addr); write_log ("JIT: Suspicious address in %x SEGV handler.\n",addr);
} }
if (dir == SIG_READ) { if (dir==SIG_READ) {
switch (size) { switch(size) {
case 1: *((uae_u8*) pr) = get_byte (addr); break; case 1: *((uae_u8*)pr)=get_byte (addr); break;
case 2: *((uae_u16*)pr) = get_word (addr); break; case 2: *((uae_u16*)pr)=get_word (addr); break;
case 4: *((uae_u32*)pr) = get_long (addr); break; case 4: *((uae_u32*)pr)=get_long (addr); break;
default: abort (); default: abort();
} }
} }
else { /* write */ else { /* write */
switch (size) { switch(size) {
case 1: put_byte (addr, *((uae_u8*) pr)); break; case 1: put_byte (addr,*((uae_u8*)pr)); break;
case 2: put_word (addr, *((uae_u16*)pr)); break; case 2: put_word (addr,*((uae_u16*)pr)); break;
case 4: put_long (addr, *((uae_u32*)pr)); break; case 4: put_long (addr,*((uae_u32*)pr)); break;
default: abort (); default: abort();
} }
} }
write_log ("JIT: Handled one access!\n"); write_log ("JIT: Handled one access!\n");
...@@ -2163,73 +2162,73 @@ static void vec(int x, struct sigcontext sc) ...@@ -2163,73 +2162,73 @@ static void vec(int x, struct sigcontext sc)
sc.CONTEXT_MEMBER(eip)+=len; sc.CONTEXT_MEMBER(eip)+=len;
} }
else { else {
void *tmp = target; void* tmp=target;
int i; int i;
uae_u8 vecbuf[5]; uae_u8 vecbuf[5];
addr-=(uae_u8)NATMEM_OFFSET; addr-=(uae_u8)NATMEM_OFFSET;
if ((addr >= 0x10000000 && addr < 0x40000000) || if ((addr>=0x10000000 && addr<0x40000000) ||
(addr >= 0x50000000)) { (addr>=0x50000000)) {
write_log ("JIT: Suspicious address 0x%x in SEGV handler.\n",addr); write_log ("JIT: Suspicious address 0x%x in SEGV handler.\n",addr);
} }
target=(uae_u8*)sc.CONTEXT_MEMBER(eip); target=(uae_u8*)sc.CONTEXT_MEMBER(eip);
for (i = 0; i < 5; i++) for (i=0;i<5;i++)
vecbuf[i] = target[i]; vecbuf[i]=target[i];
emit_byte (0xe9); emit_byte(0xe9);
emit_long ((uae_u32)veccode - (uae_u32)target - 4); emit_long((uae_u32)veccode-(uae_u32)target-4);
write_log ("JIT: Create jump to %p\n",veccode); write_log ("JIT: Create jump to %p\n",veccode);
write_log ("JIT: Handled one access!\n"); write_log ("JIT: Handled one access!\n");
segvcount++; segvcount++;
target = veccode; target=veccode;
if (dir == SIG_READ) { if (dir==SIG_READ) {
switch (size) { switch(size) {
case 1: raw_mov_b_ri(r,get_byte (addr)); break; case 1: raw_mov_b_ri(r,get_byte (addr)); break;
case 2: raw_mov_w_ri(r,get_word (addr)); break; case 2: raw_mov_w_ri(r,get_word (addr)); break;
case 4: raw_mov_l_ri(r,get_long (addr)); break; case 4: raw_mov_l_ri(r,get_long (addr)); break;
default: abort (); default: abort();
} }
} }
else { /* write */ else { /* write */
switch(size) { switch(size) {
case 1: put_byte (addr, *((uae_u8*) pr)); break; case 1: put_byte (addr,*((uae_u8*)pr)); break;
case 2: put_word (addr, *((uae_u16*)pr)); break; case 2: put_word (addr,*((uae_u16*)pr)); break;
case 4: put_long (addr, *((uae_u32*)pr)); break; case 4: put_long (addr,*((uae_u32*)pr)); break;
default: abort (); default: abort();
} }
} }
for (i = 0; i < 5; i++) for (i=0;i<5;i++)
raw_mov_b_mi(sc.CONTEXT_MEMBER(eip)+i,vecbuf[i]); raw_mov_b_mi(sc.CONTEXT_MEMBER(eip)+i,vecbuf[i]);
raw_mov_l_mi ((uae_u32)&in_handler, 0); raw_mov_l_mi((uae_u32)&in_handler,0);
emit_byte (0xe9); emit_byte(0xe9);
emit_long(sc.CONTEXT_MEMBER(eip)+len-(uae_u32)target-4); emit_long(sc.CONTEXT_MEMBER(eip)+len-(uae_u32)target-4);
in_handler = 1; in_handler=1;
target = tmp; target=tmp;
} }
bi = active; bi=active;
while (bi) { while (bi) {
if (bi->handler && if (bi->handler &&
(uae_u8*)bi->direct_handler <= i && (uae_u8*)bi->direct_handler<=i &&
(uae_u8*)bi->nexthandler > i) { (uae_u8*)bi->nexthandler>i) {
write_log ("JIT: deleted trigger (%p<%p<%p) %p\n", write_log ("JIT: deleted trigger (%p<%p<%p) %p\n",
bi->handler, bi->handler,
i, i,
bi->nexthandler, bi->nexthandler,
bi->pc_p); bi->pc_p);
invalidate_block (bi); invalidate_block(bi);
raise_in_cl_list (bi); raise_in_cl_list(bi);
set_special (0); set_special(0);
return; return;
} }
bi = bi->next; bi=bi->next;
} }
/* Not found in the active list. Might be a rom routine that /* Not found in the active list. Might be a rom routine that
is in the dormant list */ is in the dormant list */
bi = dormant; bi=dormant;
while (bi) { while (bi) {
if (bi->handler && if (bi->handler &&
(uae_u8*)bi->direct_handler<=i && (uae_u8*)bi->direct_handler<=i &&
...@@ -2239,9 +2238,9 @@ static void vec(int x, struct sigcontext sc) ...@@ -2239,9 +2238,9 @@ static void vec(int x, struct sigcontext sc)
i, i,
bi->nexthandler, bi->nexthandler,
bi->pc_p); bi->pc_p);
invalidate_block (bi); invalidate_block(bi);
raise_in_cl_list (bi); raise_in_cl_list(bi);
set_special (0); set_special(0);
return; return;
} }
bi=bi->next; bi=bi->next;
...@@ -2327,7 +2326,7 @@ x86_alignments[X86_PROCESSOR_max + 1] = { ...@@ -2327,7 +2326,7 @@ x86_alignments[X86_PROCESSOR_max + 1] = {
}; };
static void static void
x86_get_cpu_vendor(struct cpuinfo_x86 *c) x86_get_cpu_vendor(struct cpuinfo_x86 *c)
{ {
char *v = c->x86_vendor_id; char *v = c->x86_vendor_id;
...@@ -2415,9 +2414,9 @@ static void raw_init_cpu (void) ...@@ -2415,9 +2414,9 @@ static void raw_init_cpu (void)
/* Intel-defined flags: level 0x00000001 */ /* Intel-defined flags: level 0x00000001 */
c->x86_brand_id = 0; c->x86_brand_id = 0;
if (c->cpuid_level >= 0x00000001) { if ( c->cpuid_level >= 0x00000001 ) {
uae_u32 tfms, brand_id; uae_u32 tfms, brand_id;
cpuid (0x00000001, &tfms, &brand_id, NULL, &c->x86_hwcap); cpuid(0x00000001, &tfms, &brand_id, NULL, &c->x86_hwcap);
c->x86 = (tfms >> 8) & 15; c->x86 = (tfms >> 8) & 15;
c->x86_model = (tfms >> 4) & 15; c->x86_model = (tfms >> 4) & 15;
c->x86_brand_id = brand_id & 0xff; c->x86_brand_id = brand_id & 0xff;
...@@ -2434,9 +2433,9 @@ static void raw_init_cpu (void) ...@@ -2434,9 +2433,9 @@ static void raw_init_cpu (void)
} }
/* AMD-defined flags: level 0x80000001 */ /* AMD-defined flags: level 0x80000001 */
cpuid (0x80000000, &xlvl, NULL, NULL, NULL); cpuid(0x80000000, &xlvl, NULL, NULL, NULL);
if ((xlvl & 0xffff0000) == 0x80000000) { if ( (xlvl & 0xffff0000) == 0x80000000 ) {
if (xlvl >= 0x80000001) { if ( xlvl >= 0x80000001 ) {
uae_u32 features; uae_u32 features;
cpuid(0x80000001, NULL, NULL, NULL, &features); cpuid(0x80000001, NULL, NULL, NULL, &features);
if (features & (1 << 29)) { if (features & (1 << 29)) {
...@@ -2503,7 +2502,7 @@ static void raw_init_cpu (void) ...@@ -2503,7 +2502,7 @@ static void raw_init_cpu (void)
{ {
write_log ("CPUID level=%d, Family=%d, Model=%d, Mask=%d, Vendor=%s [%d]\n", write_log ("CPUID level=%d, Family=%d, Model=%d, Mask=%d, Vendor=%s [%d]\n",
c->cpuid_level, c->x86, c->x86_model, c->x86_mask, c->x86_vendor_id, c->x86_vendor); c->cpuid_level, c->x86, c->x86_model, c->x86_mask, c->x86_vendor_id, c->x86_vendor);
} }
} }
#if 0 #if 0
......
...@@ -4770,14 +4770,6 @@ STATIC_INLINE void do_sprites_1 (int num, int cycle, int hpos) ...@@ -4770,14 +4770,6 @@ STATIC_INLINE void do_sprites_1 (int num, int cycle, int hpos)
sprite_fetch2 (s, hpos, cycle, 0); sprite_fetch2 (s, hpos, cycle, 0);
break; break;
} }
} else {
data = cycle == 0 ? sprpos[num] : sprctl[num];
}
#if SPRITE_DEBUG > 1
if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY) {
write_log ("%d:%d:dma:P=%06X ", vpos, hpos, s->pt);
}
#endif
//write_log ("%d:%d: %04X=%04X\n", vpos, hpos, 0x140 + cycle * 2 + num * 8, data); //write_log ("%d:%d: %04X=%04X\n", vpos, hpos, 0x140 + cycle * 2 + num * 8, data);
if (cycle == 0) { if (cycle == 0) {
SPRxPOS_1 (data, num, hpos); SPRxPOS_1 (data, num, hpos);
...@@ -4788,6 +4780,12 @@ STATIC_INLINE void do_sprites_1 (int num, int cycle, int hpos) ...@@ -4788,6 +4780,12 @@ STATIC_INLINE void do_sprites_1 (int num, int cycle, int hpos)
sprstartstop (s); sprstartstop (s);
} }
} }
#if SPRITE_DEBUG > 1
if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY) {
write_log (L"%d:%d:dma:P=%06X ", vpos, hpos, s->pt);
}
#endif
}
if (s->dmastate && !posctl && dma) { if (s->dmastate && !posctl && dma) {
uae_u16 data; uae_u16 data;
...@@ -4919,7 +4917,6 @@ static void init_hardware_frame (void) ...@@ -4919,7 +4917,6 @@ static void init_hardware_frame (void)
ddflastword_total = 0; ddflastword_total = 0;
plflastline_total = 0; plflastline_total = 0;
plffirstline_total = maxvpos; plffirstline_total = maxvpos;
plffirstline_total = maxvpos;
autoscale_bordercolors = 0; autoscale_bordercolors = 0;
for (i = 0; i < MAX_SPRITES; i++) for (i = 0; i < MAX_SPRITES; i++)
spr[i].ptxhpos = MAXHPOS; spr[i].ptxhpos = MAXHPOS;
...@@ -6359,6 +6356,8 @@ void custom_prepare_savestate (void) ...@@ -6359,6 +6356,8 @@ void custom_prepare_savestate (void)
} }
#define RB restore_u8 () #define RB restore_u8 ()
#define SRB (uae_s8)restore_u8 ()
#define RBB restore_u8 () != 0
#define RW restore_u16 () #define RW restore_u16 ()
#define RL restore_u32 () #define RL restore_u32 ()
...@@ -6760,6 +6759,105 @@ uae_u8 *save_custom_sprite(int num, int *len, uae_u8 *dstptr) ...@@ -6760,6 +6759,105 @@ uae_u8 *save_custom_sprite(int num, int *len, uae_u8 *dstptr)
return dstbak; return dstbak;
} }
uae_u8 *restore_custom_extra (uae_u8 *src)
{
restore_u32 ();
currprefs.cs_compatible = changed_prefs.cs_compatible = 0;
currprefs.genlock = changed_prefs.genlock = RBB;
currprefs.cs_rtc = changed_prefs.cs_rtc = RB;
currprefs.cs_rtc_adjust = changed_prefs.cs_rtc_adjust = RL;
currprefs.cs_a1000ram = changed_prefs.cs_a1000ram = RBB;
currprefs.cs_slowmemisfast = changed_prefs.cs_slowmemisfast = RBB;
currprefs.cs_a2091 = changed_prefs.cs_a2091 = RBB;
currprefs.cs_a4091 = changed_prefs.cs_a4091 = RBB;
currprefs.cs_cdtvscsi = changed_prefs.cs_cdtvscsi = RBB;
currprefs.cs_pcmcia = changed_prefs.cs_pcmcia = RBB;
currprefs.cs_ciaatod = changed_prefs.cs_ciaatod = RB;
currprefs.cs_ciaoverlay = changed_prefs.cs_ciaoverlay = RBB;
currprefs.cs_agnusbltbusybug = changed_prefs.cs_agnusbltbusybug = RBB;
currprefs.cs_denisenoehb = changed_prefs.cs_denisenoehb = RBB;
currprefs.cs_agnusrev = changed_prefs.cs_agnusrev = SRB;
currprefs.cs_deniserev = changed_prefs.cs_deniserev = SRB;
currprefs.cs_fatgaryrev = changed_prefs.cs_fatgaryrev = SRB;
currprefs.cs_ramseyrev = changed_prefs.cs_ramseyrev = SRB;
currprefs.cs_cd32c2p = changed_prefs.cs_cd32c2p = RBB;
currprefs.cs_cd32cd = changed_prefs.cs_cd32cd = RBB;
currprefs.cs_cd32nvram = changed_prefs.cs_cd32nvram = RBB;
currprefs.cs_cdtvcd = changed_prefs.cs_cdtvcd = RBB;
currprefs.cs_cdtvram = changed_prefs.cs_cdtvram = RBB;
currprefs.cs_cdtvcard = changed_prefs.cs_cdtvcard = RB;
currprefs.cs_df0idhw = changed_prefs.cs_df0idhw = RBB;
currprefs.cs_dipagnus = changed_prefs.cs_dipagnus = RBB;
currprefs.cs_ide = changed_prefs.cs_ide = RB;
currprefs.cs_mbdmac = changed_prefs.cs_mbdmac = RB;
currprefs.cs_ksmirror_a8 = changed_prefs.cs_ksmirror_a8 = RBB;
currprefs.cs_ksmirror_e0 = changed_prefs.cs_ksmirror_e0 = RBB;
currprefs.cs_resetwarning = changed_prefs.cs_resetwarning = RBB;
return src;
}
uae_u8 *save_custom_extra (int *len, uae_u8 *dstptr)
{
uae_u8 *dstbak, *dst;
if (dstptr)
dstbak = dst = dstptr;
else
dstbak = dst = xmalloc (uae_u8, 1000);
SL (0);
SB (currprefs.genlock ? 1 : 0);
SB (currprefs.cs_rtc);
SL (currprefs.cs_rtc_adjust);
SB (currprefs.cs_a1000ram ? 1 : 0);
SB (currprefs.cs_slowmemisfast ? 1 : 0);
SB (currprefs.cs_a2091 ? 1 : 0);
SB (currprefs.cs_a4091 ? 1 : 0);
SB (currprefs.cs_cdtvscsi ? 1 : 0);
SB (currprefs.cs_pcmcia ? 1 : 0);
SB (currprefs.cs_ciaatod);
SB (currprefs.cs_ciaoverlay ? 1 : 0);
SB (currprefs.cs_agnusbltbusybug ? 1 : 0);
SB (currprefs.cs_denisenoehb ? 1 : 0);
SB (currprefs.cs_agnusrev);
SB (currprefs.cs_deniserev);
SB (currprefs.cs_fatgaryrev);
SB (currprefs.cs_ramseyrev);
SB (currprefs.cs_cd32c2p);
SB (currprefs.cs_cd32cd);
SB (currprefs.cs_cd32nvram);
SB (currprefs.cs_cdtvcd ? 1 : 0);
SB (currprefs.cs_cdtvram ? 1 : 0);
SB (currprefs.cs_cdtvcard);
SB (currprefs.cs_df0idhw ? 1 : 0);
SB (currprefs.cs_dipagnus ? 1 : 0);
SB (currprefs.cs_ide);
SB (currprefs.cs_mbdmac);
SB (currprefs.cs_ksmirror_a8 ? 1 : 0);
SB (currprefs.cs_ksmirror_e0 ? 1 : 0);
SB (currprefs.cs_resetwarning ? 1 : 0);
*len = dst - dstbak;
return dstbak;
}
#endif /* SAVESTATE */ #endif /* SAVESTATE */
void check_prefs_changed_custom (void) void check_prefs_changed_custom (void)
......
...@@ -1774,7 +1774,7 @@ STATIC_INLINE void do_flush_screen (int start, int stop) ...@@ -1774,7 +1774,7 @@ STATIC_INLINE void do_flush_screen (int start, int stop)
unlockscr (); unlockscr ();
if (start <= stop) if (start <= stop)
flush_screen (start, stop); flush_screen (start, stop);
else if (currprefs.gfx_afullscreen && currprefs.gfx_avsync) else if (currprefs.gfx_afullscreen == 1 && currprefs.gfx_avsync)
flush_screen (0, 0); /* vsync mode */ flush_screen (0, 0); /* vsync mode */
} }
...@@ -2868,6 +2868,12 @@ void vsync_handle_redraw (int long_frame, int lof_changed) ...@@ -2868,6 +2868,12 @@ void vsync_handle_redraw (int long_frame, int lof_changed)
#endif #endif
if (quit_program < 0) { if (quit_program < 0) {
if (!savestate_state) {
if (currprefs.quitstatefile[0]) {
savestate_initsave (currprefs.quitstatefile, 1, 1);
save_state (currprefs.quitstatefile, "");
}
}
quit_program = -quit_program; quit_program = -quit_program;
set_inhibit_frame (IHF_QUIT_PROGRAM); set_inhibit_frame (IHF_QUIT_PROGRAM);
set_special (SPCFLAG_BRK); set_special (SPCFLAG_BRK);
...@@ -2904,7 +2910,7 @@ void vsync_handle_redraw (int long_frame, int lof_changed) ...@@ -2904,7 +2910,7 @@ void vsync_handle_redraw (int long_frame, int lof_changed)
else if (currprefs.cpu_cycle_exact) else if (currprefs.cpu_cycle_exact)
init_hardware_for_drawing_frame (); init_hardware_for_drawing_frame ();
} else { } else {
if (currprefs.gfx_afullscreen && currprefs.gfx_avsync) if (currprefs.gfx_afullscreen == GFX_FULLSCREEN && currprefs.gfx_avsync)
flush_screen (0, 0); /* vsync mode */ flush_screen (0, 0); /* vsync mode */
} }
gui_flicker_led (-1, 0, 0); gui_flicker_led (-1, 0, 0);
......
...@@ -133,7 +133,8 @@ static void ersatz_init (void) ...@@ -133,7 +133,8 @@ static void ersatz_init (void)
if (disk_empty (0)) { if (disk_empty (0)) {
already_failed = 1; already_failed = 1;
gui_message ("You need to have a diskfile in DF0 to use the Kickstart replacement!\n"); gui_message ("You need to have a diskfile in DF0 to use the Kickstart replacement!\n");
uae_restart (-1, NULL); //uae_restart (-1, NULL);
uae_quit ();
return; return;
} }
......
...@@ -308,14 +308,14 @@ int get_filesys_unitconfig (struct uae_prefs *p, int index, struct mountedinfo * ...@@ -308,14 +308,14 @@ int get_filesys_unitconfig (struct uae_prefs *p, int index, struct mountedinfo *
return FILESYS_HARDFILE; return FILESYS_HARDFILE;
} }
static void stripsemicolon (char *s) static void stripsemicolon (TCHAR *s)
{ {
if (!s) if (!s)
return; return;
while (_tcslen(s) > 0 && s[_tcslen(s) - 1] == ':') while (_tcslen(s) > 0 && s[_tcslen(s) - 1] == ':')
s[_tcslen(s) - 1] = 0; s[_tcslen(s) - 1] = 0;
} }
static void stripspace (char *s) static void stripspace (TCHAR *s)
{ {
int i; int i;
if (!s) if (!s)
...@@ -325,7 +325,7 @@ static void stripspace (char *s) ...@@ -325,7 +325,7 @@ static void stripspace (char *s)
s[i] = '_'; s[i] = '_';
} }
} }
static void striplength (char *s, int len) static void striplength (TCHAR *s, int len)
{ {
if (!s) if (!s)
return; return;
...@@ -333,7 +333,7 @@ static void striplength (char *s, int len) ...@@ -333,7 +333,7 @@ static void striplength (char *s, int len)
return; return;
s[len] = 0; s[len] = 0;
} }
static void fixcharset (char *s) static void fixcharset (TCHAR *s)
{ {
char tmp[MAX_DPATH]; char tmp[MAX_DPATH];
if (!s) if (!s)
...@@ -343,7 +343,7 @@ static void fixcharset (char *s) ...@@ -343,7 +343,7 @@ static void fixcharset (char *s)
au_fs_copy (s, strlen (tmp) + 1, tmp); au_fs_copy (s, strlen (tmp) + 1, tmp);
} }
char *validatevolumename (char *s) TCHAR *validatevolumename (TCHAR *s)
{ {
stripsemicolon (s); stripsemicolon (s);
stripspace (s); stripspace (s);
...@@ -351,7 +351,7 @@ char *validatevolumename (char *s) ...@@ -351,7 +351,7 @@ char *validatevolumename (char *s)
striplength (s, 30); striplength (s, 30);
return s; return s;
} }
char *validatedevicename (char *s) TCHAR *validatedevicename (TCHAR *s)
{ {
stripsemicolon (s); stripsemicolon (s);
stripspace (s); stripspace (s);
...@@ -360,7 +360,7 @@ char *validatedevicename (char *s) ...@@ -360,7 +360,7 @@ char *validatedevicename (char *s)
return s; return s;
} }
char *filesys_createvolname (const char *volname, const char *rootdir, const char *def) TCHAR *filesys_createvolname (const TCHAR *volname, const TCHAR *rootdir, const TCHAR *def)
{ {
TCHAR *nvol = NULL; TCHAR *nvol = NULL;
int i, archivehd; int i, archivehd;
...@@ -412,7 +412,7 @@ char *filesys_createvolname (const char *volname, const char *rootdir, const cha ...@@ -412,7 +412,7 @@ char *filesys_createvolname (const char *volname, const char *rootdir, const cha
return nvol; return nvol;
} }
static int set_filesys_volume (const char *rootdir, int *flags, int *readonly, int *emptydrive, struct zvolume **zvp) static int set_filesys_volume (const TCHAR *rootdir, int *flags, bool *readonly, bool *emptydrive, struct zvolume **zvp)
{ {
*emptydrive = 0; *emptydrive = 0;
//FIXME: we dont support.. yet.. -mustafa //FIXME: we dont support.. yet.. -mustafa
...@@ -564,7 +564,7 @@ int set_filesys_unit (int nr, ...@@ -564,7 +564,7 @@ int set_filesys_unit (int nr,
return ret; return ret;
} }
int add_filesys_unit (char *devname, char *volname, const char *rootdir, bool readonly, int add_filesys_unit (TCHAR *devname, TCHAR *volname, const TCHAR *rootdir, bool readonly,
int secspertrack, int surfaces, int reserved, int secspertrack, int surfaces, int reserved,
int blocksize, int bootpri, bool donotmount, bool autoboot, int blocksize, int bootpri, bool donotmount, bool autoboot,
TCHAR *filesysdir, int hdc, int flags) TCHAR *filesysdir, int hdc, int flags)
...@@ -670,7 +670,7 @@ static void initialize_mountinfo (void) ...@@ -670,7 +670,7 @@ static void initialize_mountinfo (void)
//filesys_addexternals (); //filesys_addexternals ();
} }
int sprintf_filesys_unit (char *buffer, int num) int sprintf_filesys_unit (TCHAR *buffer, int num)
{ {
UnitInfo *uip = mountinfo.ui; UnitInfo *uip = mountinfo.ui;
...@@ -923,7 +923,7 @@ typedef uaecptr dpacket; ...@@ -923,7 +923,7 @@ typedef uaecptr dpacket;
static int flush_cache (Unit *unit, int num); static int flush_cache (Unit *unit, int num);
static char *char1 (uaecptr addr) static TCHAR *char1 (uaecptr addr)
{ {
static uae_char buf[1024]; static uae_char buf[1024];
static TCHAR bufx[1024]; static TCHAR bufx[1024];
...@@ -949,7 +949,7 @@ static TCHAR *bstr1 (uaecptr addr) ...@@ -949,7 +949,7 @@ static TCHAR *bstr1 (uaecptr addr)
return au_fs_copy (bufx, sizeof (bufx) / sizeof (TCHAR), buf); return au_fs_copy (bufx, sizeof (bufx) / sizeof (TCHAR), buf);
} }
static char *bstr (Unit *unit, uaecptr addr) static TCHAR *bstr (Unit *unit, uaecptr addr)
{ {
int i; int i;
int n = get_byte (addr); int n = get_byte (addr);
...@@ -963,7 +963,7 @@ static char *bstr (Unit *unit, uaecptr addr) ...@@ -963,7 +963,7 @@ static char *bstr (Unit *unit, uaecptr addr)
return unit->tmpbuf3; return unit->tmpbuf3;
} }
static char *bstr_cut (Unit *unit, uaecptr addr) static TCHAR *bstr_cut (Unit *unit, uaecptr addr)
{ {
TCHAR *p = unit->tmpbuf3; TCHAR *p = unit->tmpbuf3;
int i, colon_seen = 0, off; int i, colon_seen = 0, off;
...@@ -1158,7 +1158,7 @@ void filesys_vsync (void) ...@@ -1158,7 +1158,7 @@ void filesys_vsync (void)
} }
} }
} }
static void filesys_delayed_change (Unit *u, int frames, const TCHAR *rootdir, const TCHAR *volume, int readonly, int flags) static void filesys_delayed_change (Unit *u, int frames, const TCHAR *rootdir, const TCHAR *volume, bool readonly, int flags)
{ {
u->reinsertdelay = 50; u->reinsertdelay = 50;
u->newflags = flags; u->newflags = flags;
...@@ -1665,7 +1665,10 @@ static TCHAR *get_nname (Unit *unit, a_inode *base, TCHAR *rel, ...@@ -1665,7 +1665,10 @@ static TCHAR *get_nname (Unit *unit, a_inode *base, TCHAR *rel,
TCHAR *p = 0; TCHAR *p = 0;
*modified_rel = 0; *modified_rel = 0;
if (unit->volflags & MYVOLUMEINFO_ARCHIVE) { if (unit->volflags & MYVOLUMEINFO_ARCHIVE) {
//if (zfile_exists_archive(base->nname, rel))
// return build_nname(base->nname, rel);
return 0; return 0;
} }
...@@ -1732,7 +1735,7 @@ oh_dear: ...@@ -1732,7 +1735,7 @@ oh_dear:
static int fill_file_attrs (Unit *u, a_inode *base, a_inode *c) static int fill_file_attrs (Unit *u, a_inode *base, a_inode *c)
{ {
if (0 /*u->volflags & MYVOLUMEINFO_ARCHIVE*/) { /* if (u->volflags & MYVOLUMEINFO_ARCHIVE) {
int isdir, flags; int isdir, flags;
TCHAR *comment; TCHAR *comment;
zfile_fill_file_attrs_archive (c->nname, &isdir, &flags, &comment); zfile_fill_file_attrs_archive (c->nname, &isdir, &flags, &comment);
...@@ -1742,9 +1745,9 @@ static int fill_file_attrs (Unit *u, a_inode *base, a_inode *c) ...@@ -1742,9 +1745,9 @@ static int fill_file_attrs (Unit *u, a_inode *base, a_inode *c)
c->amigaos_mode = flags; c->amigaos_mode = flags;
c->comment = comment; c->comment = comment;
return 1; return 1;
} else { } else {*/
return fsdb_fill_file_attrs (base, c); return fsdb_fill_file_attrs (base, c);
} //}
return 0; return 0;
} }
...@@ -2483,12 +2486,12 @@ static void ...@@ -2483,12 +2486,12 @@ static void
write_log ("Notify:\n"); write_log ("Notify:\n");
write_log ("nr_Name '%s'\n", char1 (get_long (nr + 0))); write_log ("nr_Name '%s'\n", char1 (get_long (nr + 0)));
write_log ("nr_FullName '%s'\n", name); write_log ("nr_FullName '%s'\n", name);
write_log ("nr_UserData %08.8X\n", get_long (nr + 8)); write_log ("nr_UserData %08X\n", get_long (nr + 8));
write_log ("nr_Flags %08.8X\n", flags); write_log ("nr_Flags %08X\n", flags);
if (flags & NRF_SEND_MESSAGE) { if (flags & NRF_SEND_MESSAGE) {
write_log ("Message NotifyRequest, port = %08.8X\n", get_long (nr + 16)); write_log ("Message NotifyRequest, port = %08X\n", get_long (nr + 16));
} else if (flags & NRF_SEND_SIGNAL) { } else if (flags & NRF_SEND_SIGNAL) {
write_log ("Signal NotifyRequest, Task = %08.8X signal = %d\n", get_long (nr + 16), get_long (nr + 20)); write_log ("Signal NotifyRequest, Task = %08X signal = %d\n", get_long (nr + 16), get_long (nr + 20));
} else { } else {
write_log ("corrupt NotifyRequest\n"); write_log ("corrupt NotifyRequest\n");
} }
...@@ -3320,7 +3323,7 @@ static uae_u32 REGPARAM2 exall_helper (TrapContext *context) ...@@ -3320,7 +3323,7 @@ static uae_u32 REGPARAM2 exall_helper (TrapContext *context)
for (u = units; u; u = u->next) { for (u = units; u; u = u->next) {
for (i = 0; i < EXALLKEYS; i++) { for (i = 0; i < EXALLKEYS; i++) {
if (u->exalls[i].id == id && u->exalls[i].control == control) { if (u->exalls[i].id == id && u->exalls[i].control == control) {
action_examine_all (u, get_real_address (packet)); action_examine_all (u, packet);
} }
} }
} }
...@@ -3745,9 +3748,8 @@ static void ...@@ -3745,9 +3748,8 @@ static void
/* HACK HACK HACK HACK /* HACK HACK HACK HACK
* Try to detect a LoadSeg() */ * Try to detect a LoadSeg() */
if (k->file_pos == 0 && size >= 4) { if (k->file_pos == 0 && size >= 4) {
unsigned char buf[4]; unsigned TCHAR buf[4];
off_t currpos = fs_lseek (unit, k->fd, 0, SEEK_CUR); off_t currpos = fs_lseek (unit, k->fd, 0, SEEK_CUR);
//my_read (k->fd, buf, 4);
fread (buf, 1, 4, k->fd); fread (buf, 1, 4, k->fd);
fs_lseek (unit, k->fd, currpos, SEEK_SET); fs_lseek (unit, k->fd, currpos, SEEK_SET);
if (buf[0] == 0 && buf[1] == 0 && buf[2] == 3 && buf[3] == 0xF3) if (buf[0] == 0 && buf[1] == 0 && buf[2] == 3 && buf[3] == 0xF3)
...@@ -5330,10 +5332,10 @@ static uae_u32 REGPARAM2 filesys_init_storeinfo (TrapContext *context) ...@@ -5330,10 +5332,10 @@ static uae_u32 REGPARAM2 filesys_init_storeinfo (TrapContext *context)
int ret = -1; int ret = -1;
switch (m68k_dreg (regs, 1)) switch (m68k_dreg (regs, 1))
{ {
/* case 1: case 1:
mountertask = m68k_areg (regs, 1); mountertask = m68k_areg (regs, 1);
picasso96_alloc (context); //picasso96_alloc (context);
break;*/ break;
case 2: case 2:
ret = automountunit; ret = automountunit;
automountunit = -1; automountunit = -1;
...@@ -5507,7 +5509,7 @@ static int rdb_mount (UnitInfo *uip, int unit_no, unsigned int partnum, uaecptr ...@@ -5507,7 +5509,7 @@ static int rdb_mount (UnitInfo *uip, int unit_no, unsigned int partnum, uaecptr
bufrdb[0xde] = 0; bufrdb[0xde] = 0;
bufrdb[0xdf] = 0; bufrdb[0xdf] = 0;
if (rdb_checksum ("RDSK", bufrdb, rdblock)) { if (rdb_checksum ("RDSK", bufrdb, rdblock)) {
write_log ("Windows trashed RDB detected, fixing..\n"); write_log ("Windows 95/98/ME trashed RDB detected, fixing..\n");
hdf_write (hfd, bufrdb, rdblock * hfd->blocksize, hfd->blocksize); hdf_write (hfd, bufrdb, rdblock * hfd->blocksize, hfd->blocksize);
break; break;
} }
......
...@@ -1921,7 +1921,7 @@ static void initide (void) ...@@ -1921,7 +1921,7 @@ static void initide (void)
void gayle_reset (int hardreset) void gayle_reset (int hardreset)
{ {
static char bankname[100]; static TCHAR bankname[100];
initide (); initide ();
if (hardreset) { if (hardreset) {
...@@ -2018,7 +2018,7 @@ uae_u8 *restore_ide (uae_u8 *src) ...@@ -2018,7 +2018,7 @@ uae_u8 *restore_ide (uae_u8 *src)
{ {
int num, readonly, blocksize; int num, readonly, blocksize;
uae_u64 size; uae_u64 size;
char *path; TCHAR *path;
struct ide_hdf *ide; struct ide_hdf *ide;
alloc_ide_mem (idedrive, 4); alloc_ide_mem (idedrive, 4);
......
...@@ -941,13 +941,13 @@ static void genastore_2 (char *from, amodes mode, char *reg, wordsizes size, cha ...@@ -941,13 +941,13 @@ static void genastore_2 (char *from, amodes mode, char *reg, wordsizes size, cha
} else if (using_ce) { } else if (using_ce) {
switch (size) { switch (size) {
case sz_byte: case sz_byte:
printf ("\tput_byte_ce (%sa,%s);\n", to, from); printf ("\tput_byte_ce (%sa, %s);\n", to, from);
count_write++; count_write++;
break; break;
case sz_word: case sz_word:
if (cpu_level < 2 && (mode == PC16 || mode == PC8r)) if (cpu_level < 2 && (mode == PC16 || mode == PC8r))
abort (); abort ();
printf ("\tput_word_ce (%sa,%s);\n", to, from); printf ("\tput_word_ce (%sa, %s);\n", to, from);
count_write++; count_write++;
break; break;
case sz_long: case sz_long:
...@@ -967,27 +967,27 @@ static void genastore_2 (char *from, amodes mode, char *reg, wordsizes size, cha ...@@ -967,27 +967,27 @@ static void genastore_2 (char *from, amodes mode, char *reg, wordsizes size, cha
case sz_byte: case sz_byte:
insn_n_cycles += 4; insn_n_cycles += 4;
if (flags & GF_FC) if (flags & GF_FC)
printf ("\tdfc_put_byte (%sa,%s);\n", to, from); printf ("\tdfc_put_byte (%sa, %s);\n", to, from);
else else
printf ("\tput_byte_mmu (%sa,%s);\n", to, from); printf ("\tput_byte_mmu (%sa, %s);\n", to, from);
break; break;
case sz_word: case sz_word:
insn_n_cycles += 4; insn_n_cycles += 4;
if (cpu_level < 2 && (mode == PC16 || mode == PC8r)) if (cpu_level < 2 && (mode == PC16 || mode == PC8r))
abort (); abort ();
if (flags & GF_FC) if (flags & GF_FC)
printf ("\tdfc_put_word (%sa,%s);\n", to, from); printf ("\tdfc_put_word (%sa, %s);\n", to, from);
else else
printf ("\tput_word_mmu (%sa,%s);\n", to, from); printf ("\tput_word_mmu (%sa, %s);\n", to, from);
break; break;
case sz_long: case sz_long:
insn_n_cycles += 8; insn_n_cycles += 8;
if (cpu_level < 2 && (mode == PC16 || mode == PC8r)) if (cpu_level < 2 && (mode == PC16 || mode == PC8r))
abort (); abort ();
if (flags & GF_FC) if (flags & GF_FC)
printf ("\tdfc_put_long (%sa,%s);\n", to, from); printf ("\tdfc_put_long (%sa, %s);\n", to, from);
else else
printf ("\tput_long_mmu (%sa,%s);\n", to, from); printf ("\tput_long_mmu (%sa, %s);\n", to, from);
break; break;
default: default:
abort (); abort ();
...@@ -996,21 +996,21 @@ static void genastore_2 (char *from, amodes mode, char *reg, wordsizes size, cha ...@@ -996,21 +996,21 @@ static void genastore_2 (char *from, amodes mode, char *reg, wordsizes size, cha
switch (size) { switch (size) {
case sz_byte: case sz_byte:
insn_n_cycles += 4; insn_n_cycles += 4;
printf ("\tput_byte (%sa,%s);\n", to, from); printf ("\tput_byte (%sa, %s);\n", to, from);
count_write++; count_write++;
break; break;
case sz_word: case sz_word:
insn_n_cycles += 4; insn_n_cycles += 4;
if (cpu_level < 2 && (mode == PC16 || mode == PC8r)) if (cpu_level < 2 && (mode == PC16 || mode == PC8r))
abort (); abort ();
printf ("\tput_word (%sa,%s);\n", to, from); printf ("\tput_word (%sa, %s);\n", to, from);
count_write++; count_write++;
break; break;
case sz_long: case sz_long:
insn_n_cycles += 8; insn_n_cycles += 8;
if (cpu_level < 2 && (mode == PC16 || mode == PC8r)) if (cpu_level < 2 && (mode == PC16 || mode == PC8r))
abort (); abort ();
printf ("\tput_long (%sa,%s);\n", to, from); printf ("\tput_long (%sa, %s);\n", to, from);
count_write += 2; count_write += 2;
break; break;
default: default:
...@@ -2071,7 +2071,7 @@ static void gen_opcode (unsigned long int opcode) ...@@ -2071,7 +2071,7 @@ static void gen_opcode (unsigned long int opcode)
break; break;
case i_RESET: case i_RESET:
fill_prefetch_next (); fill_prefetch_next ();
printf ("\tcpureset();\n"); printf ("\tcpureset ();\n");
addcycles000 (128); addcycles000 (128);
if (using_prefetch) if (using_prefetch)
printf ("\tregs.irc = get_iword (4);\n"); printf ("\tregs.irc = get_iword (4);\n");
...@@ -2274,10 +2274,10 @@ static void gen_opcode (unsigned long int opcode) ...@@ -2274,10 +2274,10 @@ static void gen_opcode (unsigned long int opcode)
fill_prefetch_1 (0); fill_prefetch_1 (0);
if (curi->smode == Ad8r || curi->smode == PC8r) if (curi->smode == Ad8r || curi->smode == PC8r)
addcycles000 (6); addcycles000 (6);
printf("\tm68k_areg (regs, 7) -= 4;\n"); printf ("\tm68k_areg (regs, 7) -= 4;\n");
if (using_ce) { if (using_ce) {
printf("\tput_word_ce (m68k_areg (regs, 7), oldpc >> 16);\n"); printf ("\tput_word_ce (m68k_areg (regs, 7), oldpc >> 16);\n");
printf("\tput_word_ce (m68k_areg (regs, 7) + 2, oldpc);\n"); printf ("\tput_word_ce (m68k_areg (regs, 7) + 2, oldpc);\n");
} else { } else {
printf ("\t%s (m68k_areg (regs, 7), oldpc);\n", dstl); printf ("\t%s (m68k_areg (regs, 7), oldpc);\n", dstl);
} }
...@@ -2416,7 +2416,7 @@ static void gen_opcode (unsigned long int opcode) ...@@ -2416,7 +2416,7 @@ static void gen_opcode (unsigned long int opcode)
printf ("\tif (!cctrue (%d)) {\n", curi->cc); printf ("\tif (!cctrue (%d)) {\n", curi->cc);
incpc ("(uae_s32)offs + 2"); incpc ("(uae_s32)offs + 2");
printf ("\t"); fill_prefetch_1 (0); printf ("\t"); fill_prefetch_1 (0);
printf ("\t"); genastore ("(src-1)", curi->smode, "srcreg", curi->size, "src"); printf ("\t"); genastore ("(src - 1)", curi->smode, "srcreg", curi->size, "src");
printf ("\t\tif (src) {\n"); printf ("\t\tif (src) {\n");
addcycles_ce020 (4); addcycles_ce020 (4);
...@@ -2491,7 +2491,7 @@ static void gen_opcode (unsigned long int opcode) ...@@ -2491,7 +2491,7 @@ static void gen_opcode (unsigned long int opcode)
printf ("\t\tif (newv > 0xffff) {\n"); printf ("\t\tif (newv > 0xffff) {\n");
printf ("\t\t\tSET_VFLG (1);\n"); printf ("\t\t\tSET_VFLG (1);\n");
#ifdef UNDEF68020 #ifdef UNDEF68020
if (currprefs.cpu_model >= 68020) if (cpu_level >= 2)
printf ("\t\t\tif (currprefs.cpu_model == 68000 || dst < 0) SET_NFLG (&regs, 1);\n"); printf ("\t\t\tif (currprefs.cpu_model == 68000 || dst < 0) SET_NFLG (&regs, 1);\n");
else /* ??? some 68000 revisions may not set NFLG when overflow happens.. */ else /* ??? some 68000 revisions may not set NFLG when overflow happens.. */
#endif #endif
...@@ -2789,7 +2789,7 @@ static void gen_opcode (unsigned long int opcode) ...@@ -2789,7 +2789,7 @@ static void gen_opcode (unsigned long int opcode)
case i_ROL: case i_ROL:
genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0, 0); genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0, 0);
genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0, 0);
fill_prefetch_next(); fill_prefetch_next ();
start_brace (); start_brace ();
switch (curi->size) { switch (curi->size) {
case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break; case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break;
...@@ -2819,7 +2819,7 @@ static void gen_opcode (unsigned long int opcode) ...@@ -2819,7 +2819,7 @@ static void gen_opcode (unsigned long int opcode)
case i_ROR: case i_ROR:
genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0, 0); genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0, 0);
genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0, 0);
fill_prefetch_next(); fill_prefetch_next ();
start_brace (); start_brace ();
switch (curi->size) { switch (curi->size) {
case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break; case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break;
...@@ -2849,7 +2849,7 @@ static void gen_opcode (unsigned long int opcode) ...@@ -2849,7 +2849,7 @@ static void gen_opcode (unsigned long int opcode)
case i_ROXL: case i_ROXL:
genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0, 0); genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0, 0);
genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0, 0);
fill_prefetch_next(); fill_prefetch_next ();
start_brace (); start_brace ();
switch (curi->size) { switch (curi->size) {
case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break; case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break;
...@@ -2882,7 +2882,7 @@ static void gen_opcode (unsigned long int opcode) ...@@ -2882,7 +2882,7 @@ static void gen_opcode (unsigned long int opcode)
case i_ROXR: case i_ROXR:
genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0, 0); genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0, 0);
genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0, 0);
fill_prefetch_next(); fill_prefetch_next ();
start_brace (); start_brace ();
switch (curi->size) { switch (curi->size) {
case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break; case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break;
...@@ -3258,7 +3258,7 @@ static void gen_opcode (unsigned long int opcode) ...@@ -3258,7 +3258,7 @@ static void gen_opcode (unsigned long int opcode)
printf ("\ttmp = 0;\n"); printf ("\ttmp = 0;\n");
break; break;
case i_BFFFO: case i_BFFFO:
printf ("\t{ uae_u32 mask = 1 << (width-1);\n"); printf ("\t{ uae_u32 mask = 1 << (width - 1);\n");
printf ("\twhile (mask) { if (tmp & mask) break; mask >>= 1; offset++; }}\n"); printf ("\twhile (mask) { if (tmp & mask) break; mask >>= 1; offset++; }}\n");
printf ("\tm68k_dreg (regs, (extra >> 12) & 7) = offset;\n"); printf ("\tm68k_dreg (regs, (extra >> 12) & 7) = offset;\n");
break; break;
...@@ -3411,7 +3411,7 @@ static void gen_opcode (unsigned long int opcode) ...@@ -3411,7 +3411,7 @@ static void gen_opcode (unsigned long int opcode)
/* MOVE16 (Ax)+,(Ay)+ */ /* MOVE16 (Ax)+,(Ay)+ */
printf ("\tuae_u32 v1, v2, v3, v4;\n"); printf ("\tuae_u32 v1, v2, v3, v4;\n");
printf ("\tuaecptr mems = m68k_areg (regs, srcreg) & ~15, memd;\n"); printf ("\tuaecptr mems = m68k_areg (regs, srcreg) & ~15, memd;\n");
printf ("\tdstreg = (%s >> 12) & 7;\n", gen_nextiword(0)); printf ("\tdstreg = (%s >> 12) & 7;\n", gen_nextiword (0));
printf ("\tmemd = m68k_areg (regs, dstreg) & ~15;\n"); printf ("\tmemd = m68k_areg (regs, dstreg) & ~15;\n");
printf ("\tv1 = %s (mems);\n", srcl); printf ("\tv1 = %s (mems);\n", srcl);
printf ("\tv2 = %s (mems + 4);\n", srcl); printf ("\tv2 = %s (mems + 4);\n", srcl);
...@@ -3809,6 +3809,7 @@ int main (int argc, char **argv) ...@@ -3809,6 +3809,7 @@ int main (int argc, char **argv)
* I don't dare to touch the 68k version. */ * I don't dare to touch the 68k version. */
headerfile = fopen ("cputbl.h", "wb"); headerfile = fopen ("cputbl.h", "wb");
stblfile = fopen ("cpustbl.c", "wb"); stblfile = fopen ("cpustbl.c", "wb");
generate_includes (stblfile); generate_includes (stblfile);
......
...@@ -100,6 +100,10 @@ enum { CP_GENERIC = 1, CP_CDTV, CP_CD32, CP_A500, CP_A500P, CP_A600, CP_A1000, ...@@ -100,6 +100,10 @@ enum { CP_GENERIC = 1, CP_CDTV, CP_CD32, CP_A500, CP_A500P, CP_A600, CP_A1000,
#define IDE_A600A1200 1 #define IDE_A600A1200 1
#define IDE_A4000 2 #define IDE_A4000 2
#define GFX_WINDOW 0
#define GFX_FULLSCREEN 1
#define GFX_FULLWINDOW 2
struct uae_prefs { struct uae_prefs {
struct strlist *all_lines; struct strlist *all_lines;
...@@ -291,6 +295,7 @@ struct uae_prefs { ...@@ -291,6 +295,7 @@ struct uae_prefs {
TCHAR amaxromfile[MAX_DPATH]; TCHAR amaxromfile[MAX_DPATH];
TCHAR a2065name[MAX_DPATH]; TCHAR a2065name[MAX_DPATH];
TCHAR cdimagefile[MAX_DPATH]; TCHAR cdimagefile[MAX_DPATH];
TCHAR quitstatefile[MAX_DPATH];
#ifndef WIN32 #ifndef WIN32
char scsi_device[256]; char scsi_device[256];
#endif #endif
...@@ -422,7 +427,6 @@ struct uae_prefs { ...@@ -422,7 +427,6 @@ struct uae_prefs {
/* input */ /* input */
TCHAR inputname[256];
struct jport jports[MAX_JPORTS]; struct jport jports[MAX_JPORTS];
int input_selected_setting; int input_selected_setting;
int input_joymouse_multiplier; int input_joymouse_multiplier;
......
...@@ -4,7 +4,7 @@ running configure, to aid debugging if configure makes a mistake. ...@@ -4,7 +4,7 @@ running configure, to aid debugging if configure makes a mistake.
It was created by configure, which was It was created by configure, which was
generated by GNU Autoconf 2.65. Invocation command line was generated by GNU Autoconf 2.65. Invocation command line was
$ ./configure --disable-option-checking --prefix=/usr/local --with-sdl --with-sdl-gl --with-sdl-gfx --with-sdl-sound --with-caps --with-gayle --enable-drvsnd --enable-amax --enable-cd32 --enable-scsi-device --cache-file=/dev/null --srcdir=. $ ./configure --disable-option-checking --prefix=/usr/local --with-sdl --with-sdl-gl --with-sdl-gfx --with-sdl-sound --with-caps --with-gayle --enable-drvsnd --enable-amax --enable-cd32 --enable-scsi-device --disable-jit --cache-file=/dev/null --srcdir=.
## --------- ## ## --------- ##
## Platform. ## ## Platform. ##
...@@ -445,7 +445,7 @@ configure:4344: $? = 0 ...@@ -445,7 +445,7 @@ configure:4344: $? = 0
configure:4344: result: yes configure:4344: result: yes
configure:4350: checking for _doprnt configure:4350: checking for _doprnt
configure:4350: gcc -o conftest -g -O2 -Wall -W -Wno-unused conftest.c >&5 configure:4350: gcc -o conftest -g -O2 -Wall -W -Wno-unused conftest.c >&5
/tmp/ccBiDfLi.o: In function `main': /tmp/cc4EAiYz.o: In function `main':
/home/gnostic/puaex/src/tools/conftest.c:67: undefined reference to `_doprnt' /home/gnostic/puaex/src/tools/conftest.c:67: undefined reference to `_doprnt'
collect2: ld returned 1 exit status collect2: ld returned 1 exit status
configure:4350: $? = 1 configure:4350: $? = 1
...@@ -533,7 +533,7 @@ configure:4364: $? = 0 ...@@ -533,7 +533,7 @@ configure:4364: $? = 0
configure:4364: result: yes configure:4364: result: yes
configure:4364: checking for strcmpi configure:4364: checking for strcmpi
configure:4364: gcc -o conftest -g -O2 -Wall -W -Wno-unused conftest.c >&5 configure:4364: gcc -o conftest -g -O2 -Wall -W -Wno-unused conftest.c >&5
/tmp/ccpI9QLu.o: In function `main': /tmp/ccFh4SgP.o: In function `main':
/home/gnostic/puaex/src/tools/conftest.c:69: undefined reference to `strcmpi' /home/gnostic/puaex/src/tools/conftest.c:69: undefined reference to `strcmpi'
collect2: ld returned 1 exit status collect2: ld returned 1 exit status
configure:4364: $? = 1 configure:4364: $? = 1
...@@ -613,7 +613,7 @@ configure: failed program was: ...@@ -613,7 +613,7 @@ configure: failed program was:
configure:4364: result: no configure:4364: result: no
configure:4364: checking for stricmp configure:4364: checking for stricmp
configure:4364: gcc -o conftest -g -O2 -Wall -W -Wno-unused conftest.c >&5 configure:4364: gcc -o conftest -g -O2 -Wall -W -Wno-unused conftest.c >&5
/tmp/cc94CjOB.o: In function `main': /tmp/ccn7jZ5T.o: In function `main':
/home/gnostic/puaex/src/tools/conftest.c:69: undefined reference to `stricmp' /home/gnostic/puaex/src/tools/conftest.c:69: undefined reference to `stricmp'
collect2: ld returned 1 exit status collect2: ld returned 1 exit status
configure:4364: $? = 1 configure:4364: $? = 1
......
...@@ -438,7 +438,7 @@ $config_links ...@@ -438,7 +438,7 @@ $config_links
Report bugs to the package provider." Report bugs to the package provider."
ac_cs_config="'--disable-option-checking' '--prefix=/usr/local' '--with-sdl' '--with-sdl-gl' '--with-sdl-gfx' '--with-sdl-sound' '--with-caps' '--with-gayle' '--enable-drvsnd' '--enable-amax' '--enable-cd32' '--enable-scsi-device' '--cache-file=/dev/null' '--srcdir=.'" ac_cs_config="'--disable-option-checking' '--prefix=/usr/local' '--with-sdl' '--with-sdl-gl' '--with-sdl-gfx' '--with-sdl-sound' '--with-caps' '--with-gayle' '--enable-drvsnd' '--enable-amax' '--enable-cd32' '--enable-scsi-device' '--disable-jit' '--cache-file=/dev/null' '--srcdir=.'"
ac_cs_version="\ ac_cs_version="\
config.status config.status
configured by ./configure, generated by GNU Autoconf 2.65, configured by ./configure, generated by GNU Autoconf 2.65,
...@@ -522,7 +522,7 @@ if $ac_cs_silent; then ...@@ -522,7 +522,7 @@ if $ac_cs_silent; then
fi fi
if $ac_cs_recheck; then if $ac_cs_recheck; then
set X '/bin/bash' './configure' '--disable-option-checking' '--prefix=/usr/local' '--with-sdl' '--with-sdl-gl' '--with-sdl-gfx' '--with-sdl-sound' '--with-caps' '--with-gayle' '--enable-drvsnd' '--enable-amax' '--enable-cd32' '--enable-scsi-device' '--cache-file=/dev/null' '--srcdir=.' $ac_configure_extra_args --no-create --no-recursion set X '/bin/bash' './configure' '--disable-option-checking' '--prefix=/usr/local' '--with-sdl' '--with-sdl-gl' '--with-sdl-gfx' '--with-sdl-sound' '--with-caps' '--with-gayle' '--enable-drvsnd' '--enable-amax' '--enable-cd32' '--enable-scsi-device' '--disable-jit' '--cache-file=/dev/null' '--srcdir=.' $ac_configure_extra_args --no-create --no-recursion
shift shift
$as_echo "running CONFIG_SHELL=/bin/bash $*" >&6 $as_echo "running CONFIG_SHELL=/bin/bash $*" >&6
CONFIG_SHELL='/bin/bash' CONFIG_SHELL='/bin/bash'
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment