From 3e4a746712069e2b35d7bc35a5eda909c52a20e9 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Fri, 29 Dec 2006 20:05:57 +0200 Subject: [PATCH] imported winuaesrc1340b9.zip --- newcpu.c | 2 +- od-win32/sounddep/sound.c | 77 ++++++++++++++----------- od-win32/srcrelease.bat | 3 +- od-win32/win32.c | 9 ++- od-win32/win32.h | 2 +- od-win32/win32gui.c | 8 +-- od-win32/winuae_msvc/winuae_msvc.vcproj | 10 ++-- od-win32/winuaechangelog.txt | 3 + 8 files changed, 66 insertions(+), 48 deletions(-) diff --git a/newcpu.c b/newcpu.c index 8e482481..2b412e20 100755 --- a/newcpu.c +++ b/newcpu.c @@ -1651,7 +1651,7 @@ static void do_trace (void) } } -#define IDLETIME (currprefs.cpu_idle * sleep_resolution / 1000) +#define IDLETIME (currprefs.cpu_idle * sleep_resolution / 700) STATIC_INLINE int do_specialties (int cycles, struct regstruct *regs) { diff --git a/od-win32/sounddep/sound.c b/od-win32/sounddep/sound.c index ee57b6c1..ff7b8974 100755 --- a/od-win32/sounddep/sound.c +++ b/od-win32/sounddep/sound.c @@ -132,9 +132,15 @@ static void cleardsbuffer (void) static void pause_audio_ds (void) { + HRESULT hr; + waiting_for_buffer = 0; - IDirectSoundBuffer_Stop (lpDSBsecondary); - IDirectSoundBuffer_SetCurrentPosition (lpDSBsecondary, 0); + hr = IDirectSoundBuffer_Stop (lpDSBsecondary); + if (FAILED(hr)) + write_log("SOUND: DirectSoundBuffer_Stop failed, %s\n", DXError(hr)); + hr = IDirectSoundBuffer_SetCurrentPosition (lpDSBsecondary, 0); + if (FAILED(hr)) + write_log("SOUND: DirectSoundBuffer_SetCurretPosition failed, %s\n", DXError(hr)); cleardsbuffer (); } @@ -150,7 +156,7 @@ static int restore (DWORD hr) if (hr != DSERR_BUFFERLOST) return 0; if (sound_debug) - write_log ("sound buffer lost\n"); + write_log ("SOUND: sound buffer lost\n"); hr = IDirectSoundBuffer_Restore (lpDSBsecondary); if (FAILED(hr)) { write_log ("SOUND: restore failed %s\n", DXError (hr)); @@ -173,19 +179,6 @@ static double getqpf (void) return (qpfc2.QuadPart - qpfc.QuadPart) / (qpf.QuadPart / 1000.0); } -static int getpos (void) -{ - DWORD playpos, safepos; - HRESULT hr; - - hr = IDirectSoundBuffer_GetCurrentPosition (lpDSBsecondary, &playpos, &safepos); - if (FAILED(hr)) { - write_log ("SOUND: GetCurrentPosition failed: %s\n", DXError (hr)); - return -1; - } - return playpos; -} - static void close_audio_ds (void) { waiting_for_buffer = 0; @@ -216,9 +209,16 @@ static void setvolume (void) write_log ("SOUND: SetVolume(%d) failed: %s\n", vol, DXError (hr)); setvolume_ahi (vol); } - +static void recalc_offsets(void) +{ + snd_writeoffset = max_sndbufsize * 5 / 8; + snd_maxoffset = max_sndbufsize; + snd_totalmaxoffset_of = max_sndbufsize + (dsoundbuf - max_sndbufsize) * 3 / 9; + snd_totalmaxoffset_uf = max_sndbufsize + (dsoundbuf - max_sndbufsize) * 7 / 9; +} + const static GUID KSDATAFORMAT_SUBTYPE_PCM = {0x00000001,0x0000,0x0010, -{0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71}}; + {0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71}}; static int open_audio_ds (int size) { @@ -256,10 +256,7 @@ static int open_audio_ds (int size) if (max_sndbufsize * 2 > dsoundbuf) max_sndbufsize = dsoundbuf / 2; - snd_writeoffset = max_sndbufsize * 5 / 8; - snd_maxoffset = max_sndbufsize; - snd_totalmaxoffset_of = max_sndbufsize + (dsoundbuf - max_sndbufsize) * 3 / 9; - snd_totalmaxoffset_uf = max_sndbufsize + (dsoundbuf - max_sndbufsize) * 7 / 9; + recalc_offsets(); memset (&wavfmt, 0, sizeof (WAVEFORMATEXTENSIBLE)); wavfmt.Format.nChannels = (currprefs.sound_stereo == 3 || currprefs.sound_stereo == 2) ? 4 : (currprefs.sound_stereo ? 2 : 1); @@ -508,9 +505,11 @@ void restart_sound_buffer(void) if (waiting_for_buffer != -1) return; hr = IDirectSoundBuffer_GetCurrentPosition (lpDSBsecondary, &playpos, &safed); - if (FAILED(hr)) + if (FAILED(hr)) { + write_log("SOUND: DirectSoundBuffer_GetCurrentPosition failed, %s\n", DXError(hr)); return; - writepos = playpos + snd_writeoffset - 2 * sndbufsize; + } + writepos = playpos + snd_writeoffset - sndbufsize; if (writepos < 0) writepos += dsoundbuf; cf (writepos); @@ -524,7 +523,7 @@ static void finish_sound_buffer_ds (void) void *b1, *b2; DWORD s1, s2; int diff; - int counter = 1000; + int counter; double vdiff, m, skipmode; static int statuscnt; @@ -549,19 +548,31 @@ static void finish_sound_buffer_ds (void) waiting_for_buffer = 0; return; } - hr = IDirectSoundBuffer_GetCurrentPosition (lpDSBsecondary, &playpos, &safedist); + hr = IDirectSoundBuffer_SetCurrentPosition (lpDSBsecondary, 0); if (FAILED(hr)) { - write_log ("SOUND: 1st GetCurrentPosition failed: %s\n", DXError (hr)); + write_log ("SOUND: 1st SetCurrentPosition failed: %s\n", DXError (hr)); restore (DSERR_BUFFERLOST); waiting_for_buffer = 0; return; } + /* there are crappy drivers that return PLAYCURSOR = WRITECURSOR = 0 without this.. */ + counter = 5000; + for (;;) { + hr = IDirectSoundBuffer_GetCurrentPosition (lpDSBsecondary, &playpos, &safedist); + if (playpos > 0) + break; + sleep_millis(1); + counter--; + if (counter < 0) { + write_log("SOUND: stuck?!?!\n"); + break; + } + } + write_log("SOUND: %d = (%d - %d)\n", safedist - playpos, safedist, playpos); + recalc_offsets(); safedist -= playpos; if (safedist < 64) safedist = 64; - safedist += sndbufsize; - if (safedist < 0) - safedist += dsoundbuf; cf(safedist); snd_totalmaxoffset_uf += safedist; cf (snd_totalmaxoffset_uf); @@ -573,13 +584,14 @@ static void finish_sound_buffer_ds (void) cf (snd_writeoffset); waiting_for_buffer = -1; restart_sound_buffer(); - write_log("SOUND: safe=%d bs=%d w=%d max=%d tof=%d tuf=%d\n", - safedist - sndbufsize, sndbufsize, snd_writeoffset, + write_log("SOUND: bs=%d w=%d max=%d tof=%d tuf=%d\n", + sndbufsize, snd_writeoffset, snd_maxoffset, snd_totalmaxoffset_of, snd_totalmaxoffset_uf); tfprev = timeframes + 10; tfprev = (tfprev / 10) * 10; } + counter = 5000; hr = IDirectSoundBuffer_GetStatus (lpDSBsecondary, &status); if (FAILED(hr)) { write_log ("SOUND: GetStatus() failed: %s\n", DXError(hr)); @@ -603,7 +615,6 @@ static void finish_sound_buffer_ds (void) write_log ("SOUND: GetCurrentPosition failed: %s\n", DXError (hr)); return; } - if (writepos >= playpos) diff = writepos - playpos; else diff --git a/od-win32/srcrelease.bat b/od-win32/srcrelease.bat index 9df918f9..fe4bcfec 100755 --- a/od-win32/srcrelease.bat +++ b/od-win32/srcrelease.bat @@ -71,6 +71,7 @@ rm -rf release rm -rf debug64 rm -rf release64 rm -rf x64 +rm -rf fullrelease rm -rf _UpgradeReport_Files cd .. @@ -95,5 +96,5 @@ zip -9 -r winuaesrc * copy winuaesrc.zip d:\amiga\winuaepackets\winuaesrc%1.zip move winuaesrc.zip d:\amiga cd c:\projects\winuae\src\od-win32 -zip -9 winuaedebug%1 winuae_msvc\release\winuae.pdb +zip -9 winuaedebug%1 winuae_msvc\release\winuae.pdb winuae_msvc\fullrelease\winuae.pdb move winuaedebug%1.zip d:\amiga\winuaepackets\ diff --git a/od-win32/win32.c b/od-win32/win32.c index b019679c..e534a80f 100755 --- a/od-win32/win32.c +++ b/od-win32/win32.c @@ -2698,13 +2698,16 @@ static int PASCAL WinMain2 (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR AVIOutput_Initialize(); #endif - argv = xcalloc (sizeof (char*), __argc); - argc = process_arg(argv); - getstartpaths(start_data); makeverstr(VersionStr); SetCurrentDirectory (start_path_data); + if (!os_winnt && max_allowed_mman > 256) + max_allowed_mman = 256; + + argv = xcalloc (sizeof (char*), __argc); + argc = process_arg(argv); + logging_init (); if(WIN32_RegisterClasses() && WIN32_InitLibraries() && DirectDraw_Start(NULL)) { diff --git a/od-win32/win32.h b/od-win32/win32.h index d200f446..9b08def3 100755 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -15,7 +15,7 @@ #define GETBDM(x) (((x) - ((x / 10000) * 10000)) / 100) #define GETBDD(x) ((x) % 100) -#define WINUAEBETA 8 +#define WINUAEBETA 9 #define WINUAEPUBLICBETA 1 #define WINUAEDATE MAKEBD(2006, 12, 29) diff --git a/od-win32/win32gui.c b/od-win32/win32gui.c index 155c0532..b8e51adc 100755 --- a/od-win32/win32gui.c +++ b/od-win32/win32gui.c @@ -367,7 +367,7 @@ static HWND cachedlist = NULL; #define MIN_SLOW_MEM 0 #define MAX_SLOW_MEM 4 #define MIN_Z3_MEM 0 -#define MAX_Z3_MEM ((max_z3fastmem >> 20) < 1024 ? 10 : ((max_z3fastmem >> 20) < 2048) ? 11 : 12) +#define MAX_Z3_MEM ((max_z3fastmem >> 20) < 512 ? 9 : ((max_z3fastmem >> 20) < 1024 ? 10 : ((max_z3fastmem >> 20) < 2048) ? 11 : 12)) #define MIN_P96_MEM 0 #define MAX_P96_MEM 7 #define MIN_M68K_PRIORITY 1 @@ -966,7 +966,7 @@ int DiskSelection_2 (HWND hDlg, WPARAM wParam, int flag, struct uae_prefs *prefs } - openFileName.lStructSize = sizeof (OPENFILENAME); + openFileName.lStructSize = os_winnt ? sizeof (OPENFILENAME) : OPENFILENAME_SIZE_VERSION_400; openFileName.hwndOwner = hDlg; openFileName.hInstance = hInst; @@ -1136,10 +1136,10 @@ int DiskSelection_2 (HWND hDlg, WPARAM wParam, int flag, struct uae_prefs *prefs openFileName.Flags |= OFN_ALLOWMULTISELECT; if (flag == 1 || flag == 3 || flag == 5 || flag == 9 || flag == 11 || flag == 16) { if (!(result = GetSaveFileName (&openFileName))) - write_log ("GetSaveFileName() failed.\n"); + write_log ("GetSaveFileName() failed, err=%d.\n", GetLastError()); } else { if (!(result = GetOpenFileName (&openFileName))) - write_log ("GetOpenFileName() failed.\n"); + write_log ("GetOpenFileName() failed, err=%d.\n", GetLastError()); } memcpy (full_path2, full_path, sizeof (full_path)); next = 0; diff --git a/od-win32/winuae_msvc/winuae_msvc.vcproj b/od-win32/winuae_msvc/winuae_msvc.vcproj index 216bc00d..5949147c 100755 --- a/od-win32/winuae_msvc/winuae_msvc.vcproj +++ b/od-win32/winuae_msvc/winuae_msvc.vcproj @@ -1064,10 +1064,10 @@ TreatWChar_tAsBuiltInType="false" RuntimeTypeInfo="false" UsePrecompiledHeader="0" - PrecompiledHeaderFile=".\Release/winuae_msvc.pch" - AssemblerListingLocation=".\Release/" - ObjectFile=".\Release/" - ProgramDataBaseFileName=".\Release/" + PrecompiledHeaderFile=".\FullRelease/winuae_msvc.pch" + AssemblerListingLocation=".\FullRelease/" + ObjectFile=".\FullRelease/" + ProgramDataBaseFileName=".\FullRelease/" WarningLevel="3" SuppressStartupBanner="true" CompileAs="0" @@ -1096,7 +1096,7 @@ AdditionalManifestDependencies="" DelayLoadDLLs="setupapi.dll" GenerateDebugInformation="true" - ProgramDatabaseFile=".\Release/winuae.pdb" + ProgramDatabaseFile=".\FullRelease/winuae.pdb" SubSystem="2" StackReserveSize="2621440" StackCommitSize="2621440" diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index 391a8e8e..5392a4e5 100755 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -2,6 +2,9 @@ Beta 9: - interrupt timing tweak (Gravity Force in ce-mode) +- CPU Idle tweak (slightly less aggressive) +- file dialogs work again in Windows9X/ME.. Apparently + nobody is using 9x anymore, I like it :) Beta 8: (RC3, really final?) -- 2.47.3