This commit is contained in:
Toni Wilen 2013-10-26 16:06:20 +03:00
parent be4bcd6985
commit f09b1efb56
25 changed files with 635 additions and 276 deletions

View File

@ -69,7 +69,7 @@ static int blit_cyclecounter, blit_waitcyclecounter;
static int blit_maxcyclecounter, blit_slowdown, blit_totalcyclecounter;
static int blit_startcycles, blit_misscyclecounter;
#ifdef CPUEMU_12
#ifdef CPUEMU_13
extern uae_u8 cycle_line[256];
#endif
@ -683,7 +683,7 @@ STATIC_INLINE void blitter_nxline (void)
bltstate = BLT_read;
}
#ifdef CPUEMU_12
#ifdef CPUEMU_13
static int blitter_cyclecounter;
static int blitter_hcounter1, blitter_hcounter2;
@ -831,7 +831,7 @@ void blitter_handler (uae_u32 data)
blitter_doit ();
}
#ifdef CPUEMU_12
#ifdef CPUEMU_13
static uae_u32 preva, prevb;
STATIC_INLINE uae_u16 blitter_doblit (void)

View File

@ -3832,6 +3832,7 @@ static int cfgfile_load_2 (struct uae_prefs *p, const TCHAR *filename, bool real
if (real) {
p->config_version = 0;
config_newfilesystem = 0;
store_inputdevice_config (p);
//reset_inputdevice_config (p);
}

View File

@ -253,7 +253,7 @@ static int last_sprite_point, nr_armed;
static int sprite_width, sprres;
int sprite_buffer_res;
#ifdef CPUEMU_12
#ifdef CPUEMU_13
uae_u8 cycle_line[256];
#endif
@ -264,6 +264,8 @@ static uae_s16 bpl1mod, bpl2mod, dbpl1mod, dbpl2mod;
static int dbpl1mod_on, dbpl2mod_on;
static uaecptr prevbpl[2][MAXVPOS][8];
static uaecptr bplpt[8], bplptx[8];
static uaecptr dbplpt[8];
static int dbplpt_on[8], dbplpt_on2;
/*static int blitcount[256]; blitter debug */
@ -458,7 +460,7 @@ STATIC_INLINE void setclr (uae_u16 *p, uae_u16 val)
STATIC_INLINE void alloc_cycle (int hpos, int type)
{
#ifdef CPUEMU_12
#ifdef CPUEMU_13
#if 0
if (cycle_line[hpos])
write_log (_T("hpos=%d, old=%d, new=%d\n"), hpos, cycle_line[hpos], type);
@ -659,7 +661,7 @@ STATIC_INLINE int GET_PLANES_LIMIT (uae_u16 bc0)
/* Programmed rates or superhires (!) disable normal DMA limits */
#define HARD_DDF_START (HARD_DDF_LIMITS_DISABLED ? 0x04 : 0x18)
static void reset_bplmod (void)
static void reset_bpldelays (void)
{
if (dbpl1mod_on > 0) {
bpl1mod = dbpl1mod;
@ -669,6 +671,15 @@ static void reset_bplmod (void)
bpl2mod = dbpl2mod;
dbpl2mod_on = 0;
}
if (dbplpt_on2) {
for (int i = 0; i < MAX_PLANES; i++) {
if (dbplpt_on[i] > 0) {
bplpt[i] = (bplpt[i] & 0xffff0000) | (dbplpt[i] & 0x0000fffe);
dbplpt_on[i] = 0;
}
}
dbplpt_on2 = 0;
}
}
static void add_modulo (int hpos, int nr)
@ -694,14 +705,14 @@ static void add_modulo (int hpos, int nr)
mod = bpl1mod;
bplpt[nr] += mod;
bplptx[nr] += mod;
reset_bplmod ();
reset_bpldelays ();
}
static void add_modulos (void)
{
int m1, m2;
reset_bplmod ();
reset_bpldelays ();
if (fmode & 0x4000) {
if (((diwstrt >> 8) ^ vpos) & 1)
m1 = m2 = bpl2mod;
@ -1042,7 +1053,7 @@ static void setup_fmodes (int hpos)
fetch_modulo_cycle = fetchunit - fetchstart;
// wacky pixels / raf megademo hires unaligned scroller feature
if (thisline_decision.plfleft < 0) {
if ((thisline_decision.plfleft < 0) && bplcon0_res >= RES_HIRES) {
if (fetch_cycle & (fetchunit >> 1)) {
fetch_cycle &= ~(fetchunit_mask >> 1);
fetch_cycle += fetchunit;
@ -2157,8 +2168,11 @@ STATIC_INLINE void decide_line (int hpos)
{
/* Take care of the vertical DIW. */
if (vpos == plffirstline) {
diwstate = DIW_waiting_stop;
ddf_change = vpos;
// A1000 Agnus won't start bitplane DMA if vertical diw is zero.
if (vpos > 0 || (vpos == 0 && !currprefs.cs_dipagnus)) {
diwstate = DIW_waiting_stop;
ddf_change = vpos;
}
}
if (vpos == plflastline) {
diwstate = DIW_waiting_start;
@ -2986,7 +3000,7 @@ static void reset_decisions (void)
bpldmasetupphase = 0;
ddfstrt_old_hpos = -1;
bpldmawasactive = false;
reset_bplmod ();
reset_bpldelays ();
if (plf_state > plf_active)
plf_state = plf_idle;
@ -4144,6 +4158,10 @@ static void BPLxPTH (int hpos, uae_u16 v, int num)
{
decide_line (hpos);
decide_fetch (hpos);
if (dbplpt_on[num]) {
bplpt[num] = (bplpt[num] & 0xffff0000) | (dbplpt[num] & 0x0000fffe);
dbplpt_on[num] = 0;
}
bplpt[num] = (bplpt[num] & 0x0000ffff) | ((uae_u32)v << 16);
bplptx[num] = (bplptx[num] & 0x0000ffff) | ((uae_u32)v << 16);
//write_log (_T("%d:%d:BPL%dPTH %08X COP=%08x\n"), hpos, vpos, num, bplpt[num], cop_state.ip);
@ -4155,10 +4173,20 @@ static void BPLxPTL (int hpos, uae_u16 v, int num)
/* chipset feature: BPLxPTL write and next cycle doing DMA fetch using same pointer register ->
* this write goes nowhere (same happens with all DMA channels, not just BPL)
* (intro MoreNewStuffy by PlasmaForce)
*
* NEW: last fetch block does not have this side-effect, probably due to modulo adds.
* Also it seems only plane 0 fetches have this feature
*/
/* only detect copper accesses to prevent too fast CPU mode glitches */
if (copper_access && is_bitplane_dma (hpos + 1) == num + 1)
if (copper_access && num == 0 && is_bitplane_dma (hpos + 1) == num + 1) {
if (plf_state < plf_wait_stop)
return;
/* modulo adds use old value! Argh! */
dbplpt[num] = (bplpt[num] & 0xffff0000) | (v & 0x0000fffe);
dbplpt_on[num] = hpos + 1;
dbplpt_on2 = 1;
return;
}
bplpt[num] = (bplpt[num] & 0xffff0000) | (v & 0x0000fffe);
bplptx[num] = (bplptx[num] & 0xffff0000) | (v & 0x0000fffe);
//write_log (_T("%d:%d:BPL%dPTL %08X COP=%08x\n"), hpos, vpos, num, bplpt[num], cop_state.ip);
@ -4301,7 +4329,7 @@ static void BPL1MOD (int hpos, uae_u16 v)
// write to BPLxMOD one cycle before
// BPL fetch that also adds modulo:
// Old BPLxMOD value is added.
if (is_bitplane_dma (hpos + 1) & 1) {
if (1 && (is_bitplane_dma (hpos + 1) & 1)) {
dbpl1mod = v;
dbpl1mod_on = hpos + 1;
} else {
@ -4317,7 +4345,7 @@ static void BPL2MOD (int hpos, uae_u16 v)
decide_line (hpos);
decide_fetch (hpos);
}
if (is_bitplane_dma (hpos + 1) & 2) {
if (1 && (is_bitplane_dma (hpos + 1) & 2)) {
dbpl2mod = v;
dbpl2mod_on = hpos + 1;
} else {
@ -6605,7 +6633,7 @@ STATIC_INLINE bool is_last_line (void)
static void hsync_handler_post (bool onvsync)
{
last_copper_hpos = 0;
#ifdef CPUEMU_12
#ifdef CPUEMU_13
if (currprefs.cpu_cycle_exact || currprefs.blitter_cycle_exact) {
memset (cycle_line, 0, sizeof cycle_line);
}
@ -6678,7 +6706,7 @@ static void hsync_handler_post (bool onvsync)
vsync_handler_post ();
vpos_count = 0;
}
// DIP Agnus (8361): vblank interrupt is triggered on line 1!
// A1000 DIP Agnus (8361): vblank interrupt is triggered on line 1!
if (currprefs.cs_dipagnus) {
if (vpos == 1)
send_interrupt (5, 1 * CYCLE_UNIT);
@ -6691,7 +6719,7 @@ static void hsync_handler_post (bool onvsync)
lof_lastline = lof_store != 0;
}
#ifdef CPUEMU_12
#ifdef CPUEMU_13
if (currprefs.cpu_cycle_exact || currprefs.blitter_cycle_exact) {
int hp = maxhpos - 1, i;
for (i = 0; i < 4; i++) {
@ -8333,6 +8361,8 @@ void check_prefs_changed_custom (void)
currprefs.cs_mbdmac = changed_prefs.cs_mbdmac;
currprefs.cs_df0idhw = changed_prefs.cs_df0idhw;
currprefs.cs_slowmemisfast = changed_prefs.cs_slowmemisfast;
currprefs.cs_dipagnus = changed_prefs.cs_dipagnus;
currprefs.cs_denisenoehb = changed_prefs.cs_denisenoehb;
if (currprefs.chipset_mask != changed_prefs.chipset_mask ||
currprefs.picasso96_nocustom != changed_prefs.picasso96_nocustom ||
@ -8354,7 +8384,7 @@ void check_prefs_changed_custom (void)
#endif
}
#ifdef CPUEMU_12
#ifdef CPUEMU_13
STATIC_INLINE void sync_copper (int hpos)
{

View File

@ -237,14 +237,17 @@ static void writeimageblock (struct zfile *dst, uae_u8 *sector, int offset)
zfile_fwrite (sector, FS_FLOPPY_BLOCKSIZE, 1, dst);
}
static void disk_checksum (uae_u8 *p, uae_u8 *c)
static uae_u32 disk_checksum (uae_u8 *p, uae_u8 *c)
{
uae_u32 cs = 0;
int i;
for (i = 0; i < FS_FLOPPY_BLOCKSIZE; i+= 4)
cs += (p[i] << 24) | (p[i+1] << 16) | (p[i+2] << 8) | (p[i+3] << 0);
cs = -cs;
c[0] = cs >> 24; c[1] = cs >> 16; c[2] = cs >> 8; c[3] = cs >> 0;
if (c) {
c[0] = cs >> 24; c[1] = cs >> 16; c[2] = cs >> 8; c[3] = cs >> 0;
}
return cs;
}
static int dirhash (const uae_char *name)
@ -3655,6 +3658,24 @@ void DISK_reset (void)
setamax ();
}
static void load_track (int num, int cyl, int side, int *sectable)
{
int oldcyl, oldside, drvsec;
drive *drv = &floppy[num];
oldcyl = drv->cyl;
oldside = side;
drv->cyl = cyl;
side = 0;
drv->buffered_cyl = -1;
drive_fill_bigbuf (drv, 1);
decode_buffer (drv->bigmfmbuf, drv->cyl, 11, drv->ddhd, drv->filetype, &drvsec, sectable, 1);
drv->cyl = oldcyl;
side = oldside;
drv->buffered_cyl = -1;
}
int DISK_examine_image (struct uae_prefs *p, int num, struct diskinfo *di)
{
int drvsec;
@ -3666,7 +3687,7 @@ int DISK_examine_image (struct uae_prefs *p, int num, struct diskinfo *di)
int oldcyl, oldside;
ret = 0;
memset (di, 0, sizeof di);
memset (di, 0, sizeof (struct diskinfo));
di->unreadable = true;
oldcyl = drv->cyl;
oldside = side;
@ -3685,7 +3706,7 @@ int DISK_examine_image (struct uae_prefs *p, int num, struct diskinfo *di)
side = oldside;
if (sectable[0] == 0 || sectable[1] == 0) {
ret = 2;
goto end;
goto end2;
}
crc = crc2 = 0;
for (i = 0; i < 1024; i += 4) {
@ -3714,6 +3735,10 @@ int DISK_examine_image (struct uae_prefs *p, int num, struct diskinfo *di)
goto end;
}
di->bb_crc_valid = true;
writebuffer[4] = writebuffer[5] = writebuffer[6] = writebuffer[7] = 0;
if (get_crc32 (writebuffer, 0x31) == 0xae5e282c) {
di->bootblocktype = 1;
}
if (dos == 0x444f5300)
ret = 10;
else if (dos == 0x444f5301 || dos == 0x444f5302 || dos == 0x444f5303)
@ -3722,7 +3747,25 @@ int DISK_examine_image (struct uae_prefs *p, int num, struct diskinfo *di)
ret = 12;
else
ret = 4;
uae_u32 v = get_crc32 (writebuffer + 8, 0x5c - 8);
if (ret >= 10 && v == 0xe158ca4b) {
di->bootblocktype = 2;
}
end:
load_track (num, 40, 0, sectable);
if (sectable[0]) {
if (!disk_checksum (writebuffer, NULL) &&
writebuffer[0] == 0 && writebuffer[1] == 0 && writebuffer[2] == 0 && writebuffer[3] == 2 &&
writebuffer[508] == 0 && writebuffer[509] == 0 && writebuffer[510] == 0 && writebuffer[511] == 1) {
writebuffer[512 - 20 * 4 + 1 + writebuffer[512 - 20 * 4]] = 0;
TCHAR *n = au ((const char*)(writebuffer + 512 - 20 * 4 + 1));
if (_tcslen (n) >= sizeof (di->diskname))
n[sizeof (di->diskname) - 1] = 0;
_tcscpy (di->diskname, n);
xfree (n);
}
}
end2:
drive_image_free (drv);
if (wasdelayed > 1) {
drive_eject (drv);

View File

@ -733,16 +733,17 @@ static void pfield_init_linetoscr (void)
int ddf_left = dp_for_drawing->plfleft * 2 + DIW_DDF_OFFSET;
int ddf_right = dp_for_drawing->plfright * 2 + DIW_DDF_OFFSET;
int leftborderhidden;
int native_ddf_left2;
/* Compute datafetch start/stop in pixels; native display coordinates. */
native_ddf_left = coord_hw_to_window_x (ddf_left);
native_ddf_right = coord_hw_to_window_x (ddf_right);
#if 0
// this breaks Blerkenwiegel/Scoopex
// Blerkenwiegel/Scoopex workaround
native_ddf_left2 = native_ddf_left;
if (native_ddf_left < 0)
native_ddf_left = 0;
#endif
if (native_ddf_right < native_ddf_left)
native_ddf_right = native_ddf_left;
@ -837,7 +838,7 @@ static void pfield_init_linetoscr (void)
pixels_offset = MAX_PIXELS_PER_LINE - (ddf_left << bplres);
ddf_left <<= bplres;
leftborderhidden = playfield_start - native_ddf_left;
leftborderhidden = playfield_start - native_ddf_left2;
if (hblank_left_start > playfield_start)
leftborderhidden += hblank_left_start - playfield_start;
src_pixel = MAX_PIXELS_PER_LINE + res_shift_from_window (leftborderhidden);

56
fpp.cpp
View File

@ -641,6 +641,8 @@ STATIC_INLINE int get_fp_value (uae_u32 opcode, uae_u16 extra, fptype *src, uaec
uae_u32 ad = 0;
static const int sz1[8] = { 4, 4, 12, 12, 2, 8, 1, 0 };
static const int sz2[8] = { 4, 4, 12, 12, 2, 8, 2, 0 };
int exts[3];
int doext = 0;
if (!(extra & 0x4000)) {
if (fault_if_no_fpu (opcode, extra, 0, oldpc))
@ -708,10 +710,30 @@ STATIC_INLINE int get_fp_value (uae_u32 opcode, uae_u16 extra, fptype *src, uaec
ad = x_cp_get_disp_ea_020 (m68k_getpc (), 0);
break;
case 4:
ad = m68k_getpc ();
m68k_setpc (ad + sz2[size]);
if (size == 6)
ad++;
doext = 1;
switch (size)
{
case 0:
case 1:
exts[0] = x_next_ilong ();
break;
case 2:
case 3:
exts[0] = x_next_ilong ();
exts[1] = x_next_ilong ();
exts[2] = x_next_ilong ();
break;
case 4:
exts[0] = x_next_iword ();
break;
case 5:
exts[0] = x_next_ilong ();
exts[1] = x_next_ilong ();
break;
case 6:
exts[0] = x_next_iword ();
break;
}
break;
default:
return 0;
@ -724,21 +746,21 @@ STATIC_INLINE int get_fp_value (uae_u32 opcode, uae_u16 extra, fptype *src, uaec
switch (size)
{
case 0:
*src = (fptype) (uae_s32) x_cp_get_long (ad);
*src = (fptype) (uae_s32) (doext ? exts[0] : x_cp_get_long (ad));
break;
case 1:
*src = to_single (x_cp_get_long (ad));
*src = to_single ((doext ? exts[0] : x_cp_get_long (ad)));
break;
case 2:
{
if (fault_if_4060 (opcode, extra, ad, oldpc, FPU_EXP_UNIMP_DATATYPE))
return -1;
uae_u32 wrd1, wrd2, wrd3;
wrd1 = x_cp_get_long (ad);
wrd1 = (doext ? exts[0] : x_cp_get_long (ad));
ad += 4;
wrd2 = x_cp_get_long (ad);
wrd2 = (doext ? exts[1] : x_cp_get_long (ad));
ad += 4;
wrd3 = x_cp_get_long (ad);
wrd3 = (doext ? exts[2] : x_cp_get_long (ad));
*src = to_exten (wrd1, wrd2, wrd3);
}
break;
@ -747,28 +769,28 @@ STATIC_INLINE int get_fp_value (uae_u32 opcode, uae_u16 extra, fptype *src, uaec
if (fault_if_4060 (opcode, extra, ad, oldpc, FPU_EXP_UNIMP_DATATYPE))
return -1;
uae_u32 wrd1, wrd2, wrd3;
wrd1 = x_cp_get_long (ad);
wrd1 = (doext ? exts[0] : x_cp_get_long (ad));
ad += 4;
wrd2 = x_cp_get_long (ad);
wrd2 = (doext ? exts[1] : x_cp_get_long (ad));
ad += 4;
wrd3 = x_cp_get_long (ad);
wrd3 = (doext ? exts[2] : x_cp_get_long (ad));
*src = to_pack (wrd1, wrd2, wrd3);
}
break;
case 4:
*src = (fptype) (uae_s16) x_cp_get_word (ad);
*src = (fptype) (uae_s16) (doext ? exts[0] : x_cp_get_word (ad));
break;
case 5:
{
uae_u32 wrd1, wrd2;
wrd1 = x_cp_get_long (ad);
wrd1 = (doext ? exts[0] : x_cp_get_long (ad));
ad += 4;
wrd2 = x_cp_get_long (ad);
wrd2 = (doext ? exts[1] : x_cp_get_long (ad));
*src = to_double (wrd1, wrd2);
}
break;
case 6:
*src = (fptype) (uae_s8) x_cp_get_byte (ad);
*src = (fptype) (uae_s8) (doext ? exts[0] : x_cp_get_byte (ad));
break;
default:
return 0;
@ -855,10 +877,12 @@ STATIC_INLINE int put_fp_value (fptype value, uae_u32 opcode, uae_u16 extra, uae
case 3:
ad = x_cp_get_disp_ea_020 (m68k_getpc (), 0);
break;
#if 0
case 4:
ad = m68k_getpc ();
m68k_setpc (ad + sz2[size]);
break;
#endif
default:
return 0;
}

View File

@ -194,24 +194,32 @@ static void addcycles_ce020 (int cycles)
addcycles_ce020 (cycles, NULL);
}
static void get_prefetch_ce020 (void)
static void get_prefetch_020 (void)
{
if (!using_ce020)
if (!using_prefetch_020)
return;
printf ("\tregs.irc = %s (%d);\n", prefetch_word, m68k_pc_offset);
}
static void get_prefetch_ce020_0 (void)
static void get_prefetch_020_0 (void)
{
if (!using_ce020)
if (!using_prefetch_020)
return;
printf ("\tregs.irc = %s (0);\n", prefetch_word);
}
static void returntail (bool iswrite)
{
if (!using_ce020)
if (!using_ce020) {
if (using_prefetch_020) {
if (!tail_ce020_done) {
if (!did_prefetch)
get_prefetch_020 ();
did_prefetch = 1;
tail_ce020_done = true;
}
}
return;
}
if (!tail_ce020_done) {
total_ce020 -= 2;
if (iswrite) {
@ -225,7 +233,7 @@ static void returntail (bool iswrite)
total_ce020 = 1;
}
if (!did_prefetch)
get_prefetch_ce020 ();
get_prefetch_020 ();
if (total_ce020 > 0)
addcycles_ce020 (total_ce020);
@ -1932,7 +1940,7 @@ static void genmovemel (uae_u16 opcode)
}
count_ncycles++;
fill_prefetch_next ();
get_prefetch_ce020 ();
get_prefetch_020 ();
}
static void genmovemel_ce (uae_u16 opcode)
@ -2019,7 +2027,7 @@ static void genmovemle (uae_u16 opcode)
}
count_ncycles++;
fill_prefetch_next ();
get_prefetch_ce020 ();
get_prefetch_020 ();
}
static void genmovemle_ce (uae_u16 opcode)
@ -2376,7 +2384,6 @@ static int islongimm (struct instr *curi)
static void resetvars (void)
{
memory_cycle_cnt = 4;
insn_n_cycles = using_prefetch ? 0 : 4;
insn_n_cycles020 = 0;
ir2irc = 0;
@ -2442,7 +2449,6 @@ static void resetvars (void)
do_cycles = "do_cycles_ce020";
nextw = "next_iword_020ce";
nextl = "next_ilong_020ce";
memory_cycle_cnt = 3;
} else if (using_ce020 == 2) {
// 68030 CE
disp020 = "x_get_disp_ea_ce030";
@ -2460,7 +2466,6 @@ static void resetvars (void)
do_cycles = "do_cycles_ce020";
nextw = "next_iword_030ce";
nextl = "next_ilong_030ce";
memory_cycle_cnt = 3;
} else if (using_prefetch_020) {
disp020 = "x_get_disp_ea_020";
prefetch_word = "get_word_020_prefetch";
@ -2476,7 +2481,6 @@ static void resetvars (void)
dstb = "x_put_byte";
nextw = "next_iword_020_prefetch";
nextl = "next_ilong_020_prefetch";
memory_cycle_cnt = 2;
}
#if 0
} else if (using_ce020) {
@ -3337,6 +3341,32 @@ static void gen_opcode (unsigned long int opcode)
printf ("\tregs.sr = sr;\n");
setpc ("pc");
printf ("\tMakeFromSR ();\n");
} else if (cpu_level == 1 && using_prefetch) {
int old_brace_level = n_braces;
if (next_cpu_level < 0)
next_cpu_level = 0;
printf ("\tuae_u16 newsr; uae_u32 newpc;\n");
printf ("\tfor (;;) {\n");
printf ("\t\tuaecptr a = m68k_areg (regs, 7);\n");
printf ("\t\tuae_u16 sr = %s (a);\n", srcw);
printf ("\t\tuae_u32 pc = %s (a + 2);\n", srcl);
printf ("\t\tuae_u16 format = %s (a + 2 + 4);\n", srcw);
printf ("\t\tint frame = format >> 12;\n");
printf ("\t\tint offset = 8;\n");
printf ("\t\tnewsr = sr; newpc = pc;\n");
printf ("\t\tif (frame == 0x0) { m68k_areg (regs, 7) += offset; break; }\n");
printf ("\t\telse if (frame == 0x8) { m68k_areg (regs, 7) += offset + 50; break; }\n");
printf ("\t\telse { m68k_areg (regs, 7) += offset; Exception (14); goto %s; }\n", endlabelstr);
printf ("\t\tregs.sr = newsr; MakeFromSR ();\n}\n");
pop_braces (old_brace_level);
printf ("\tregs.sr = newsr; MakeFromSR ();\n");
printf ("\tif (newpc & 1) {\n");
printf ("\t\texception3i (0x%04X, newpc);\n", opcode);
printf ("\t\tgoto %s;\n", endlabelstr);
printf ("\t}\n");
setpc ("newpc");
printf ("\tipl_fetch ();\n");
need_endlabel = 1;
} else {
int old_brace_level = n_braces;
if (next_cpu_level < 0)
@ -3639,7 +3669,7 @@ static void gen_opcode (unsigned long int opcode)
printf ("didnt_jump:;\n");
need_endlabel = 1;
sync_m68k_pc ();
get_prefetch_ce020_0 ();
get_prefetch_020_0 ();
if (curi->size == sz_byte) {
addcycles000 (2);
irc2ir ();
@ -3721,7 +3751,7 @@ static void gen_opcode (unsigned long int opcode)
printf ("\t}\n");
setpc ("oldpc + %d", m68k_pc_offset);
m68k_pc_offset = 0;
get_prefetch_ce020_0 ();
get_prefetch_020_0 ();
fill_prefetch_full_000 ();
insn_n_cycles = 12;
need_endlabel = 1;
@ -5152,7 +5182,7 @@ static void generate_cpu (int id, int mode)
}
postfix = id;
if (id == 0 || id == 11 || id == 12 || id == 20 || id == 21 || id == 22 || id == 31 || id == 32 || id == 33) {
if (id == 0 || id == 11 || id == 13 || id == 20 || id == 21 || id == 22 || id == 31 || id == 32 || id == 33) {
if (generate_stbl)
fprintf (stblfile, "#ifdef CPUEMU_%d%s\n", postfix, extraup);
postfix2 = postfix;
@ -5167,16 +5197,28 @@ static void generate_cpu (int id, int mode)
using_ce020 = 0;
using_mmu = 0;
using_waitstates = 0;
memory_cycle_cnt = 4;
mmu_postfix = "";
if (id == 11 || id == 12) { // 11 = 68000 prefetch, 12 = 68000 cycle-exact
cpu_level = 0;
if (id == 11 || id == 12) { // 11 = 68010 prefetch, 12 = 68000 prefetch
cpu_level = id == 11 ? 1 : 0;
using_prefetch = 1;
using_exception_3 = 1;
if (id == 12)
using_ce = 1;
for (rp = 0; rp < nr_cpuop_funcs; rp++)
opcode_next_clev[rp] = 0;
if (id == 11) {
read_counts ();
for (rp = 0; rp < nr_cpuop_funcs; rp++)
opcode_next_clev[rp] = cpu_level;
}
} else if (id == 13 || id == 14) { // 13 = 68010 cycle-exact, 14 = 68000 cycle-exact
cpu_level = id == 13 ? 1 : 0;
using_prefetch = 1;
using_exception_3 = 1;
using_ce = 1;
if (id == 13) {
read_counts ();
for (rp = 0; rp < nr_cpuop_funcs; rp++)
opcode_next_clev[rp] = cpu_level;
}
} else if (id == 20) { // 68020 prefetch
cpu_level = 2;
using_prefetch_020 = 2;
@ -5191,6 +5233,7 @@ static void generate_cpu (int id, int mode)
// clock memory accesses, 68020 has 3 clock
// memory accesses
using_waitstates = 1;
memory_cycle_cnt = 3;
read_counts ();
for (rp = 0; rp < nr_cpuop_funcs; rp++)
opcode_next_clev[rp] = cpu_level;
@ -5198,6 +5241,7 @@ static void generate_cpu (int id, int mode)
cpu_level = 3 + (24 - id);
using_ce020 = 2;
using_prefetch_020 = 2;
memory_cycle_cnt = 2;
if (id == 22) {
read_counts ();
for (rp = 0; rp < nr_cpuop_funcs; rp++)
@ -5272,7 +5316,7 @@ int main (int argc, char **argv)
using_ce = 0;
for (i = 0; i <= 33; i++) {
if ((i >= 6 && i < 11) || (i > 12 && i < 20) || (i > 24 && i < 31))
if ((i >= 6 && i < 11) || (i > 14 && i < 20) || (i > 24 && i < 31))
continue;
generate_stbl = 1;
generate_cpu (i, 0);

View File

@ -67,12 +67,6 @@ STATIC_INLINE void do_cycles_ce020_mem (int clocks, uae_u32 val)
x_do_cycles_post (clocks * cpucycleunit, val);
}
STATIC_INLINE void resetcycles_ce020 (void)
{
regs.ce020memcycles = 0;
regs.ce020memcycle_data = true;
}
#if 0
STATIC_INLINE void do_head_cycles_ce020 (int h)
{
@ -232,7 +226,7 @@ extern uae_u32 get_word_ce040_prefetch (int);
#endif
#ifdef CPUEMU_12
#ifdef CPUEMU_13
STATIC_INLINE void do_cycles_ce000 (int clocks)
{

View File

@ -18,6 +18,8 @@ struct diskinfo
uae_u32 crc32;
bool hd;
bool unreadable;
int bootblocktype;
TCHAR diskname[110];
};
extern void DISK_init (void);

View File

@ -238,8 +238,11 @@ extern void inputdevice_reset (void);
extern void write_inputdevice_config (struct uae_prefs *p, struct zfile *f);
extern void read_inputdevice_config (struct uae_prefs *p, const TCHAR *option, TCHAR *value);
extern void reset_inputdevice_config (struct uae_prefs *pr);
extern void store_inputdevice_config (struct uae_prefs *pr);
extern void restore_inputdevice_config (struct uae_prefs *p, int portnum);
extern int inputdevice_joyport_config (struct uae_prefs *p, const TCHAR *value, int portnum, int mode, int type);
extern int inputdevice_getjoyportdevice (int port, int val);
extern void inputdevice_validate_jports (struct uae_prefs *p, int changedport);
extern void inputdevice_init (void);
extern void inputdevice_close (void);

View File

@ -468,10 +468,12 @@ extern const struct cputbl op_smalltbl_20_ff[]; // prefetch
extern const struct cputbl op_smalltbl_21_ff[]; // CE
/* 68010 */
extern const struct cputbl op_smalltbl_4_ff[];
extern const struct cputbl op_smalltbl_11_ff[]; // prefetch
extern const struct cputbl op_smalltbl_13_ff[]; // CE
/* 68000 */
extern const struct cputbl op_smalltbl_5_ff[];
extern const struct cputbl op_smalltbl_11_ff[]; // prefetch
extern const struct cputbl op_smalltbl_12_ff[]; // CE
extern const struct cputbl op_smalltbl_12_ff[]; // prefetch
extern const struct cputbl op_smalltbl_14_ff[]; // CE
extern cpuop_func *cpufunctbl[65536] ASM_SYM_FOR_FUNC ("cpufunctbl");

View File

@ -166,7 +166,7 @@ int inputdevice_uaelib (const TCHAR *s, const TCHAR *parm)
for (i = 1; events[i].name; i++) {
if (!_tcscmp (s, events[i].confname)) {
handle_input_event (i, _tstol (parm), 1, 0, false, false);
handle_input_event (i, parm ? _tstol (parm) : 0, 1, 0, false, false);
return 1;
}
}
@ -1436,7 +1436,7 @@ static void inputdevice_mh_abs (int x, int y, uae_u32 buttonbits)
x -= mouseoffset_x + 1;
y -= mouseoffset_y + 2;
write_log (_T("%04dx%04d %08x\n"), x, y, buttonbits);
//write_log (_T("%04dx%04d %08x\n"), x, y, buttonbits);
p[MH_ABSX] = x >> 8;
p[MH_ABSX + 1] = x;
@ -2413,6 +2413,12 @@ static int handle_custom_event (const TCHAR *custom)
debug_parser (p + 4, NULL, -1);
} else if (!_tcsnicmp (p, _T("kbr "), 4)) {
inject_events (p + 4);
} else if (!_tcsnicmp (p, _T("evt "), 4)) {
TCHAR *pp = _tcschr (p + 4, ' ');
p += 4;
if (pp)
*pp++ = 0;
inputdevice_uaelib (p, pp);
} else {
cfgfile_parse_line (&changed_prefs, p, 0);
}
@ -2608,7 +2614,8 @@ static void queue_input_event (int evt, const TCHAR *custom, int state, int max,
}
static uae_u8 keybuf[256];
static int inputcode_pending, inputcode_pending_state;
#define MAX_PENDING_EVENTS 20
static int inputcode_pending[MAX_PENDING_EVENTS], inputcode_pending_state[MAX_PENDING_EVENTS];
void inputdevice_release_all_keys (void)
{
@ -2625,8 +2632,17 @@ void inputdevice_release_all_keys (void)
void inputdevice_add_inputcode (int code, int state)
{
inputcode_pending = code;
inputcode_pending_state = state;
for (int i = 0; i < MAX_PENDING_EVENTS; i++) {
if (inputcode_pending[i] == code && inputcode_pending_state[i] == state)
return;
}
for (int i = 0; i < MAX_PENDING_EVENTS; i++) {
if (inputcode_pending[i] == 0) {
inputcode_pending[i] = code;
inputcode_pending_state[i] = state;
return;
}
}
}
void inputdevice_do_keyboard (int code, int state)
@ -2688,11 +2704,9 @@ static bool needcputrace (int code)
return false;
}
void inputdevice_handle_inputcode (void)
static bool inputdevice_handle_inputcode2 (int code, int state)
{
static int swapperslot;
int code = inputcode_pending;
int state = inputcode_pending_state;
static int tracer_enable;
if (code == 0)
@ -2700,12 +2714,10 @@ void inputdevice_handle_inputcode (void)
if (needcputrace (code) && can_cpu_tracer () == true && is_cpu_tracer () == false && !input_play && !input_record && !debugging) {
if (set_cpu_tracer (true)) {
tracer_enable = 1;
return; // wait for next frame
return true; // wait for next frame
}
}
inputcode_pending = 0;
if (vpos != 0)
write_log (_T("inputcode=%d but vpos = %d"), code, vpos);
@ -2736,7 +2748,7 @@ void inputdevice_handle_inputcode (void)
#endif
if (!state)
return;
return false;
switch (code)
{
case AKS_ENTERGUI:
@ -2954,8 +2966,26 @@ end:
set_cpu_tracer (false);
tracer_enable = 0;
}
return false;
}
void inputdevice_handle_inputcode (void)
{
bool got = false;
for (int i = 0; i < MAX_PENDING_EVENTS; i++) {
int code = inputcode_pending[i];
int state = inputcode_pending_state[i];
if (code) {
if (!inputdevice_handle_inputcode2 (code, state))
inputcode_pending[i] = 0;
got = true;
}
}
if (!got)
inputdevice_handle_inputcode2 (0, 0);
}
static int getqualid (int evt)
{
if (evt > INPUTEVENT_SPC_QUALIFIER_START && evt < INPUTEVENT_SPC_QUALIFIER_END)
@ -3407,6 +3437,8 @@ static int switchdevice (struct uae_input_device *id, int num, bool buttonmode)
TCHAR *name = NULL;
int otherbuttonpressed = 0;
//write_log (_T("switchdevice '%s' %d %d\n"), id->name, num, buttonmode);
if (num >= 4)
return 0;
#ifdef RETROPLATFORM
@ -3441,25 +3473,50 @@ static int switchdevice (struct uae_input_device *id, int num, bool buttonmode)
} else {
newport = num ? 1 : 0;
}
//write_log (_T("newport = %d\n"), newport);
/* "GamePorts" switch if in GamePorts mode or Input mode and GamePorts port was not NONE */
if (currprefs.input_selected_setting == GAMEPORT_INPUT_SETTINGS || currprefs.jports[newport].id != JPORT_NONE) {
//write_log (_T("GAMEPORTS MODE\n"));
if ((num == 0 || num == 1) && currprefs.jports[newport].id != JPORT_CUSTOM) {
//write_log (_T("Port supported\n"));
int om = jsem_ismouse (num, &currprefs);
int om1 = jsem_ismouse (0, &currprefs);
int om2 = jsem_ismouse (1, &currprefs);
if ((om1 >= 0 || om2 >= 0) && ismouse)
if ((om1 >= 0 || om2 >= 0) && ismouse) {
//write_log (_T("END3\n"));
return 0;
if (flags)
}
if (flags) {
//write_log (_T("END2\n"));
return 0;
}
if (name) {
#if 1
if (ismouse) {
int nummouse = 0; // count number of non-supermouse mice
int supermouse = -1;
for (i = 0; i < idev[IDTYPE_MOUSE].get_num (); i++) {
if (!idev[IDTYPE_MOUSE].get_flags (i))
nummouse++;
else
supermouse = i;
}
if (supermouse >= 0 && nummouse == 1) {
name = idev[IDTYPE_MOUSE].get_uniquename (supermouse);
}
}
#endif
write_log (_T("inputdevice change '%s':%d->%d\n"), name, num, newport);
inputdevice_joyport_config (&changed_prefs, name, newport, -1, 2);
inputdevice_validate_jports (&changed_prefs, -1);
inputdevice_copyconfig (&changed_prefs, &currprefs);
return 1;
}
}
//write_log (_T("END1\n"));
return 0;
} else {
//write_log (_T("INPUTPANEL MODE\n"));
int oldport = getoldport (id);
int k, evt;
struct inputevent *ie, *ie2;
@ -3514,6 +3571,7 @@ static int switchdevice (struct uae_input_device *id, int num, bool buttonmode)
}
write_log (_T("inputdevice change '%s':%d->%d\n"), name, num, newport);
inputdevice_copyconfig (&currprefs, &changed_prefs);
inputdevice_validate_jports (&changed_prefs, -1);
inputdevice_copyconfig (&changed_prefs, &currprefs);
return 1;
}
@ -6627,7 +6685,7 @@ void setjoystickstate (int joy, int axis, int state, int max)
return;
if (!joysticks[joy].enabled) {
if (v1 && v1 != v2)
switchdevice (&joysticks[joy], axis * 2 + (v1 < 0 ? 0 : 1), false);
switchdevice (&joysticks[joy], v1 < 0 ? 0 : 1, false);
return;
}
for (i = 0; i < MAX_INPUT_SUB_EVENT; i++) {
@ -6804,6 +6862,105 @@ int jsem_iskbdjoy (int port, const struct uae_prefs *p)
return v;
}
static struct jport stored_ports[MAX_JPORTS];
static void fixjport (struct jport *port, int add)
{
int vv = port->id;
if (vv == JPORT_CUSTOM || vv == JPORT_NONE)
return;
if (vv >= JSEM_JOYS && vv < JSEM_MICE) {
vv -= JSEM_JOYS;
vv += add;
if (vv >= inputdevice_get_device_total (IDTYPE_JOYSTICK))
vv = 0;
vv += JSEM_JOYS;
} else if (vv >= JSEM_MICE && vv < JSEM_END) {
vv -= JSEM_MICE;
vv += add;
if (vv >= inputdevice_get_device_total (IDTYPE_MOUSE))
vv = 0;
vv += JSEM_MICE;
} else if (vv >= JSEM_KBDLAYOUT && vv < JSEM_LASTKBD) {
vv -= JSEM_KBDLAYOUT;
vv += add;
if (vv >= JSEM_LASTKBD)
vv = 0;
vv += JSEM_KBDLAYOUT;
}
port->id = vv;
}
void inputdevice_validate_jports (struct uae_prefs *p, int changedport)
{
int i, j;
for (i = 0; i < MAX_JPORTS; i++)
fixjport (&p->jports[i], 0);
for (i = 0; i < MAX_JPORTS; i++) {
if (p->jports[i].id < 0)
continue;
for (j = 0; j < MAX_JPORTS; j++) {
if (p->jports[j].id < 0)
continue;
if (j == i)
continue;
if (p->jports[i].id == p->jports[j].id) {
if (i == changedport) {
restore_inputdevice_config (p, j);
} else if (j == changedport) {
restore_inputdevice_config (p, i);
}
int cnt = 0;
while (p->jports[i].id == p->jports[j].id) {
int k;
if (i == changedport) {
k = j;
} else {
k = i;
}
fixjport (&p->jports[k], 1);
cnt++;
if (cnt > 10)
p->jports[k].id = JSEM_KBDLAYOUT;
if (cnt > 20)
break;
}
}
}
}
}
static bool inputdevice_inserted (struct uae_prefs *p, int portnum, int id, int mode, int type)
{
for (int k = 0; k < MAX_JPORTS; k++) {
if (p->jports[k].id == id && k != portnum) {
if (type == IDTYPE_JOYSTICK) {
// if this joystick is already in port 0, reset port 0 back to original
// and insert joystick in port 1. Probably what user wanted.
if (k == 0 && portnum == 1) {
memcpy (&p->jports[0], &stored_ports[0], sizeof (struct jport));
return false;
}
} else if (type == IDTYPE_MOUSE) {
return true;
}
return true;
}
}
return false;
}
void store_inputdevice_config (struct uae_prefs *p)
{
for (int i = 0; i < MAX_JPORTS; i++) {
memcpy (&stored_ports[i], &p->jports[i], sizeof (struct jport));
}
}
void restore_inputdevice_config (struct uae_prefs *p, int portnum)
{
memcpy (&p->jports[portnum], &stored_ports[portnum], sizeof (struct jport));
}
int inputdevice_joyport_config (struct uae_prefs *p, const TCHAR *value, int portnum, int mode, int type)
{
switch (type)
@ -6825,11 +6982,14 @@ int inputdevice_joyport_config (struct uae_prefs *p, const TCHAR *value, int por
TCHAR *name1 = idf->get_friendlyname (i);
TCHAR *name2 = idf->get_uniquename (i);
if ((name1 && !_tcscmp (name1, value)) || (name2 && !_tcscmp (name2, value))) {
p->jports[portnum].id = idnum + i;
if (mode >= 0)
p->jports[portnum].mode = mode;
set_config_changed ();
return 1;
if (!inputdevice_inserted (p, portnum, idnum + 1, mode, type)) {
p->jports[portnum].id = idnum + i;
if (mode >= 0)
p->jports[portnum].mode = mode;
set_config_changed ();
return 1;
}
return 0;
}
}
}
@ -6838,6 +6998,7 @@ int inputdevice_joyport_config (struct uae_prefs *p, const TCHAR *value, int por
case 0:
{
int start = JPORT_NONE, got = 0, max = -1;
int type = -1;
const TCHAR *pp = 0;
if (_tcsncmp (value, _T("kbd"), 3) == 0) {
start = JSEM_KBDLAYOUT;
@ -6845,11 +7006,13 @@ int inputdevice_joyport_config (struct uae_prefs *p, const TCHAR *value, int por
got = 1;
max = JSEM_LASTKBD;
} else if (_tcsncmp (value, _T("joy"), 3) == 0) {
type = IDTYPE_JOYSTICK;
start = JSEM_JOYS;
pp = value + 3;
got = 1;
max = idev[IDTYPE_JOYSTICK].get_num ();
} else if (_tcsncmp (value, _T("mouse"), 5) == 0) {
type = IDTYPE_MOUSE;
start = JSEM_MICE;
pp = value + 5;
got = 1;
@ -6875,6 +7038,8 @@ int inputdevice_joyport_config (struct uae_prefs *p, const TCHAR *value, int por
}
}
if (got == 2) {
if (inputdevice_inserted (p, portnum, start, mode, type))
return 0;
p->jports[portnum].id = start;
if (mode >= 0)
p->jports[portnum].mode = mode;

View File

@ -523,11 +523,11 @@ void fixup_prefs (struct uae_prefs *p)
p->cpu_compatible = 1;
p->address_space_24 = 1;
#endif
#if !defined (CPUEMU_11) && !defined (CPUEMU_12)
#if !defined (CPUEMU_11) && !defined (CPUEMU_13)
p->cpu_compatible = 0;
p->address_space_24 = 0;
#endif
#if !defined (CPUEMU_12)
#if !defined (CPUEMU_13)
p->cpu_cycle_exact = p->blitter_cycle_exact = 0;
#endif
#ifndef AGA
@ -553,7 +553,7 @@ void fixup_prefs (struct uae_prefs *p)
#if !defined (UAESERIAL)
p->uaeserial = 0;
#endif
#if defined (CPUEMU_12)
#if defined (CPUEMU_13)
if (p->cpu_cycle_exact) {
if (p->gfx_framerate > 1) {
error_log (_T("Cycle-exact requires disabled frameskip."));

View File

@ -793,7 +793,7 @@ static void set_x_funcs (void)
} else if (!currprefs.cpu_cycle_exact) {
// 68020+ no ce
if (currprefs.cpu_compatible) {
if (currprefs.cpu_model == 68020) {
if (currprefs.cpu_model == 68020 && !currprefs.cachesize) {
x_prefetch = get_word_prefetch;
x_prefetch_long = get_long_prefetch;
x_get_ilong = get_long_020_prefetch;
@ -811,7 +811,7 @@ static void set_x_funcs (void)
x_do_cycles_pre = do_cycles;
x_do_cycles_post = do_cycles_post;
} else {
// 68030+ does not have real prefetch only emulation
// JIT or 68030+ does not have real prefetch only emulation
x_prefetch = NULL;
x_prefetch_long = NULL;
x_get_ilong = get_ilong;
@ -1137,6 +1137,14 @@ static void build_cpufunctbl (void)
case 68010:
lvl = 1;
tbl = op_smalltbl_4_ff;
#ifdef CPUEMU_11
if (currprefs.cpu_compatible)
tbl = op_smalltbl_11_ff; /* prefetch */
#endif
#ifdef CPUEMU_13
if (currprefs.cpu_cycle_exact)
tbl = op_smalltbl_13_ff; /* prefetch and cycle-exact */
#endif
break;
#endif
#endif
@ -1147,11 +1155,11 @@ static void build_cpufunctbl (void)
tbl = op_smalltbl_5_ff;
#ifdef CPUEMU_11
if (currprefs.cpu_compatible)
tbl = op_smalltbl_11_ff; /* prefetch */
tbl = op_smalltbl_12_ff; /* prefetch */
#endif
#ifdef CPUEMU_12
#ifdef CPUEMU_13
if (currprefs.cpu_cycle_exact)
tbl = op_smalltbl_12_ff; /* prefetch and cycle-exact */
tbl = op_smalltbl_14_ff; /* prefetch and cycle-exact */
#endif
break;
}
@ -1305,9 +1313,9 @@ void check_prefs_changed_cpu (void)
|| currprefs.fpu_no_unimplemented != changed_prefs.fpu_no_unimplemented
|| currprefs.cpu_compatible != changed_prefs.cpu_compatible
|| currprefs.cpu_cycle_exact != changed_prefs.cpu_cycle_exact) {
bool doprefetch = !currprefs.cpu_compatible && changed_prefs.cpu_compatible;
prefs_changed_cpu ();
if (!currprefs.cpu_compatible && changed_prefs.cpu_compatible)
if (doprefetch)
fill_prefetch ();
build_cpufunctbl ();
changed = true;
@ -2210,7 +2218,7 @@ static void exception_debug (int nr)
#endif
}
#ifdef CPUEMU_12
#ifdef CPUEMU_13
/* cycle-exact exception handler, 68000 only */
@ -2350,18 +2358,32 @@ static void Exception_ce000 (int nr)
write_log (_T("Exception %d (%x) at %x -> %x!\n"), nr, last_addr_for_exception_3, currpc, get_long (4 * nr));
goto kludge_me_do;
}
m68k_areg (regs, 7) -= 6;
x_put_word (m68k_areg (regs, 7) + 4, currpc); // write low address
if (interrupt) {
// fetch interrupt vector number
nr = x_get_byte (0x00fffff1 | ((nr - 24) << 1));
x_do_cycles (4 * cpucycleunit);
if (currprefs.cpu_model == 68010) {
// 68010 creates only format 0 and 8 stack frames
m68k_areg (regs, 7) -= 8;
x_put_word (m68k_areg (regs, 7) + 4, currpc); // write low address
if (interrupt) {
// fetch interrupt vector number
nr = x_get_byte (0x00fffff1 | ((nr - 24) << 1));
x_do_cycles (4 * cpucycleunit);
}
x_put_word (m68k_areg (regs, 7) + 0, regs.sr); // write SR
x_put_word (m68k_areg (regs, 7) + 2, currpc >> 16); // write high address
x_put_word (m68k_areg (regs, 7) + 6, nr * 4);
} else {
m68k_areg (regs, 7) -= 6;
x_put_word (m68k_areg (regs, 7) + 4, currpc); // write low address
if (interrupt) {
// fetch interrupt vector number
nr = x_get_byte (0x00fffff1 | ((nr - 24) << 1));
x_do_cycles (4 * cpucycleunit);
}
x_put_word (m68k_areg (regs, 7) + 0, regs.sr); // write SR
x_put_word (m68k_areg (regs, 7) + 2, currpc >> 16); // write high address
}
x_put_word (m68k_areg (regs, 7) + 0, regs.sr); // write SR
x_put_word (m68k_areg (regs, 7) + 2, currpc >> 16); // write high address
kludge_me_do:
newpc = x_get_word (4 * nr) << 16; // read high address
newpc |= x_get_word (4 * nr + 2); // read low address
newpc = x_get_word (regs.vbr + 4 * nr) << 16; // read high address
newpc |= x_get_word (regs.vbr + 4 * nr + 2); // read low address
if (newpc & 1) {
if (nr == 2 || nr == 3)
cpu_halt (2);
@ -2856,8 +2878,8 @@ static void ExceptionX (int nr, uaecptr address)
if (currprefs.cachesize)
regs.instruction_pc = address == -1 ? m68k_getpc () : address;
#endif
#ifdef CPUEMU_12
if (currprefs.cpu_cycle_exact && currprefs.cpu_model == 68000)
#ifdef CPUEMU_13
if (currprefs.cpu_cycle_exact && currprefs.cpu_model <= 68010)
Exception_ce000 (nr);
else
#endif
@ -4109,6 +4131,7 @@ static void m68k_run_1 (void)
}
#endif
do_cycles (cpu_cycles);
r->instruction_pc = m68k_getpc ();
cpu_cycles = (*cpufunctbl[opcode])(opcode);
cpu_cycles = adjust_cycles (cpu_cycles);
if (r->spcflags) {
@ -4125,7 +4148,7 @@ static void m68k_run_1 (void)
#endif /* CPUEMU_11 */
#ifndef CPUEMU_12
#ifndef CPUEMU_13
static void m68k_run_1_ce (void)
{
@ -4200,6 +4223,7 @@ static void m68k_run_1_ce (void)
inprec_playdebug_cpu (1);
}
r->instruction_pc = m68k_getpc ();
(*cpufunctbl[opcode])(opcode);
if (cpu_tracer) {
cputrace.state = 0;
@ -4802,7 +4826,7 @@ static void m68k_run_2p (void)
x_do_cycles (cpu_cycles);
opcode = get_word_020_prefetch (0);
opcode = regs.irc;
count_instr (opcode);
cpu_cycles = (*cpufunctbl[opcode])(opcode);
@ -5028,8 +5052,8 @@ void m68k_go (int may_quit)
run_func = m68k_run_mmu;
} else {
#endif
run_func = currprefs.cpu_cycle_exact && currprefs.cpu_model == 68000 ? m68k_run_1_ce :
currprefs.cpu_compatible && currprefs.cpu_model == 68000 ? m68k_run_1 :
run_func = currprefs.cpu_cycle_exact && currprefs.cpu_model <= 68010 ? m68k_run_1_ce :
currprefs.cpu_compatible && currprefs.cpu_model <= 68010 ? m68k_run_1 :
#ifdef JIT
currprefs.cpu_model >= 68020 && currprefs.cachesize ? m68k_run_jit :
#endif
@ -6414,7 +6438,8 @@ uae_u32 get_word_020_prefetch (int o)
// these are also used by 68030.
#define RESET_CE020_CYCLES \
resetcycles_ce020 ()
regs.ce020memcycles = 0; \
regs.ce020memcycle_data = true;
#define STORE_CE020_CYCLES \
unsigned long cycs = get_cycles ()
#define ADD_CE020_CYCLES \
@ -6890,10 +6915,12 @@ void fill_prefetch_030 (void)
uaecptr pc = m68k_getpc ();
pc &= ~3;
fill_icache030 (pc);
do_cycles_ce020 (2);
if (currprefs.cpu_cycle_exact)
do_cycles_ce020 (2);
regs.prefetch020[0] = regs.cacheholdingdata020;
fill_icache030 (pc + 4);
do_cycles_ce020 (2);
if (currprefs.cpu_cycle_exact)
do_cycles_ce020 (2);
regs.prefetch020[1] = regs.cacheholdingdata020;
regs.irc = get_word_ce030_prefetch (0);
}
@ -6904,10 +6931,12 @@ void fill_prefetch_020 (void)
uae_u32 (*fetch)(uaecptr) = currprefs.cpu_cycle_exact ? mem_access_delay_longi_read_ce020 : get_longi;
pc &= ~3;
fill_icache020 (pc, fetch);
do_cycles_ce020 (2);
if (currprefs.cpu_cycle_exact)
do_cycles_ce020 (2);
regs.prefetch020[0] = regs.cacheholdingdata020;
fill_icache020 (pc + 4, fetch);
do_cycles_ce020 (2);
if (currprefs.cpu_cycle_exact)
do_cycles_ce020 (2);
regs.prefetch020[1] = regs.cacheholdingdata020;
regs.irc = get_word_020_prefetch (0);
}

View File

@ -167,18 +167,21 @@ bool preinit_shm (void)
if (size64 > MAXZ3MEM32)
size64 = MAXZ3MEM32;
}
if (maxmem < 0)
if (maxmem < 0) {
size64 = MAXZ3MEM64;
else if (maxmem > 0)
if (!os_64bit) {
if (totalphys64 < 1536 * 1024 * 1024)
max_allowed_mman = 256;
if (max_allowed_mman < 256)
max_allowed_mman = 256;
}
} else if (maxmem > 0) {
size64 = maxmem * 1024 * 1024;
}
if (size64 < 8 * 1024 * 1024)
size64 = 8 * 1024 * 1024;
if (max_allowed_mman * 1024 * 1024 > size64)
max_allowed_mman = size64 / (1024 * 1024);
if (!os_64bit) {
if (max_allowed_mman * 1024 * 1024 > (totalphys64 / 2))
max_allowed_mman = (totalphys64 / 2) / (1024 * 1024);
}
natmem_size = (max_allowed_mman + 1) * 1024 * 1024;
if (natmem_size < 17 * 1024 * 1024)

View File

@ -377,6 +377,7 @@
#define IDS_JOYMODE_WHEELMOUSE 389
#define IDD_ERRORLOG 389
#define IDS_NUMSG_KS68030PLUS 390
#define IDD_DISKINFO 390
#define IDS_SELECTTAPE 391
#define IDS_TAPE 392
#define IDS_QS_MODELS 1000
@ -1100,6 +1101,7 @@
#define IDC_DD_SURFACETYPE 1791
#define IDC_RTG_SCALE_ALLOW 1791
#define IDC_CPU_FREQUENCY 1791
#define IDC_LOGENABLE2 1791
#define IDC_RTG_SCALE_ASPECTRATIO 1792
#define IDC_ASSOCIATE_ON 1792
#define IDC_DD_SURFACETYPE2 1792
@ -1158,6 +1160,8 @@
#define IDC_TAPE_RW 1834
#define IDC_ERRORLOGMESSAGE 1835
#define IDC_ERRORLOGCLEAR 1836
#define IDC_DISKINFOBOX 1837
#define IDC_SAVEBOOTBLOCK 1838
#define ID__FLOPPYDRIVES 40004
#define ID_FLOPPYDRIVES_DF0 40005
#define ID_ST_CONFIGURATION 40010
@ -1206,9 +1210,9 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NO_MFC 1
#define _APS_3D_CONTROLS 1
#define _APS_NEXT_RESOURCE_VALUE 390
#define _APS_NEXT_RESOURCE_VALUE 391
#define _APS_NEXT_COMMAND_VALUE 40050
#define _APS_NEXT_CONTROL_VALUE 1837
#define _APS_NEXT_CONTROL_VALUE 1839
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

View File

@ -1,7 +1,7 @@
// Microsoft Visual C++ generated resource script.
//
#include "winres.h"
#include "resource.h"
#include "winres.h"
/////////////////////////////////////////////////////////////////////////////
// English resources
@ -922,10 +922,11 @@ BEGIN
CONTROL "Use relative paths",IDC_PATHS_RELATIVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,199,231,189,11
EDITTEXT IDC_LOGPATH,7,281,324,13,ES_READONLY
PUSHBUTTON "Open [] Open selected file.",IDC_LOGOPEN,337,280,51,14
COMBOBOX IDC_LOGSELECT,7,263,169,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
CONTROL "Enable full logging (temporary)",IDC_LOGENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,186,264,140,12
COMBOBOX IDC_LOGSELECT,7,263,137,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
CONTROL "Enable full logging",IDC_LOGENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,151,264,93,12
PUSHBUTTON "Save All [] Save and open both logs and config file.",IDC_LOGSAVE,337,264,51,14
GROUPBOX "Debug logging",IDC_STATIC,1,248,393,53
CONTROL "Log window",IDC_LOGENABLE2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,254,264,68,12
END
IDD_QUICKSTART DIALOGEX 0, 0, 396, 262
@ -1156,6 +1157,16 @@ BEGIN
CONTROL "Read/write",IDC_TAPE_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,313,39,67,10
END
IDD_DISKINFO DIALOGEX 0, 0, 491, 323
STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Disk image information"
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
DEFPUSHBUTTON "OK",IDOK,220,303,50,14
EDITTEXT IDC_DISKINFOBOX,5,4,481,292,ES_MULTILINE | ES_READONLY | WS_VSCROLL
PUSHBUTTON "Save bootblock",IDC_SAVEBOOTBLOCK,397,303,89,14,NOT WS_VISIBLE
END
/////////////////////////////////////////////////////////////////////////////
//
@ -1466,6 +1477,10 @@ BEGIN
IDD_TAPEDRIVE, DIALOG
BEGIN
END
IDD_DISKINFO, DIALOG
BEGIN
END
END
#endif // APSTUDIO_INVOKED

View File

@ -33,6 +33,7 @@ del compstbl.cpp
del cpuemu_0.cpp
del cpuemu_11.cpp
del cpuemu_12.cpp
del cpuemu_13.cpp
del cpuemu_20.cpp
del cpuemu_21.cpp
del cpuemu_22.cpp

View File

@ -48,8 +48,8 @@
#define MMUEMU /* Aranym 68040 MMU */
#define FULLMMU /* Aranym 68040 MMU */
#define CPUEMU_0 /* generic 680x0 emulation */
#define CPUEMU_11 /* 68000 prefetch emulation */
#define CPUEMU_12 /* 68000 cycle-exact cpu&blitter */
#define CPUEMU_11 /* 68000/68010 prefetch emulation */
#define CPUEMU_13 /* 68000/68010 cycle-exact cpu&blitter */
#define CPUEMU_20 /* 68020 prefetch */
#define CPUEMU_21 /* 68020 "cycle-exact" + blitter */
#define CPUEMU_22 /* 68030 (040/060) "cycle-exact" + blitter */
@ -90,7 +90,7 @@
#define OPENGL
#endif
#define CAPS
#define CPUEMU_12
#define CPUEMU_13
#define CPUEMU_11

View File

@ -19,11 +19,11 @@
#define LANG_DLL 1
#if WINUAEPUBLICBETA
#define WINUAEBETA _T("9")
#define WINUAEBETA _T("10")
#else
#define WINUAEBETA _T("")
#endif
#define WINUAEDATE MAKEBD(2013, 10, 20)
#define WINUAEDATE MAKEBD(2013, 10, 26)
#define WINUAEEXTRA _T("")
//#define WINUAEEXTRA _T("AmiKit Preview")
//#define WINUAEEXTRA _T("Amiga Forever Edition")

View File

@ -267,6 +267,36 @@ static void hide (HWND hDlg, DWORD id, int hide)
ShowWindow (w, hide ? SW_HIDE : SW_SHOW);
}
static int stringboxdialogactive;
static INT_PTR CALLBACK StringBoxDialogProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
PostQuitMessage (0);
return TRUE;
case WM_CLOSE:
stringboxdialogactive = 0;
DestroyWindow (hDlg);
return TRUE;
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
switch (LOWORD (wParam))
{
case IDOK:
stringboxdialogactive = -1;
DestroyWindow (hDlg);
return TRUE;
case IDCANCEL:
stringboxdialogactive = 0;
DestroyWindow (hDlg);
return TRUE;
}
break;
}
return FALSE;
}
static int CALLBACK BrowseForFolderCallback (HWND hwnd, UINT uMsg, LPARAM lp, LPARAM pData)
{
@ -2018,45 +2048,71 @@ static void eject_cd (void)
}
}
static void infofloppy (int n)
static void infofloppy (HWND hDlg, int n)
{
struct diskinfo di;
FILE *f;
TCHAR tmp[MAX_DPATH], tmp2[MAX_DPATH];
TCHAR tmp2[MAX_DPATH];
TCHAR text[20000];
DISK_examine_image (&workprefs, n, &di);
tmp[0] = 0;
if (GetTempPath (MAX_DPATH, tmp) <= 0)
return;
_tcscat (tmp, _T("floppy_info.txt"));
f = _tfopen (tmp, _T("wt, ccs=UTF-8"));
if (f) {
_stprintf (tmp2,
_T("'%s'\r\nDisk readable: %s\r\nCRC32: %08X\r\nBoot block checksum valid: %s\r\nBoot block type: %s\r\n"),
workprefs.floppyslots[n].df,
di.unreadable ? _T("No") : _T("Yes"),
di.crc32,
di.bb_crc_valid ? _T("Yes") : _T("No"),
di.bootblocktype == 0 ? _T("Custom") : (di.bootblocktype == 1 ? _T("Standard 1.x") : _T("Standard 2.x+"))
);
_tcscpy (text, tmp2);
if (di.diskname[0]) {
_stprintf (tmp2,
_T("\nDisk readable: %s\nCRC32: %08X\nBoot block checksum valid: %s\n\n"),
di.unreadable ? _T("No") : _T("Yes"),
di.crc32,
di.bb_crc_valid ? _T("Yes") : _T("No")
);
fputws (tmp2, f);
int w = 32;
for (int i = 0; i < 1024; i += w) {
for (int j = 0; j < w; j++) {
uae_u8 b = di.bootblock[i + j];
_stprintf (tmp2 + j * 2, _T("%02X"), b);
if (b >= 32 && b < 127)
tmp2[w * 2 + 1 + j] = (TCHAR)b;
else
tmp2[w * 2 + 1 + j] = '.';
}
tmp2[w * 2] = ' ';
tmp2[w * 2 + 1 + w] = 0;
fputws (tmp2, f);
fputws (_T("\n"), f);
}
fclose (f);
ShellExecute (NULL, _T("open"), tmp, NULL, NULL, SW_SHOWNORMAL);
_T("Label: '%s'\r\n"), di.diskname);
_tcscat (text, tmp2);
}
_tcscat (text, _T("\r\n"));
int w = 32;
for (int i = 0; i < 1024; i += w) {
for (int j = 0; j < w; j++) {
uae_u8 b = di.bootblock[i + j];
_stprintf (tmp2 + j * 2, _T("%02X"), b);
if (b >= 32 && b < 127)
tmp2[w * 2 + 1 + j] = (TCHAR)b;
else
tmp2[w * 2 + 1 + j] = '.';
}
tmp2[w * 2] = ' ';
tmp2[w * 2 + 1 + w] = 0;
_tcscat (text, tmp2);
_tcscat (text, _T("\r\n"));
}
stringboxdialogactive = 1;
HWND hwnd = CustomCreateDialog (IDD_DISKINFO, hDlg, StringBoxDialogProc);
if (hwnd == NULL)
return;
HFONT font = CreateFont (12, 0, 0, 0, 0, 0, 0, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, _T("Lucida Console"));
if (font)
SendMessage (GetDlgItem (hwnd, IDC_DISKINFOBOX), WM_SETFONT, WPARAM(font), FALSE);
SendMessage (GetDlgItem (hwnd, IDC_DISKINFOBOX), WM_SETTEXT, 0, (LPARAM)text);
while (stringboxdialogactive == 1) {
MSG msg;
int ret;
WaitMessage ();
while ((ret = GetMessage (&msg, NULL, 0, 0))) {
if (ret == -1)
break;
if (!IsWindow (hwnd) || !IsDialogMessage (hwnd, &msg)) {
TranslateMessage (&msg);
DispatchMessage (&msg);
}
}
if (stringboxdialogactive == -1)
break;
}
DeleteObject (font);
}
static void ejectfloppy (int n)
@ -5137,6 +5193,11 @@ static INT_PTR CALLBACK PathsDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM
SendDlgItemMessage (hDlg, IDC_LOGSELECT, CB_SETCURSEL, 0, 0);
CheckDlgButton (hDlg, IDC_LOGENABLE, winuaelog_temporary_enable || (full_property_sheet == 0 && currprefs.win32_logfile));
ew (hDlg, IDC_LOGENABLE, winuaelog_temporary_enable == false && full_property_sheet);
extern int consoleopen;
if (consoleopen || !full_property_sheet) {
CheckDlgButton (hDlg, IDC_LOGENABLE2, consoleopen ? TRUE : FALSE);
ew (hDlg, IDC_LOGENABLE2, FALSE);
}
values_to_pathsdialog (hDlg);
recursive--;
return TRUE;
@ -5172,6 +5233,10 @@ static INT_PTR CALLBACK PathsDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM
case IDC_LOGENABLE:
winuaelog_temporary_enable = ischecked (hDlg, IDC_LOGENABLE);
break;
case IDC_LOGENABLE2:
extern int console_logging;
console_logging = 1;
break;
case IDC_LOGOPEN:
flush_log ();
val = SendDlgItemMessage (hDlg, IDC_LOGSELECT, CB_GETCURSEL, 0, 0L);
@ -5873,7 +5938,7 @@ static void enable_for_chipsetdlg (HWND hDlg)
{
int enable = workprefs.cpu_cycle_exact ? FALSE : TRUE;
#if !defined (CPUEMU_12)
#if !defined (CPUEMU_13)
ew (hDlg, IDC_CYCLEEXACT, FALSE);
#endif
ew (hDlg, IDC_GENLOCK, full_property_sheet);
@ -8822,10 +8887,8 @@ static void values_from_cpudlg (HWND hDlg)
#ifdef JIT
oldcache = workprefs.cachesize;
jitena = ischecked (hDlg, IDC_JITENABLE) ? 1 : 0;
jitena = (ischecked (hDlg, IDC_JITENABLE) ? 1 : 0) && !workprefs.address_space_24 && workprefs.cpu_model >= 68020;
workprefs.cachesize = SendMessage (GetDlgItem (hDlg, IDC_CACHE), TBM_GETPOS, 0, 0) * 1024;
if (!workprefs.cachesize)
setchecked (hDlg, IDC_JITENABLE, false);
if (!jitena) {
cachesize_prev = workprefs.cachesize;
trust_prev = workprefs.comptrustbyte;
@ -8843,6 +8906,8 @@ static void values_from_cpudlg (HWND hDlg)
workprefs.comptrustlong = trust_prev;
workprefs.comptrustnaddr = trust_prev;
}
if (!workprefs.cachesize)
setchecked (hDlg, IDC_JITENABLE, false);
if (oldcache == 0 && candirect && workprefs.cachesize > 0)
canbang = 1;
#endif
@ -11331,17 +11396,17 @@ static INT_PTR CALLBACK FloppyDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARA
break;
case IDC_INFO0:
case IDC_INFO0Q:
infofloppy (0);
infofloppy (hDlg, 0);
break;
case IDC_INFO1:
case IDC_INFO1Q:
infofloppy (1);
infofloppy (hDlg, 1);
break;
case IDC_INFO2:
infofloppy (2);
infofloppy (hDlg, 2);
break;
case IDC_INFO3:
infofloppy (3);
infofloppy (hDlg, 3);
break;
case IDC_EJECT0:
case IDC_EJECT0Q:
@ -11786,7 +11851,7 @@ static int joys[] = { IDC_PORT0_JOYS, IDC_PORT1_JOYS, IDC_PORT2_JOYS, IDC_PORT3_
static int joysm[] = { IDC_PORT0_JOYSMODE, IDC_PORT1_JOYSMODE, -1, -1 };
static int joysaf[] = { IDC_PORT0_AF, IDC_PORT1_AF, -1, -1 };
static void updatejoyport (HWND hDlg)
static void updatejoyport (HWND hDlg, int changedport)
{
int i, j;
TCHAR tmp[MAX_DPATH], tmp2[MAX_DPATH];
@ -11856,40 +11921,9 @@ static void updatejoyport (HWND hDlg)
}
}
static void fixjport (struct jport *port, int v)
static void values_from_gameportsdlg (HWND hDlg, int d, int changedport)
{
int vv = port->id;
if (vv == JPORT_CUSTOM || vv == JPORT_NONE)
return;
if (vv != v)
return;
if (vv >= JSEM_JOYS && vv < JSEM_MICE) {
vv -= JSEM_JOYS;
vv++;
if (vv >= inputdevice_get_device_total (IDTYPE_JOYSTICK))
vv = 0;
vv += JSEM_JOYS;
}
if (vv >= JSEM_MICE && vv < JSEM_END) {
vv -= JSEM_MICE;
vv++;
if (vv >= inputdevice_get_device_total (IDTYPE_MOUSE))
vv = 0;
vv += JSEM_MICE;
}
if (vv >= JSEM_KBDLAYOUT && vv < JSEM_LASTKBD) {
vv -= JSEM_KBDLAYOUT;
vv++;
if (vv >= JSEM_LASTKBD)
vv = 0;
vv += JSEM_KBDLAYOUT;
}
port->id = vv;
}
static void values_from_gameportsdlg (HWND hDlg, int d)
{
int i, j, success;
int i, success;
int changed = 0;
if (d) {
@ -11948,15 +11982,8 @@ static void values_from_gameportsdlg (HWND hDlg, int d)
if (*port != prevport)
changed = 1;
}
if (changed) {
for (i = 0; i < MAX_JPORTS; i++) {
for (j = 0; j < MAX_JPORTS; j++) {
if (j != i)
fixjport (&workprefs.jports[i], workprefs.jports[j].id);
}
}
}
if (changed)
inputdevice_validate_jports (&workprefs, changedport);
}
static int midi2dev (struct midiportinfo **mid, int idx, int def)
@ -12278,11 +12305,12 @@ static void processport (HWND hDlg, bool reset, int port)
{
if (reset)
inputdevice_compa_clear (&workprefs, port);
values_from_gameportsdlg (hDlg, 0);
values_from_gameportsdlg (hDlg, 0, port);
enable_for_gameportsdlg (hDlg);
updatejoyport (hDlg);
updatejoyport (hDlg, port);
inputdevice_updateconfig (NULL, &workprefs);
inputdevice_config_change ();
reset_inputdevice_config (&workprefs);
}
/* Handle messages for the Joystick Settings page of our property-sheet */
@ -12354,13 +12382,13 @@ static INT_PTR CALLBACK GamePortsDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LP
inputdevice_updateconfig (NULL, &workprefs);
enable_for_gameportsdlg (hDlg);
updatejoyport (hDlg);
updatejoyport (hDlg, -1);
recursive--;
break;
case WM_USER:
recursive++;
enable_for_gameportsdlg (hDlg);
updatejoyport (hDlg);
updatejoyport (hDlg, -1);
recursive--;
return TRUE;
@ -12374,23 +12402,23 @@ static INT_PTR CALLBACK GamePortsDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LP
joyxprevious[0] = joyxprevious[1];
joyxprevious[1] = temp;
enable_for_gameportsdlg (hDlg);
updatejoyport (hDlg);
updatejoyport (hDlg, -1);
} else if (LOWORD (wParam) == IDC_PORT0_REMAP) {
ports_remap (hDlg, 0);
enable_for_gameportsdlg (hDlg);
updatejoyport (hDlg);
updatejoyport (hDlg, -1);
} else if (LOWORD (wParam) == IDC_PORT1_REMAP) {
ports_remap (hDlg, 1);
enable_for_gameportsdlg (hDlg);
updatejoyport (hDlg);
updatejoyport (hDlg, -1);
} else if (LOWORD (wParam) == IDC_PORT2_REMAP) {
ports_remap (hDlg, 2);
enable_for_gameportsdlg (hDlg);
updatejoyport (hDlg);
updatejoyport (hDlg, -1);
} else if (LOWORD (wParam) == IDC_PORT3_REMAP) {
ports_remap (hDlg, 3);
enable_for_gameportsdlg (hDlg);
updatejoyport (hDlg);
updatejoyport (hDlg, -1);
} else if (HIWORD (wParam) == CBN_SELCHANGE) {
switch (LOWORD (wParam))
{
@ -12422,7 +12450,7 @@ static INT_PTR CALLBACK GamePortsDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LP
}
}
} else {
values_from_gameportsdlg (hDlg, 1);
values_from_gameportsdlg (hDlg, 1, -1);
enable_for_gameportsdlg (hDlg);
}
recursive--;
@ -12444,6 +12472,7 @@ static INT_PTR CALLBACK IOPortsDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPAR
currentpage = IOPORTS_ID;
init_portsdlg (hDlg);
inputdevice_updateconfig (NULL, &workprefs);
reset_inputdevice_config (&workprefs);
enable_for_portsdlg (hDlg);
values_to_portsdlg (hDlg);
recursive--;
@ -12526,37 +12555,6 @@ static void values_to_inputdlg (HWND hDlg)
CheckDlgButton (hDlg, IDC_INPUTDEVICEDISABLE, (!input_total_devices || inputdevice_get_device_status (input_selected_device)) ? BST_CHECKED : BST_UNCHECKED);
}
static int stringboxdialogactive;
static INT_PTR CALLBACK StringBoxDialogProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
PostQuitMessage (0);
return TRUE;
case WM_CLOSE:
stringboxdialogactive = 0;
DestroyWindow (hDlg);
return TRUE;
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
switch (LOWORD (wParam))
{
case IDOK:
stringboxdialogactive = -1;
DestroyWindow (hDlg);
return TRUE;
case IDCANCEL:
stringboxdialogactive = 0;
DestroyWindow (hDlg);
return TRUE;
}
break;
}
return FALSE;
}
static int askinputcustom (HWND hDlg, TCHAR *custom, int maxlen, DWORD titleid)
{
HWND hwnd;

View File

@ -590,6 +590,7 @@
<ClCompile Include="..\..\archivers\zip\unzip.cpp" />
<ClCompile Include="..\..\aros.rom.cpp" />
<ClCompile Include="..\..\calc.cpp" />
<ClCompile Include="..\..\cpuemu_13.cpp" />
<ClCompile Include="..\..\cpuemu_21.cpp" />
<ClCompile Include="..\..\cpuemu_22.cpp" />
<ClCompile Include="..\..\cpuemu_32.cpp" />
@ -693,7 +694,6 @@
<ClCompile Include="..\..\cpudefs.cpp" />
<ClCompile Include="..\..\cpuemu_0.cpp" />
<ClCompile Include="..\..\cpuemu_11.cpp" />
<ClCompile Include="..\..\cpuemu_12.cpp" />
<ClCompile Include="..\..\cpuemu_20.cpp" />
<ClCompile Include="..\..\cpuemu_31.cpp" />
<ClCompile Include="..\..\cpummu.cpp" />

View File

@ -244,9 +244,6 @@
<ClCompile Include="..\..\cpuemu_11.cpp">
<Filter>common</Filter>
</ClCompile>
<ClCompile Include="..\..\cpuemu_12.cpp">
<Filter>common</Filter>
</ClCompile>
<ClCompile Include="..\..\cpuemu_20.cpp">
<Filter>common</Filter>
</ClCompile>
@ -628,6 +625,9 @@
<ClCompile Include="..\..\luascript.cpp">
<Filter>common</Filter>
</ClCompile>
<ClCompile Include="..\..\cpuemu_13.cpp">
<Filter>common</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="..\resources\35floppy.ico">

View File

@ -63,7 +63,7 @@
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v110</PlatformToolset>
<PlatformToolset>v120</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='FullRelease|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
@ -785,6 +785,7 @@
<ClCompile Include="..\..\archivers\zip\unzip.cpp" />
<ClCompile Include="..\..\aros.rom.cpp" />
<ClCompile Include="..\..\calc.cpp" />
<ClCompile Include="..\..\cpuemu_13.cpp" />
<ClCompile Include="..\..\cpuemu_21.cpp" />
<ClCompile Include="..\..\cpuemu_22.cpp" />
<ClCompile Include="..\..\cpuemu_32.cpp" />
@ -888,7 +889,6 @@
<ClCompile Include="..\..\cpudefs.cpp" />
<ClCompile Include="..\..\cpuemu_0.cpp" />
<ClCompile Include="..\..\cpuemu_11.cpp" />
<ClCompile Include="..\..\cpuemu_12.cpp" />
<ClCompile Include="..\..\cpuemu_20.cpp" />
<ClCompile Include="..\..\cpuemu_31.cpp" />
<ClCompile Include="..\..\cpummu.cpp" />

View File

@ -244,9 +244,6 @@
<ClCompile Include="..\..\cpuemu_11.cpp">
<Filter>common</Filter>
</ClCompile>
<ClCompile Include="..\..\cpuemu_12.cpp">
<Filter>common</Filter>
</ClCompile>
<ClCompile Include="..\..\cpuemu_20.cpp">
<Filter>common</Filter>
</ClCompile>
@ -628,6 +625,9 @@
<ClCompile Include="..\..\luascript.cpp">
<Filter>common</Filter>
</ClCompile>
<ClCompile Include="..\..\cpuemu_13.cpp">
<Filter>common</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="..\resources\35floppy.ico">