From b30346f8f643d5e0b1e3ef9cfc9d3b85eef705ef Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sat, 22 Jul 2006 16:24:21 +0300 Subject: [PATCH] imported winuaesrc1310b2.zip --- ar.c | 4 +- custom.c | 1 - debug.c | 322 +++++++++++++++++++++++++---------- expansion.c | 4 +- include/memory.h | 2 + include/options.h | 1 - main.c | 8 - moduleripper.c | 8 +- newcpu.c | 5 +- od-win32/avioutput.c | 39 ++++- od-win32/avioutput.h | 5 +- od-win32/resources/winuae.rc | 2 - od-win32/win32gui.c | 120 +++++++++---- 13 files changed, 378 insertions(+), 143 deletions(-) diff --git a/ar.c b/ar.c index 56698a27..d3364034 100755 --- a/ar.c +++ b/ar.c @@ -755,7 +755,7 @@ typedef struct { uae_u8 dummy[4+4]; uae_u8 jmps[3*4]; uae_u32 mon_size; - uae_u16 col0, col1; + uae_u8 col0h, col0l, col1h, col1l; uae_u8 right; uae_u8 keyboard; uae_u8 key; @@ -1451,6 +1451,8 @@ static void hrtmon_configure(void) HRTCFG *cfg = (HRTCFG*)hrtmemory; if (ar1200 || armodel || !cfg) return; + cfg->col0h = 0x00; cfg->col0l = 0x5a; + cfg->col1h = 0x0f; cfg->col1l = 0xff; cfg->a1200 = (currprefs.chipset_mask & CSMASK_AGA) ? 1 : 0; cfg->aga = (currprefs.chipset_mask & CSMASK_AGA) ? 1 : 0; cfg->cd32 = cd32_enabled; diff --git a/custom.c b/custom.c index 6f8f2b10..c4645ce7 100755 --- a/custom.c +++ b/custom.c @@ -5435,7 +5435,6 @@ void check_prefs_changed_custom (void) } currprefs.immediate_blits = changed_prefs.immediate_blits; currprefs.collision_level = changed_prefs.collision_level; - currprefs.fast_copper = changed_prefs.fast_copper; if (currprefs.chipset_mask != changed_prefs.chipset_mask || currprefs.gfx_vsync != changed_prefs.gfx_vsync || diff --git a/debug.c b/debug.c index 69fff18b..383b9e12 100755 --- a/debug.c +++ b/debug.c @@ -4,6 +4,7 @@ * Debugger * * (c) 1995 Bernd Schmidt + * (c) 2006 Toni Wilen * */ @@ -98,6 +99,8 @@ static char help[] = { " O Offset a bitplane\n" " H[H] Show PC history (HH=full CPU info) instructions\n" " C Search for values like energy or lifes in games\n" + " Cl List currently found trainer addresses\n" + " D Deep trainer\n" " W
Write into Amiga memory\n" " w
[]\n" " Add/remove memory watchpoints\n" @@ -216,30 +219,64 @@ static int next_string (char **c, char *out, int max, int forceupper) return strlen (out); } -static uae_u32 nextaddr (uae_u32 addr) +static uae_u32 lastaddr (void) +{ + if (currprefs.z3fastmem_size) + return z3fastmem_start + currprefs.fastmem_size; + if (currprefs.bogomem_size) + return bogomem_start + currprefs.bogomem_size; + if (currprefs.fastmem_size) + return fastmem_start + currprefs.fastmem_size; + return currprefs.chipmem_size; +} + +static uaecptr nextaddr (uaecptr addr, uaecptr *end) { if (addr == 0xffffffff) { - if (currprefs.bogomem_size) - return 0xc00000 + currprefs.bogomem_size; - if (currprefs.fastmem_size) - return 0x200000 + currprefs.fastmem_size; - return currprefs.chipmem_size; + if (end) + *end = currprefs.chipmem_size; + return 0; } + addr++; if (addr == currprefs.chipmem_size) { - if (currprefs.fastmem_size) - return 0x200000; - else if (currprefs.bogomem_size) - return 0xc00000; + if (currprefs.fastmem_size) { + if (end) + *end = fastmem_start + currprefs.fastmem_size; + return fastmem_start; + } else if (currprefs.bogomem_size) { + if (end) + *end = bogomem_start + currprefs.bogomem_size; + return bogomem_start; + } else if (currprefs.z3fastmem_size) { + if (end) + *end = z3fastmem_start + currprefs.z3fastmem_size; + return z3fastmem_start; + } return 0xffffffff; } - if (addr == 0x200000 + currprefs.fastmem_size) { - if (currprefs.bogomem_size) - return 0xc00000; + if (addr == fastmem_start + currprefs.fastmem_size) { + if (currprefs.bogomem_size) { + if (end) + *end = fastmem_start + currprefs.bogomem_size; + return bogomem_start; + } else if (currprefs.z3fastmem_size) { + if (end) + *end = z3fastmem_start + currprefs.z3fastmem_size; + return z3fastmem_start; + } + return 0xffffffff; + } + if (addr == bogomem_start + currprefs.bogomem_size) { + if (currprefs.z3fastmem_size) { + if (end) + *end = z3fastmem_start + currprefs.z3fastmem_size; + return z3fastmem_start; + } return 0xffffffff; } - if (addr == 0xc00000 + currprefs.bogomem_size) + if (addr == z3fastmem_start + currprefs.z3fastmem_size) return 0xffffffff; - return addr + 1; + return addr; } static void dumpmem (uaecptr addr, uaecptr *nxmem, int lines) @@ -544,6 +581,124 @@ static int copper_debugger (char **c) } #define MAX_CHEAT_VIEW 100 +struct trainerstruct { + uaecptr addr; + int size; +}; + +static struct trainerstruct *trainerdata; +static int totaltrainers; + +static void clearcheater(void) +{ + if (!trainerdata) + trainerdata = xmalloc(MAX_CHEAT_VIEW * sizeof (struct trainerstruct)); + memset(trainerdata, 0, sizeof (struct trainerstruct) * MAX_CHEAT_VIEW); + totaltrainers = 0; +} +static int addcheater(uaecptr addr, int size) +{ + if (totaltrainers >= MAX_CHEAT_VIEW) + return 0; + trainerdata[totaltrainers].addr = addr; + trainerdata[totaltrainers].size = size; + totaltrainers++; + return 1; +} +static void listcheater(int mode) +{ + int i, skip; + + if (!trainerdata) + return; + if (mode) + skip = 6; + else + skip = 8; + for(i = 0; i < totaltrainers; i++) { + struct trainerstruct *ts = &trainerdata[i]; + uae_u8 b = get_byte(ts->addr); + if (mode) + console_out("%08.8X=%2.2X ", ts->addr, b, b); + else + console_out("%08.8X ", ts->addr); + if ((i % skip) == skip) + console_out("\n"); + } +} + +static void deepcheatsearch (char v) +{ + static int first = 1; + static uae_u8 *memtmp; + static int memsize, memsize2; + uae_u8 *p1, *p2; + uaecptr addr, end; + int i, wasmodified; + int addrcnt, cnt; + + if (!memtmp || v == 'S') { + first = 1; + xfree(memtmp); + memsize = 0; + addr = 0xffffffff; + while ((addr = nextaddr(addr, &end)) != 0xffffffff) { + memsize += end - addr; + addr = end - 1; + } + memsize2 = (memsize + 7) / 8; + memtmp = xmalloc (memsize + memsize2); + if (!memtmp) + return; + memset (memtmp + memsize, 0xff, memsize2); + p1 = memtmp; + addr = 0xffffffff; + while ((addr = nextaddr(addr, &end)) != 0xffffffff) { + for (i = addr; i < end; i++) + *p1++ = get_byte (i); + addr = end - 1; + } + console_out("deep trainer first pass complete.\n"); + return; + } + wasmodified = v == 'X' ? 0 : 1; + p1 = memtmp; + p2 = memtmp + memsize; + addrcnt = 0; + cnt = 0; + addr = 0xffffffff; + while ((addr = nextaddr(addr, NULL)) != 0xffffffff) { + uae_u8 b = get_byte (addr); + int addroff = addrcnt >> 3; + int addrmask = 1 << (addrcnt & 7); + if (p2[addroff] & addrmask) { + if ((wasmodified && b == *p1) || (!wasmodified && b != *p1)) + p2[addroff] &= ~addrmask; + else + cnt++; + } + *p1++ = b; + addrcnt++; + } + console_out ("%d addresses found\n", cnt); + if (cnt <= MAX_CHEAT_VIEW) { + clearcheater(); + cnt = 0; + addrcnt = 0; + while ((addr = nextaddr(addr, NULL)) != 0xffffffff) { + int addroff = addrcnt >> 3; + int addrmask = 1 << (addrcnt & 7); + if (p2[addroff] & addrmask) + addcheater(addr, 1); + addrcnt++; + cnt++; + } + listcheater(1); + } else { + console_out("Now continue with 'g' and use 'D' again after you have lost another life\n"); + } +} + /* cheat-search by Toni Wilen (originally by Holger Jakob) */ static void cheatsearch (char **c) { @@ -551,11 +706,21 @@ static void cheatsearch (char **c) static int listsize; static int first = 1; static int size = 1; - uae_u32 p, val, memcnt, prevmemcnt; + uae_u32 val, memcnt, prevmemcnt; int i, count, vcnt, memsize; + uaecptr addr, end; - memsize = allocated_chipmem + allocated_bogomem + allocated_fastmem; + memsize = 0; + addr = 0xffffffff; + while ((addr = nextaddr(addr, &end)) != 0xffffffff) { + memsize += end - addr; + addr = end - 1; + } + if (toupper(**c) == 'L') { + listcheater(1); + return; + } ignore_ws (c); if (!more_params(c)) { first = 1; @@ -565,7 +730,7 @@ static void cheatsearch (char **c) vlist = xcalloc (listsize >> 3, 1); return; } - val = readhex (c); + val = readint (c); if (first) { ignore_ws (c); if (val > 255) @@ -590,51 +755,45 @@ static void cheatsearch (char **c) count = 0; vcnt = 0; - for (prevmemcnt = memcnt = 0; memcnt < memsize - size && memcnt < listsize; memcnt++) { - p = memcnt; - if (memcnt >= allocated_chipmem + allocated_bogomem && memcnt < allocated_chipmem + allocated_bogomem + allocated_fastmem) - p = 0x200000 + memcnt - (allocated_chipmem + allocated_bogomem); - if (memcnt >= allocated_chipmem && memcnt < allocated_chipmem + allocated_bogomem) - p = 0xc00000 + memcnt - (allocated_chipmem); - - for (i = 0; i < size; i++) { - if (get_byte(p + i) != val >> ((size - i - 1) << 8)) - break; - } - if (i == size) { - int voffset = memcnt >> 3; - int vmask = 1 << (memcnt & 7); - if (!first) { - while (prevmemcnt < memcnt) { - vlist[prevmemcnt >> 3] &= ~(1 << (prevmemcnt & 7)); - prevmemcnt++; - } - if (vlist[voffset] & vmask) { - count++; - if (vcnt < MAX_CHEAT_VIEW) { - console_out ("%08x ", p); - vcnt++; - if (!(vcnt % 8)) - console_out("\n"); + clearcheater(); + addr = 0xffffffff; + prevmemcnt = memcnt = 0; + while ((addr = nextaddr(addr, &end)) != 0xffffffff) { + if (addr + size < end) { + for (i = 0; i < size; i++) { + if (get_byte(addr + i) != val >> ((size - i - 1) << 8)) + break; + } + if (i == size) { + int voffset = memcnt >> 3; + int vmask = 1 << (memcnt & 7); + if (!first) { + while (prevmemcnt < memcnt) { + vlist[prevmemcnt >> 3] &= ~(1 << (prevmemcnt & 7)); + prevmemcnt++; } + if (vlist[voffset] & vmask) { + count++; + addcheater(addr, size); + } else { + vlist[voffset] &= ~vmask; + } + prevmemcnt = memcnt + 1; } else { - vlist[voffset] &= ~vmask; + vlist[voffset] |= vmask; + count++; } - prevmemcnt = memcnt + 1; - } else { - vlist[voffset] |= vmask; - count++; } } + memcnt++; } if (!first) { while (prevmemcnt < memcnt) { vlist[prevmemcnt >> 3] &= ~(1 << (prevmemcnt & 7)); prevmemcnt++; } + listcheater(0); } - if (!first && (vcnt % 8)) - console_out ("\n"); console_out ("Found %d possible addresses with 0x%x (%u) (%d bytes)\n", count, val, val, size); console_out ("Now continue with 'g' and use 'C' with a different value\n"); first = 0; @@ -1098,7 +1257,7 @@ static void writeintomem (char **c) static void memory_map_dump (void) { - int i, j, k, max; + int i, j, max; addrbank *a1 = mem_banks[0]; max = currprefs.address_space_24 ? 256 : 65536; @@ -1324,14 +1483,14 @@ static void searchmem (char **cc) return; ignore_ws (cc); addr = 0; - endaddr = nextaddr (0xffffffff); + endaddr = lastaddr (); if (more_params (cc)) { addr = readhex (cc); if (more_params (cc)) endaddr = readhex (cc); } console_out ("Searching from %08x to %08x..\n", addr, endaddr); - while (addr < endaddr && addr != 0xffffffff) { + while ((addr = nextaddr (addr, NULL)) != 0xffffffff) { for (i = 0; i < sslen; i++) { uae_u8 b = get_byte (addr + i); if (stringmode) { @@ -1350,7 +1509,6 @@ static void searchmem (char **cc) break; } } - addr = nextaddr (addr); } if (!got) console_out ("nothing found"); @@ -1407,42 +1565,30 @@ end: disk_debug_track); } -static uae_u32 memory_counter(int reset) -{ - static uae_u32 p; - if (reset) { - p = 0xffffffff; - return 0; - } - p++; - if (p == allocated_chipmem) - p = 0x200000; - if (p == allocated_fastmem + 0x200000) - p = 0xc00000; - if (p == allocated_bogomem + 0xc00000) - p = 0xffffffff; - return p; -} - static void find_ea (char **inptr) { - uae_u32 ea, sea, dea, start, end; - int i; + uae_u32 ea, sea, dea; + uaecptr addr, end, endbank; - start = 0; - end = allocated_chipmem; + addr = 0; + end = lastaddr(); ea = readhex (inptr); - if (more_params(inptr)) - start = readhex (inptr); - if (more_params(inptr)) - end = readhex (inptr); - memory_counter(1); - while ((i = memory_counter(0)) != 0xffffffff) { - sea = 0xffffffff; - dea = 0xffffffff; - m68k_disasm_ea (NULL, i, NULL, 1, &sea, &dea); - if (ea == sea || ea == dea) - m68k_disasm (stdout, i, NULL, 1); + if (more_params(inptr)) { + addr = readhex (inptr); + if (more_params(inptr)) + end = readhex (inptr); + } + console_out("Searching from %08.8X to %08.8X\n", addr, end); + while((addr = nextaddr(addr, &endbank)) != 0xffffffff) { + if (addr == end) + break; + if ((addr & 1) == 0 && addr + 6 <= endbank) { + sea = 0xffffffff; + dea = 0xffffffff; + m68k_disasm_ea (NULL, addr, NULL, 1, &sea, &dea); + if (ea == sea || ea == dea) + m68k_disasm (stdout, addr, NULL, 1); + } } } @@ -1521,6 +1667,7 @@ static void debug_1 (void) else m68k_dumpstate (stdout, &nextpc); break; + case 'D': deepcheatsearch (toupper(*inptr)); break; case 'C': cheatsearch (&inptr); break; case 'W': writeintomem (&inptr); break; case 'w': memwatch (&inptr); break; @@ -1819,6 +1966,7 @@ void debug (void) } if (do_skip) { set_special (SPCFLAG_BRK); + unset_special (SPCFLAG_STOP); debugging = 1; } resume_sound (); diff --git a/expansion.c b/expansion.c index a03744b3..461df3ca 100755 --- a/expansion.c +++ b/expansion.c @@ -338,7 +338,7 @@ static void fastmem_bput (uaecptr, uae_u32) REGPARAM; static int fastmem_check (uaecptr addr, uae_u32 size) REGPARAM; static uae_u8 *fastmem_xlate (uaecptr addr) REGPARAM; -static uae_u32 fastmem_start; /* Determined by the OS */ +uaecptr fastmem_start; /* Determined by the OS */ static uae_u8 *fastmemory; uae_u32 REGPARAM2 fastmem_lget (uaecptr addr) @@ -639,7 +639,7 @@ static void z3fastmem_bput (uaecptr, uae_u32) REGPARAM; static int z3fastmem_check (uaecptr addr, uae_u32 size) REGPARAM; static uae_u8 *z3fastmem_xlate (uaecptr addr) REGPARAM; -static uae_u32 z3fastmem_start; /* Determined by the OS */ +uaecptr z3fastmem_start; /* Determined by the OS */ static uae_u8 *z3fastmem; uae_u32 REGPARAM2 z3fastmem_lget (uaecptr addr) diff --git a/include/memory.h b/include/memory.h index 7b3a720d..42b035d4 100755 --- a/include/memory.h +++ b/include/memory.h @@ -50,6 +50,8 @@ extern void wait_cpu_cycle_write (uaecptr addr, int mode, uae_u32 v); #define bogomem_start 0x00C00000 #define a3000mem_start 0x07000000 #define kickmem_start 0x00F80000 +extern uaecptr z3fastmem_start; +extern uaecptr fastmem_start; extern int ersatzkickfile; extern int cloanto_rom; diff --git a/include/options.h b/include/options.h index acde966d..3c832e82 100755 --- a/include/options.h +++ b/include/options.h @@ -159,7 +159,6 @@ struct uae_prefs { int leds_on_screen; int keyboard_leds[3]; int keyboard_leds_in_use; - int fast_copper; int scsi; int uaeserial; int catweasel; diff --git a/main.c b/main.c index 91d34fdf..1af5acd3 100755 --- a/main.c +++ b/main.c @@ -128,9 +128,6 @@ void fixup_prefs (struct uae_prefs *p) p->chipmem_size = 0x200000; err = 1; } - if (p->chipmem_size > 0x80000) - p->chipset_mask |= CSMASK_ECS_AGNUS; - if ((p->fastmem_size & (p->fastmem_size - 1)) != 0 || (p->fastmem_size != 0 && (p->fastmem_size < 0x100000 || p->fastmem_size > 0x800000))) { @@ -263,22 +260,17 @@ void fixup_prefs (struct uae_prefs *p) p->dfxtype[3] = 0; err = 1; } - if (p->floppy_speed > 0 && p->floppy_speed < 10) { p->floppy_speed = 100; } if (p->input_mouse_speed < 1 || p->input_mouse_speed > 1000) { p->input_mouse_speed = 100; } - if (p->cpu_cycle_exact || p->blitter_cycle_exact) - p->fast_copper = 0; - if (p->collision_level < 0 || p->collision_level > 3) { write_log ("Invalid collision support level. Using 1.\n"); p->collision_level = 1; err = 1; } - if (p->parallel_postscript_emulation) p->parallel_postscript_detection = 1; diff --git a/moduleripper.c b/moduleripper.c index a69543c4..191aeedb 100755 --- a/moduleripper.c +++ b/moduleripper.c @@ -44,12 +44,16 @@ void moduleripper (void) size = currprefs.chipmem_size; size += currprefs.fastmem_size; size += currprefs.bogomem_size; + size += currprefs.z3fastmem_size; buf = p = xmalloc (size); memcpy (p, chipmemory, currprefs.chipmem_size); p += currprefs.chipmem_size; - mc (p, 0x200000, currprefs.fastmem_size); + mc (p, fastmem_start, currprefs.fastmem_size); p += currprefs.fastmem_size; - mc (p, 0xc00000, currprefs.bogomem_size); + mc (p, bogomem_start, currprefs.bogomem_size); + p += currprefs.bogomem_size; + mc (p, z3fastmem_start, currprefs.z3fastmem_size); + p += currprefs.z3fastmem_size; got = 0; canceled = 0; diff --git a/newcpu.c b/newcpu.c index 06629657..a7ded516 100755 --- a/newcpu.c +++ b/newcpu.c @@ -1670,8 +1670,7 @@ static int do_specialties (int cycles) return 0; } #endif - if ((regs.spcflags & SPCFLAG_ACTION_REPLAY) && action_replay_flag != ACTION_REPLAY_INACTIVE ) - { + if ((regs.spcflags & SPCFLAG_ACTION_REPLAY) && action_replay_flag != ACTION_REPLAY_INACTIVE ) { /*if(action_replay_flag == ACTION_REPLAY_ACTIVE && !is_ar_pc_in_rom())*/ /* write_log("PC:%p\n",m68k_getpc());*/ @@ -2257,6 +2256,8 @@ void m68k_go (int may_quit) } } + if (regs.spcflags & SPCFLAG_STOP) + do_specialties (0); #ifndef JIT m68k_run1 (currprefs.cpu_level == 0 && currprefs.cpu_cycle_exact ? m68k_run_1_ce : currprefs.cpu_level == 0 && currprefs.cpu_compatible ? m68k_run_1 : diff --git a/od-win32/avioutput.c b/od-win32/avioutput.c index b7bd3127..c4585b14 100755 --- a/od-win32/avioutput.c +++ b/od-win32/avioutput.c @@ -53,7 +53,7 @@ int avioutput_audio, avioutput_video, avioutput_enabled, avioutput_requested; int avioutput_width, avioutput_height, avioutput_bits; int avioutput_fps = VBLANK_HZ_PAL; -int avioutput_framelimiter = 0; +DWORD avioutput_framelimiter = 0; char avioutput_filename[MAX_DPATH]; static char avioutput_filename_tmp[MAX_DPATH]; @@ -102,6 +102,39 @@ static HKEY openavikey(void) return fkey; } +static void storesettings(HKEY avikey) +{ + RegSetValueEx(avikey, "FrameLimiter", 0, REG_DWORD, (BYTE*)&avioutput_framelimiter, sizeof(DWORD)); + RegSetValueEx(avikey, "FPS", 0, REG_DWORD, (BYTE*)&avioutput_fps, sizeof(DWORD)); +} +static void getsettings(HKEY avikey) +{ + DWORD val; + DWORD ss = sizeof (DWORD); + if (RegQueryValueEx(avikey, "FrameLimiter", 0, NULL, (BYTE*)&val, &ss) == ERROR_SUCCESS) + avioutput_framelimiter = val; + ss = sizeof (DWORD); + if (RegQueryValueEx(avikey, "FPS", 0, NULL, (BYTE*)&val, &ss) == ERROR_SUCCESS) + avioutput_fps = val; +} + +void AVIOutput_GetSettings(void) +{ + HKEY avikey = openavikey(); + if (avikey) { + getsettings(avikey); + RegCloseKey(avikey); + } +} +void AVIOutput_SetSettings(void) +{ + HKEY avikey = openavikey(); + if (avikey) { + storesettings(avikey); + RegCloseKey(avikey); + } +} + static UINT CALLBACK acmFilterChooseHookProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { if(uMsg == MM_ACM_FORMATCHOOSE) { @@ -238,6 +271,7 @@ static int AVIOutput_GetAudioFromRegistry(WAVEFORMATEX *wft) avikey = openavikey(); if (!avikey) return 0; + getsettings(avikey); if (wft) { if (RegQueryValueEx(avikey, "AudioConfigurationVars", 0, NULL, NULL, &ss) == ERROR_SUCCESS) { if (ss <= sizeof(WAVEFORMATEX) + wft->cbSize) { @@ -293,6 +327,7 @@ int AVIOutput_ChooseAudioCodec(HWND hwnd, char *s, int len) avikey = openavikey(); if (avikey) { RegSetValueEx(avikey, "AudioConfigurationVars", 0, REG_BINARY, (BYTE*)pwfxDst, pwfxDst->cbSize + sizeof(WAVEFORMATEX)); + storesettings(avikey); RegCloseKey(avikey); } return 1; @@ -384,6 +419,7 @@ static int AVIOutput_GetCOMPVARSFromRegistry(COMPVARS *pcv) avikey = openavikey(); if (!avikey) return 0; + getsettings(avikey); if (pcv) { ss = pcv->cbSize; pcv->hic = 0; @@ -487,6 +523,7 @@ int AVIOutput_ChooseVideoCodec(HWND hwnd, char *s, int len) if (avikey) { RegSetValueEx(avikey, "VideoConfigurationState", 0, REG_BINARY, state, ss); RegSetValueEx(avikey, "VideoConfigurationVars", 0, REG_BINARY, (BYTE*)pcompvars, pcompvars->cbSize); + storesettings(avikey); RegCloseKey(avikey); } xfree (state); diff --git a/od-win32/avioutput.h b/od-win32/avioutput.h index 9d323f1d..81a44533 100755 --- a/od-win32/avioutput.h +++ b/od-win32/avioutput.h @@ -9,7 +9,8 @@ extern int avioutput_video, avioutput_audio, avioutput_enabled, avioutput_requested; extern int avioutput_width, avioutput_height, avioutput_bits; -extern int avioutput_fps, avioutput_framelimiter; +extern int avioutput_fps; +extern DWORD avioutput_framelimiter; extern char avioutput_filename[MAX_DPATH]; @@ -25,6 +26,8 @@ extern void AVIOutput_Begin(void); extern void AVIOutput_Release(void); extern void AVIOutput_Initialize(void); extern void AVIOutput_RGBinfo(int,int,int,int,int,int); +extern void AVIOutput_GetSettings(void); +extern void AVIOutput_SetSettings(void); #define AVIAUDIO_AVI 1 #define AVIAUDIO_WAV 2 diff --git a/od-win32/resources/winuae.rc b/od-win32/resources/winuae.rc index e3e05a22..7db65950 100755 --- a/od-win32/resources/winuae.rc +++ b/od-win32/resources/winuae.rc @@ -479,8 +479,6 @@ BEGIN CONTROL "NTSC [] North American and Japanese display standard, 60Hz refresh rate. Other countries use PAL (50Hz. display refresh rate)",IDC_NTSC, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,102,63,50,10 GROUPBOX "Options",IDC_STATIC,168,11,114,82 - CONTROL "Fast Copper [] Faster but less compatible copper emulation.",IDC_FASTCOPPER, - "Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,176,198,98,10 CONTROL "Immediate Blitter [] Faster but less compatible blitter emulation.",IDC_BLITIMM, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,174,30,96,10 CONTROL "Cycle-exact CPU and Blitter [] The most compatible A500 emulation mode. Very fast PC recommended.",IDC_CYCLEEXACT, diff --git a/od-win32/win32gui.c b/od-win32/win32gui.c index 031b7b6a..f0d3e7dd 100755 --- a/od-win32/win32gui.c +++ b/od-win32/win32gui.c @@ -3387,7 +3387,6 @@ static void enable_for_chipsetdlg (HWND hDlg) EnableWindow (GetDlgItem (hDlg, IDC_GENLOCK), full_property_sheet); EnableWindow (GetDlgItem (hDlg, IDC_BLITIMM), enable); if (enable == FALSE) { - workprefs.fast_copper = 0; workprefs.immediate_blits = 0; CheckDlgButton (hDlg, IDC_FASTCOPPER, FALSE); CheckDlgButton (hDlg, IDC_BLITIMM, FALSE); @@ -3991,7 +3990,6 @@ static void values_to_chipsetdlg (HWND hDlg) } CheckDlgButton (hDlg, IDC_NTSC, workprefs.ntscmode); CheckDlgButton (hDlg, IDC_GENLOCK, workprefs.genlock); - CheckDlgButton (hDlg, IDC_FASTCOPPER, workprefs.fast_copper); CheckDlgButton (hDlg, IDC_BLITIMM, workprefs.immediate_blits); CheckRadioButton (hDlg, IDC_COLLISION0, IDC_COLLISION3, IDC_COLLISION0 + workprefs.collision_level); CheckDlgButton (hDlg, IDC_CYCLEEXACT, workprefs.cpu_cycle_exact); @@ -4008,7 +4006,6 @@ static void values_from_chipsetdlg (HWND hDlg, UINT msg, WPARAM wParam, LPARAM l BOOL success = FALSE; int n, snd; - workprefs.fast_copper = IsDlgButtonChecked (hDlg, IDC_FASTCOPPER); workprefs.genlock = IsDlgButtonChecked (hDlg, IDC_FASTCOPPER); workprefs.immediate_blits = IsDlgButtonChecked (hDlg, IDC_BLITIMM); n = IsDlgButtonChecked (hDlg, IDC_CYCLEEXACT) ? 1 : 0; @@ -4020,7 +4017,6 @@ static void values_from_chipsetdlg (HWND hDlg, UINT msg, WPARAM wParam, LPARAM l workprefs.m68k_speed = 0; } workprefs.immediate_blits = 0; - workprefs.fast_copper = 0; workprefs.gfx_framerate = 1; } } @@ -6227,7 +6223,7 @@ static void addfloppyhistory (HWND hDlg, HKEY fkey, int n, int f_text) if (f_text < 0) return; SendDlgItemMessage(hDlg, f_text, CB_RESETCONTENT, 0, 0); - SendDlgItemMessage(hDlg, f_text, WM_SETTEXT, 0, (LPARAM)workprefs.df[n]); + SendDlgItemMessage(hDlg, f_text, WM_SETTEXT, 0, (LPARAM)workprefs.df[n]); i = 0; while (s = DISK_history_get (i)) { char tmpname[MAX_DPATH], tmppath[MAX_DPATH], *p, *p2; @@ -6372,7 +6368,7 @@ static int getfloppybox (HWND hDlg, int f_text, char *out, int maxlen) static void getfloppyname (HWND hDlg, int n) { int f_text = currentpage == QUICKSTART_ID ? floppybuttonsq[n][0] : floppybuttons[n][0]; - char tmp[1000]; + char tmp[MAX_DPATH]; if (getfloppybox (hDlg, f_text, tmp, sizeof (tmp))) { disk_insert (n, tmp); @@ -8132,36 +8128,36 @@ static INT_PTR CALLBACK hw3dDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM l #ifdef AVIOUTPUT static void values_to_avioutputdlg(HWND hDlg) { - char tmpstr[256]; + char tmpstr[256]; - updatewinfsmode (&workprefs); - SetDlgItemText(hDlg, IDC_AVIOUTPUT_FILETEXT, avioutput_filename); + updatewinfsmode (&workprefs); + SetDlgItemText(hDlg, IDC_AVIOUTPUT_FILETEXT, avioutput_filename); - sprintf(tmpstr, "%d fps", avioutput_fps); - SendMessage(GetDlgItem(hDlg, IDC_AVIOUTPUT_FPS_STATIC), WM_SETTEXT, (WPARAM) 0, (LPARAM) tmpstr); + sprintf(tmpstr, "%d fps", avioutput_fps); + SendMessage(GetDlgItem(hDlg, IDC_AVIOUTPUT_FPS_STATIC), WM_SETTEXT, (WPARAM) 0, (LPARAM) tmpstr); - sprintf(tmpstr, "Actual: %d x %d", workprefs.gfx_size.width, workprefs.gfx_size.height); - SendMessage(GetDlgItem(hDlg, IDC_AVIOUTPUT_DIMENSIONS_STATIC), WM_SETTEXT, (WPARAM) 0, (LPARAM) tmpstr); + sprintf(tmpstr, "Actual: %d x %d", workprefs.gfx_size.width, workprefs.gfx_size.height); + SendMessage(GetDlgItem(hDlg, IDC_AVIOUTPUT_DIMENSIONS_STATIC), WM_SETTEXT, (WPARAM) 0, (LPARAM) tmpstr); - switch(avioutput_fps) - { + switch(avioutput_fps) + { case VBLANK_HZ_PAL: - CheckRadioButton(hDlg, IDC_AVIOUTPUT_PAL, IDC_AVIOUTPUT_NTSC, IDC_AVIOUTPUT_PAL); - break; + CheckRadioButton(hDlg, IDC_AVIOUTPUT_PAL, IDC_AVIOUTPUT_NTSC, IDC_AVIOUTPUT_PAL); + break; case VBLANK_HZ_NTSC: - CheckRadioButton(hDlg, IDC_AVIOUTPUT_PAL, IDC_AVIOUTPUT_NTSC, IDC_AVIOUTPUT_NTSC); - break; + CheckRadioButton(hDlg, IDC_AVIOUTPUT_PAL, IDC_AVIOUTPUT_NTSC, IDC_AVIOUTPUT_NTSC); + break; default: - CheckDlgButton(hDlg, IDC_AVIOUTPUT_PAL, BST_UNCHECKED); - CheckDlgButton(hDlg, IDC_AVIOUTPUT_NTSC, BST_UNCHECKED); - break; - } + CheckDlgButton(hDlg, IDC_AVIOUTPUT_PAL, BST_UNCHECKED); + CheckDlgButton(hDlg, IDC_AVIOUTPUT_NTSC, BST_UNCHECKED); + break; + } - CheckDlgButton (hDlg, IDC_AVIOUTPUT_FRAMELIMITER, avioutput_framelimiter ? FALSE : TRUE); - CheckDlgButton (hDlg, IDC_AVIOUTPUT_ACTIVATED, avioutput_requested ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton (hDlg, IDC_SAMPLERIPPER_ACTIVATED, sampleripper_enabled ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton (hDlg, IDC_AVIOUTPUT_FRAMELIMITER, avioutput_framelimiter ? FALSE : TRUE); + CheckDlgButton (hDlg, IDC_AVIOUTPUT_ACTIVATED, avioutput_requested ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton (hDlg, IDC_SAMPLERIPPER_ACTIVATED, sampleripper_enabled ? BST_CHECKED : BST_UNCHECKED); } static void values_from_avioutputdlg(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) @@ -8176,7 +8172,6 @@ static void values_from_avioutputdlg(HWND hDlg, UINT msg, WPARAM wParam, LPARAM avioutput_fps = (int)tmp; AVIOutput_Restart (); } - avioutput_framelimiter = IsDlgButtonChecked (hDlg, IDC_AVIOUTPUT_FRAMELIMITER) ? 0 : 1; } static void enable_for_avioutputdlg(HWND hDlg) @@ -8194,7 +8189,6 @@ static void enable_for_avioutputdlg(HWND hDlg) EnableWindow(GetDlgItem(hDlg, IDC_AVIOUTPUT_NTSC), TRUE); EnableWindow(GetDlgItem(hDlg, IDC_AVIOUTPUT_FPS), TRUE); EnableWindow(GetDlgItem(hDlg, IDC_AVIOUTPUT_FILE), TRUE); - CheckDlgButton (hDlg, IDC_AVIOUTPUT_FRAMELIMITER, avioutput_framelimiter ? FALSE : TRUE); if(workprefs.produce_sound < 2) { EnableWindow(GetDlgItem(hDlg, IDC_AVIOUTPUT_AUDIO), FALSE); @@ -8224,6 +8218,8 @@ static void enable_for_avioutputdlg(HWND hDlg) } SetWindowText(GetDlgItem(hDlg, IDC_AVIOUTPUT_VIDEO_STATIC), tmp); + CheckDlgButton (hDlg, IDC_AVIOUTPUT_FRAMELIMITER, avioutput_framelimiter ? FALSE : TRUE); + EnableWindow(GetDlgItem(hDlg, IDC_AVIOUTPUT_ACTIVATED), (!avioutput_audio && !avioutput_video) ? FALSE : TRUE); EnableWindow(GetDlgItem(hDlg, IDC_INPREC_RECORD), input_recording >= 0); @@ -8243,9 +8239,10 @@ static INT_PTR CALLBACK AVIOutputDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPA case WM_INITDIALOG: pages[AVIOUTPUT_ID] = hDlg; currentpage = AVIOUTPUT_ID; + AVIOutput_GetSettings(); enable_for_avioutputdlg(hDlg); SendDlgItemMessage(hDlg, IDC_AVIOUTPUT_FPS, TBM_SETRANGE, TRUE, MAKELONG(1, VBLANK_HZ_NTSC)); - SendDlgItemMessage(hDlg, IDC_AVIOUTPUT_FPS, TBM_SETPOS, TRUE, VBLANK_HZ_PAL); + SendDlgItemMessage(hDlg, IDC_AVIOUTPUT_FPS, TBM_SETPOS, TRUE, avioutput_fps); SendMessage(hDlg, WM_HSCROLL, (WPARAM) NULL, (LPARAM) NULL); if (!avioutput_filename[0]) { fetch_path ("VideoPath", avioutput_filename, sizeof (avioutput_filename)); @@ -8254,23 +8251,18 @@ static INT_PTR CALLBACK AVIOutputDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPA case WM_USER: recursive++; - values_to_avioutputdlg(hDlg); enable_for_avioutputdlg(hDlg); - recursive--; return TRUE; case WM_HSCROLL: { recursive++; - values_from_avioutputdlg(hDlg, msg, wParam, lParam); values_to_avioutputdlg(hDlg); enable_for_avioutputdlg(hDlg); - recursive--; - return TRUE; } @@ -8284,6 +8276,11 @@ static INT_PTR CALLBACK AVIOutputDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPA switch(wParam) { + case IDC_AVIOUTPUT_FRAMELIMITER: + avioutput_framelimiter = IsDlgButtonChecked (hDlg, IDC_AVIOUTPUT_FRAMELIMITER) ? 0 : 1; + AVIOutput_SetSettings(); + break; + case IDC_INPREC_PLAYMODE: break; case IDC_INPREC_RECORD: @@ -8414,6 +8411,7 @@ struct GUIPAGE { const char *help; HACCEL accel; int fullpanel; + int tmpl; }; static int GetPanelRect (HWND hDlg, RECT *r) @@ -8481,13 +8479,63 @@ static LRESULT FAR PASCAL ToolTipWndProc (HWND hwnd, UINT message, WPARAM wParam return CallWindowProc (ToolTipHWNDS2[i].proc, hwnd, message, wParam, lParam); } +static int ignorewindows[] = { + IDD_FLOPPY, IDC_DF0TEXT, IDC_DF1TEXT, IDC_DF2TEXT, IDC_DF3TEXT, IDC_CREATE_NAME, + -1, + IDD_QUICKSTART, IDC_DF0TEXTQ, IDC_DF1TEXTQ, IDC_QUICKSTART_HOSTCONFIG, + -1, + IDD_AVIOUTPUT, IDC_AVIOUTPUT_FILETEXT, IDC_AVIOUTPUT_VIDEO_STATIC, IDC_AVIOUTPUT_AUDIO_STATIC, + -1, + IDD_DISK, IDC_DISKTEXT, IDC_DISKLIST, + -1, + IDD_DISPLAY, IDC_DISPLAYSELECT, + -1, + IDD_FILTER, IDC_FILTERPRESETS, + -1, + IDD_HARDDISK, IDC_VOLUMELIST, + -1, + IDD_INPUT, IDC_INPUTDEVICE, IDC_INPUTLIST, IDC_INPUTAMIGA, + -1, + IDD_KICKSTART, IDC_ROMFILE, IDC_ROMFILE2, IDC_CARTFILE, IDC_FLASHFILE, + -1, + IDD_LOADSAVE, IDC_CONFIGTREE, IDC_EDITNAME, IDC_EDITDESCRIPTION, IDC_CONFIGLINK, IDC_EDITPATH, + -1, + IDD_MISC1, IDC_LANGUAGE, + -1, + IDD_PATHS, IDC_PATHS_ROM, IDC_PATHS_CONFIG, IDC_PATHS_SCREENSHOT, IDC_PATHS_SAVESTATE, IDC_PATHS_AVIOUTPUT, IDC_PATHS_SAVEIMAGE, + -1, + IDD_PORTS, IDC_PRINTERLIST, IDC_PS_PARAMS, IDC_SERIAL, IDC_MIDIOUTLIST, IDC_MIDIINLIST, + -1, + IDD_SOUND, IDC_SOUNDCARDLIST, IDC_SOUNDDRIVESELECT, + -1, + 0 +}; + static BOOL CALLBACK childenumproc (HWND hwnd, LPARAM lParam) { + int i; TOOLINFO ti; char tmp[MAX_DPATH]; char *p; LRESULT v; + if (GetParent(hwnd) != panelDlg) + return 1; + i = 0; + while (ignorewindows[i]) { + if (ignorewindows[i] == (int)lParam) { + int dlgid = GetDlgCtrlID(hwnd); + i++; + while (ignorewindows[i] > 0) { + if (dlgid == ignorewindows[i]) + return 1; + i++; + } + break; + } else { + while (ignorewindows[i++] > 0); + } + } tmp[0] = 0; SendMessage (hwnd, WM_GETTEXT, (WPARAM)sizeof (tmp), (LPARAM)tmp); p = strchr (tmp, '['); @@ -8658,7 +8706,7 @@ static HWND updatePanel (HWND hDlg, int id) SendMessage(ToolTipHWND, TTM_SETDELAYTIME, (WPARAM)TTDT_AUTOPOP, (LPARAM)MAKELONG(20000, 0)); SendMessage(ToolTipHWND, TTM_SETMAXTIPWIDTH, 0, 400); - EnumChildWindows (panelDlg, &childenumproc, (LPARAM)NULL); + EnumChildWindows (panelDlg, &childenumproc, (LPARAM)ppage[currentpage].tmpl); SendMessage (panelDlg, WM_NULL, 0, 0); hAccelTable = ppage[currentpage].accel; @@ -8869,6 +8917,7 @@ int dragdrop (HWND hDlg, HDROP hd, struct uae_prefs *prefs, int currentpage) } } } else { + DISK_history_add (file, -1); strcpy (workprefs.df[drv], file); strcpy (changed_prefs.df[drv], workprefs.df[drv]); drv++; @@ -9045,6 +9094,7 @@ static int init_page (int tmpl, int icon, int title, ppage[id].help = help; ppage[id].idx = id; ppage[id].accel = NULL; + ppage[id].tmpl = tmpl; if (!accels) accels = EmptyAccel; while (accels[++i].key); -- 2.47.3