From: Toni Wilen Date: Sat, 7 May 2005 17:17:52 +0000 (+0300) Subject: imported winuaesrc1000b7.zip X-Git-Tag: 2100~314 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=fa7e6adcb2a9a435e78a9bd9d0bbd61af542c9fd;p=francis%2Fwinuae.git imported winuaesrc1000b7.zip --- diff --git a/audio.c b/audio.c index c11beae6..1f51bb04 100755 --- a/audio.c +++ b/audio.c @@ -922,6 +922,8 @@ STATIC_INLINE int sound_prefs_changed (void) || changed_prefs.sound_adjust != currprefs.sound_adjust || changed_prefs.sound_interpol != currprefs.sound_interpol || changed_prefs.sound_volume != currprefs.sound_volume + || changed_prefs.sound_stereo_swap_paula != currprefs.sound_stereo_swap_paula + || changed_prefs.sound_stereo_swap_ahi != currprefs.sound_stereo_swap_ahi || changed_prefs.sound_filter != currprefs.sound_filter); } @@ -947,6 +949,8 @@ void check_prefs_changed_audio (void) currprefs.sound_maxbsiz = changed_prefs.sound_maxbsiz; currprefs.sound_filter = changed_prefs.sound_filter; currprefs.sound_volume = changed_prefs.sound_volume; + currprefs.sound_stereo_swap_paula = changed_prefs.sound_stereo_swap_paula; + currprefs.sound_stereo_swap_ahi = changed_prefs.sound_stereo_swap_ahi; if (currprefs.produce_sound >= 2) { if (!init_audio ()) { if (! sound_available) { diff --git a/cfgfile.c b/cfgfile.c index e7236236..2a24fae4 100755 --- a/cfgfile.c +++ b/cfgfile.c @@ -27,6 +27,7 @@ #include "newcpu.h" #include "zfile.h" #include "filesys.h" +#include "fsdb.h" #define CONFIG_BLEN 2560 @@ -148,7 +149,9 @@ static const char *obsolete[] = { "gfx_immediate_blits", "gfx_ntsc", "win32", "gfx_filter_bits", "sound_pri_cutoff", "sound_pri_time", "sound_min_buff", "gfx_test_speed", "gfxlib_replacement", "enforcer", "catweasel_io", - 0 }; + "kickstart_key_file", + 0 +}; #define UNEXPANDED "$(FILE_PATH)" diff --git a/debug.c b/debug.c index aa2ca77f..83256964 100755 --- a/debug.c +++ b/debug.c @@ -62,12 +62,8 @@ void activate_debugger (void) int firsthist = 0; int lasthist = 0; -#ifdef NEED_TO_DEBUG_BADLY -struct regstruct history[MAX_HIST]; -union flagu historyf[MAX_HIST]; -#else -uaecptr history[MAX_HIST]; -#endif +static struct regstruct history[MAX_HIST]; +static struct flag_struct historyf[MAX_HIST]; static char help[] = { " HELP for UAE Debugger\n" @@ -91,7 +87,7 @@ static char help[] = { " o <1|2|addr> []View memory as Copper instructions\n" " O Display bitplane offsets\n" " O Offset a bitplane\n" - " H Show PC history instructions\n" + " H[H] Show PC history (HH=full CPU info) instructions\n" " M Search for *Tracker sound modules\n" " C Search for values like energy or lifes in games\n" " W
Write into Amiga memory\n" @@ -1320,7 +1316,7 @@ static void debug_1 (void) case 'S': savemem (&inptr); break; case 's': if (*inptr == 'c') { - screenshot (1); + screenshot (1, 1); } else { searchmem (&inptr); } @@ -1383,12 +1379,16 @@ static void debug_1 (void) case 'H': { - int count; - int temp; -#ifdef NEED_TO_DEBUG_BADLY + int count, temp, badly; + uae_u32 oldpc = m68k_getpc(); struct regstruct save_regs = regs; - union flagu save_flags = regflags; -#endif + struct flag_struct save_flags = regflags; + + badly = 0; + if (inptr[0] == 'H') { + badly = 1; + inptr++; + } if (more_params(&inptr)) count = readhex(&inptr); @@ -1398,22 +1398,26 @@ static void debug_1 (void) break; temp = lasthist; while (count-- > 0 && temp != firsthist) { - if (temp == 0) temp = MAX_HIST-1; else temp--; + if (temp == 0) + temp = MAX_HIST-1; + else + temp--; } while (temp != lasthist) { -#ifdef NEED_TO_DEBUG_BADLY - regs = history[temp]; + regs = history[temp]; regflags = historyf[temp]; - m68k_dumpstate (NULL); -#else - m68k_disasm (stdout, history[temp], NULL, 1); -#endif - if (++temp == MAX_HIST) temp = 0; + m68k_setpc(history[temp].pc); + if (badly) { + m68k_dumpstate(stdout, NULL); + } else { + m68k_disasm(stdout, history[temp].pc, NULL, 1); + } + if (++temp == MAX_HIST) + temp = 0; } -#ifdef NEED_TO_DEBUG_BADLY regs = save_regs; regflags = save_flags; -#endif + m68k_setpc(oldpc); } break; case 'm': @@ -1482,6 +1486,18 @@ static void debug_1 (void) } } +static void addhistory(void) +{ + history[lasthist] = regs; + history[lasthist].pc = m68k_getpc(); + historyf[lasthist] = regflags; + if (++lasthist == MAX_HIST) + lasthist = 0; + if (lasthist == firsthist) { + if (++firsthist == MAX_HIST) firsthist = 0; + } +} + void debug (void) { int i; @@ -1490,6 +1506,7 @@ void debug (void) return; bogusframe = 1; + addhistory(); if (do_skip && skipaddr_start == 0xC0DEDBAD) { #if 0 @@ -1562,16 +1579,6 @@ void debug (void) } } -#ifdef NEED_TO_DEBUG_BADLY - history[lasthist] = regs; - historyf[lasthist] = regflags; -#else - history[lasthist] = m68k_getpc(); -#endif - if (++lasthist == MAX_HIST) lasthist = 0; - if (lasthist == firsthist) { - if (++firsthist == MAX_HIST) firsthist = 0; - } inputdevice_unacquire (); pause_sound (); do_skip = 0; diff --git a/driveclick.c b/driveclick.c index 8bdfa829..e60a5298 100755 --- a/driveclick.c +++ b/driveclick.c @@ -155,21 +155,21 @@ void driveclick_init(void) for (j = 0; j < CLICK_TRACKS; j++) drvs[i][DS_CLICK].lengths[j] = drvs[i][DS_CLICK].len; sprintf (tmp, "%suae_data%cdrive_click_%s", - start_path, FSDB_DIR_SEPARATOR, currprefs.dfxclickexternal[i]); + start_path_data, FSDB_DIR_SEPARATOR, currprefs.dfxclickexternal[i]); v = loadsample (tmp, &drvs[i][DS_CLICK]); if (v) processclicks (&drvs[i][DS_CLICK]); sprintf (tmp, "%suae_data%cdrive_spin_%s", - start_path, FSDB_DIR_SEPARATOR, currprefs.dfxclickexternal[i]); + start_path_data, FSDB_DIR_SEPARATOR, currprefs.dfxclickexternal[i]); v += loadsample (tmp, &drvs[i][DS_SPIN]); sprintf (tmp, "%suae_data%cdrive_spinnd_%s", - start_path, FSDB_DIR_SEPARATOR, currprefs.dfxclickexternal[i]); + start_path_data, FSDB_DIR_SEPARATOR, currprefs.dfxclickexternal[i]); v += loadsample (tmp, &drvs[i][DS_SPINND]); sprintf (tmp, "%suae_data%cdrive_startup_%s", - start_path, FSDB_DIR_SEPARATOR, currprefs.dfxclickexternal[i]); + start_path_data, FSDB_DIR_SEPARATOR, currprefs.dfxclickexternal[i]); v += loadsample (tmp, &drvs[i][DS_START]); sprintf (tmp, "%suae_data%cdrive_snatch_%s", - start_path, FSDB_DIR_SEPARATOR, currprefs.dfxclickexternal[i]); + start_path_data, FSDB_DIR_SEPARATOR, currprefs.dfxclickexternal[i]); v += loadsample (tmp, &drvs[i][DS_SNATCH]); } if (v == 0) { diff --git a/filesys.c b/filesys.c index 3f9e562b..3ad38252 100755 --- a/filesys.c +++ b/filesys.c @@ -3789,7 +3789,7 @@ static char *device_dupfix (uaecptr expbase, char *devname) static void dump_partinfo (char *name, int num, uaecptr pp) { uae_u32 dostype = get_long (pp + 80); - write_log ("RDB: '%s' uaehf.device:%d, dostype=%08.8X\n", name, num, dostype); + write_log ("RDB: '%s' dostype=%08.8X\n", name, dostype); write_log ("BlockSize: %d, Surfaces: %d, SectorsPerBlock %d\n", get_long (pp + 20) * 4, get_long (pp + 28), get_long (pp + 32)); write_log ("SectorsPerTrack: %d, Reserved: %d, LowCyl %d, HighCyl %d\n", @@ -3798,6 +3798,8 @@ static void dump_partinfo (char *name, int num, uaecptr pp) get_long (pp + 60), get_long (pp + 64), get_long (pp + 68), get_long (pp + 76)); } +#define rdbmnt write_log("Mounting uaehf.device %d (%d) (size=%I64u):\n", unit_no, partnum, hfd->size); + static int rdb_mount (UnitInfo *uip, int unit_no, int partnum, uaecptr parmpacket) { int lastblock = 63, blocksize, readblocksize, badblock, driveinitblock; @@ -3812,10 +3814,16 @@ static int rdb_mount (UnitInfo *uip, int unit_no, int partnum, uaecptr parmpacke int oldversion, oldrevision; int newversion, newrevision; - if (lastblock * hfd->blocksize > hfd->size) + if (lastblock * hfd->blocksize > hfd->size) { + rdbmnt + write_log("failed, too small (%d*%d > %I64u)\n", lastblock, hfd->blocksize, hfd->size); return -2; - if (hfd->blocksize == 0) + } + if (hfd->blocksize == 0) { + rdbmnt + write_log("failed, blocksize == 0\n"); return -2; + } for (rdblock = 0; rdblock < lastblock; rdblock++) { hdf_read (hfd, bufrdb, rdblock * hfd->blocksize, hfd->blocksize); if (rdb_checksum ("RDSK", bufrdb, rdblock)) @@ -3833,17 +3841,22 @@ static int rdb_mount (UnitInfo *uip, int unit_no, int partnum, uaecptr parmpacke } } } - if (rdblock == lastblock) + if (rdblock == lastblock) { + rdbmnt + write_log("failed, no RDB detected\n"); return -2; + } blocksize = rl (bufrdb + 16); readblocksize = blocksize > hfd->blocksize ? blocksize : hfd->blocksize; badblock = rl (bufrdb + 24); if (badblock != -1) { + rdbmnt write_log ("RDB: badblock list is not yet supported. Contact the author.\n"); return -2; } driveinitblock = rl (bufrdb + 36); if (driveinitblock != -1) { + rdbmnt write_log ("RDB: driveinit is not yet supported. Contact the author.\n"); return -2; } @@ -3866,9 +3879,11 @@ static int rdb_mount (UnitInfo *uip, int unit_no, int partnum, uaecptr parmpacke partblock = rl (buf + 4 * 4); } + rdbmnt flags = rl (buf + 20); if (flags & 2) { /* do not mount */ err = -1; + write_log("Automount disabled, not mounting\n"); goto error; } @@ -3887,10 +3902,14 @@ static int rdb_mount (UnitInfo *uip, int unit_no, int partnum, uaecptr parmpacke dostype = get_long (parmpacket + 80); if (dostype == 0) { + write_log("failed, dostype==0\n"); err = -1; goto error; } + if (hfd->cylinders * hfd->sectors * hfd->heads * blocksize > hfd->size) + write_log("WARNING: end of partition > size of disk!\n"); + err = 2; /* load custom filesystems if needed */ @@ -3931,10 +3950,10 @@ static int rdb_mount (UnitInfo *uip, int unit_no, int partnum, uaecptr parmpacke if (get_long (fsnode)) { oldversion = get_word (fsnode + 18); oldrevision = get_word (fsnode + 20); - write_log ("RDB: ROM filesystem version %d.%d\n", oldversion, oldrevision); + write_log ("RDB: %08.8X in FileSystem.resouce version %d.%d\n", dostype, oldversion, oldrevision); } if (newversion * 65536 + newrevision <= oldversion * 65536 + oldrevision && oldversion >= 0) { - write_log ("RDB: ROM filesystem is newer or same, ignoring RDB filesystem\n"); + write_log ("RDB: fs in FileSystem.resource is newer or same, ignoring RDB filesystem\n"); goto error; } @@ -4072,6 +4091,7 @@ static uae_u32 filesys_dev_storeinfo (void) } if (sub_no) return -2; + write_log("Mounting uaehf.device %d (%d):\n", unit_no, sub_no); get_new_device (type, parmpacket, &uip[unit_no].devname, &uip[unit_no].devname_amiga, unit_no); uip[unit_no].devno = unit_no; put_long (parmpacket, uip[unit_no].devname_amiga); diff --git a/hardfile.c b/hardfile.c index 439b3bb4..ac7b7170 100755 --- a/hardfile.c +++ b/hardfile.c @@ -272,9 +272,17 @@ static int handle_scsi (uaecptr request, struct hardfiledata *hfd) len *= hfd->blocksize; scsi_len = (uae_u32)cmd_write (hfd, scsi_data, offset, len); break; + case 0x37: /* READ DEFECT DATA */ + write_log ("UAEHF: READ DEFECT DATA\n"); + status = 2; /* CHECK CONDITION */ + s[0] = 0x70; + s[2] = 0; /* NO SENSE */ + s[12] = 0x1c; /* DEFECT LIST NOT FOUND */ + ls = 12; + break; default: lr = -1; - write_log ("unsupported scsi command 0x%02.2X\n", cmd); + write_log ("UAEHF: unsupported scsi command 0x%02.2X\n", cmd); status = 2; /* CHECK CONDITION */ s[0] = 0x70; s[2] = 5; /* ILLEGAL REQUEST */ @@ -498,13 +506,13 @@ static void getchs (struct hardfiledata *hfd, int *cyl, int *cylsec, int *head, static void outofbounds (int cmd, uae_u64 offset, uae_u64 len, uae_u64 max) { - write_log ("cmd %d: out of bounds, %08.8X-%08.8X + %08.8X-%08.8X > %08.8X-%08.8X\n", cmd, + write_log ("UAEHF: cmd %d: out of bounds, %08.8X-%08.8X + %08.8X-%08.8X > %08.8X-%08.8X\n", cmd, (uae_u32)(offset >> 32),(uae_u32)offset,(uae_u32)(len >> 32),(uae_u32)len, (uae_u32)(max >> 32),(uae_u32)max); } static void unaligned (int cmd, uae_u64 offset, uae_u64 len, int blocksize) { - write_log ("cmd %d: unaligned access, %08.8X-%08.8X, %08.8X-%08.8X, %08.8X\n", cmd, + write_log ("UAEHF: cmd %d: unaligned access, %08.8X-%08.8X, %08.8X-%08.8X, %08.8X\n", cmd, (uae_u32)(offset >> 32),(uae_u32)offset,(uae_u32)(len >> 32),(uae_u32)len, blocksize); } diff --git a/include/debug.h b/include/debug.h index cc3218c4..b79b4bbf 100755 --- a/include/debug.h +++ b/include/debug.h @@ -9,17 +9,9 @@ #ifdef DEBUGGER -#define MAX_HIST 10000 +#define MAX_HIST 100 -extern int firsthist; -extern int lasthist; extern int debugging; -#ifdef NEED_TO_DEBUG_BADLY -extern struct regstruct history[MAX_HIST]; -extern union flagu historyf[MAX_HIST]; -#else -extern uaecptr history[MAX_HIST]; -#endif extern int exception_debugging; extern void debug(void); diff --git a/include/options.h b/include/options.h index 5ae77cd6..00d01557 100755 --- a/include/options.h +++ b/include/options.h @@ -87,6 +87,8 @@ struct uae_prefs { int sound_adjust; int sound_filter; int sound_volume; + int sound_stereo_swap_paula; + int sound_stereo_swap_ahi; int comptrustbyte; int comptrustword; diff --git a/include/uae.h b/include/uae.h index 6944a7e6..b29a3de6 100755 --- a/include/uae.h +++ b/include/uae.h @@ -24,7 +24,8 @@ extern void reset_all_systems (void); extern int quit_program; extern char warning_buffer[256]; -extern char *start_path; +extern char start_path_data[]; +extern char start_path_data_exe[]; /* This structure is used to define menus. The val field can hold key * shortcuts, or one of these special codes: diff --git a/include/xwin.h b/include/xwin.h index 659c7dbd..7723b1a8 100755 --- a/include/xwin.h +++ b/include/xwin.h @@ -29,7 +29,7 @@ extern void unlockscr (void); extern int debuggable (void); extern void LED (int); -extern void screenshot (int); +extern void screenshot (int,int); extern int bits_in_mask (unsigned long mask); extern int mask_shift (unsigned long mask); diff --git a/inputdevice.c b/inputdevice.c index 867c8d76..cc784e8d 100755 --- a/inputdevice.c +++ b/inputdevice.c @@ -1216,7 +1216,7 @@ void inputdevice_handle_inputcode (void) gui_display (-1); break; case AKS_SCREENSHOT: - screenshot (1); + screenshot(1, 1); break; #ifdef ACTION_REPLAY case AKS_FREEZEBUTTON: diff --git a/memory.c b/memory.c index 2fe8fbba..eb4ede7c 100755 --- a/memory.c +++ b/memory.c @@ -198,11 +198,11 @@ uae_u8 *load_keyfile (struct uae_prefs *p, char *path, int *size) if (!f) { f = zfile_fopen ("roms/rom.key", "rb"); if (!f) { - strcpy (tmp, start_path); + strcpy (tmp, start_path_data); strcat (tmp, "rom.key"); f = zfile_fopen(tmp, "rb"); if (!f) { - sprintf (tmp, "%s../shared/rom/rom.key", start_path); + sprintf (tmp, "%s../shared/rom/rom.key", start_path_data); f = zfile_fopen(tmp, "rb"); } } @@ -1512,16 +1512,16 @@ static int load_kickstart (void) strcpy (tmprom, currprefs.romfile); if (f == NULL) { - sprintf (tmprom2, "%s%s", start_path, currprefs.romfile); + sprintf (tmprom2, "%s%s", start_path_data, currprefs.romfile); f = zfile_fopen (tmprom2, "rb"); if (f == NULL) { - sprintf (currprefs.romfile, "%sroms/kick.rom", start_path); + sprintf (currprefs.romfile, "%sroms/kick.rom", start_path_data); f = zfile_fopen (currprefs.romfile, "rb"); if (f == NULL) { - sprintf (currprefs.romfile, "%skick.rom", start_path); + sprintf (currprefs.romfile, "%skick.rom", start_path_data); f = zfile_fopen (currprefs.romfile, "rb"); if (f == NULL) { - sprintf (currprefs.romfile, "%s../shared/rom/kick.rom", start_path); + sprintf (currprefs.romfile, "%s../shared/rom/kick.rom", start_path_data); f = zfile_fopen (currprefs.romfile, "rb"); } } diff --git a/od-win32/ahidsound.c b/od-win32/ahidsound.c index d7912ab8..4ef74f96 100755 --- a/od-win32/ahidsound.c +++ b/od-win32/ahidsound.c @@ -74,7 +74,7 @@ int sound_freq_ahi; static int vin,devicenum; static int amigablksize; -DWORD sound_flushes2 = 0; +static DWORD sound_flushes2 = 0; extern HWND hAmigaWnd; #ifdef __GNUC__ @@ -94,9 +94,9 @@ static LPDIRECTSOUNDCAPTUREBUFFER lpDSB2r = NULL; struct winuae //this struct is put in a6 if you call //execute native function { - HWND amigawnd; //adress of amiga Window Windows Handle - unsigned int changenum; //number to detect screen close/open - unsigned int z3offset; //the offset to add to acsess Z3 mem from Dll side + HWND amigawnd; //adress of amiga Window Windows Handle + unsigned int changenum; //number to detect screen close/open + unsigned int z3offset; //the offset to add to acsess Z3 mem from Dll side }; struct winuae uaevar; @@ -134,22 +134,22 @@ static uae_u32 emulib_ExecuteNativeCode2 (void) __asm { mov espstore,esp push regs_ - push a7 - push a6 - push a5 - push a4 - push a3 - push a2 - push a1 - push d7 - push d6 - push d5 - push d4 - push d3 - push d2 - push d1 - call native_func - mov esp,espstore + push a7 + push a6 + push a5 + push a4 + push a3 + push a2 + push a1 + push d7 + push d6 + push d5 + push d4 + push d3 + push d2 + push d1 + call native_func + mov esp,espstore } //CALL_NATIVE_FUNC2( d1, d2,d3, d4, d5, d6, d7, a1, a2, a3, a4 , a5 , a6 , a7); } @@ -157,146 +157,76 @@ static uae_u32 emulib_ExecuteNativeCode2 (void) return 0; } -char *DSError2( HRESULT error ) -{ - switch( error ) - { - case DSERR_ALLOCATED: - return "Allocated"; - - case DSERR_CONTROLUNAVAIL: - return "Control Unavailable"; - - case DSERR_INVALIDPARAM: - return "Invalid Parameter"; - - case DSERR_INVALIDCALL: - return "Invalid Call"; - - case DSERR_GENERIC: - return "Generic"; - - case DSERR_PRIOLEVELNEEDED: - return "Priority Level Needed"; - - case DSERR_OUTOFMEMORY: - return "Out of Memory"; - - case DSERR_BADFORMAT: - return "Bad Format"; - - case DSERR_UNSUPPORTED: - return "Unsupported"; - - case DSERR_NODRIVER: - return "No Driver"; - - case DSERR_ALREADYINITIALIZED: - return "Already Initialized"; - - case DSERR_NOAGGREGATION: - return "No Aggregation"; - - case DSERR_BUFFERLOST: - return "Buffer Lost"; - - case DSERR_OTHERAPPHASPRIO: - return "Other Application Has Priority"; - - case DSERR_UNINITIALIZED: - return "Uninitialized"; - - case DSERR_NOINTERFACE: - return "No Interface"; - - default: - return "Unknown"; - } -} - - void ahi_close_sound (void) { - HRESULT hr = DS_OK; - + HRESULT hr = DS_OK; - if (!ahi_on) - return; - ahi_on=0; - ahisndbufpt =(int*) ahisndbuffer; - samplecount = 0; - if( lpDSB2 ) - { - hr = IDirectSoundBuffer_Stop( lpDSB2 ); - } + if (!ahi_on) + return; + ahi_on=0; + ahisndbufpt =(int*) ahisndbuffer; + samplecount = 0; + if(lpDSB2) { + hr = IDirectSoundBuffer_Stop(lpDSB2); + } - if( hr != DS_OK ) - { - write_log( "SoundStop() failure: %s\n", DSError2( hr ) ); - } - else - { - write_log( "Sound Stopped...\n" ); - } - if( lpDSB2 ) - { + if(FAILED(hr)) { + write_log( "SoundStop() failure: %s\n", DXError(hr)); + } else { + write_log( "Sound Stopped...\n" ); + } + if(lpDSB2) { IDirectSoundBuffer_Release( lpDSB2 ); lpDSB2 = NULL; } - if( lpDSBprimary2 ) + if(lpDSBprimary2) { - IDirectSoundBuffer_Release( lpDSBprimary2 ); + IDirectSoundBuffer_Release(lpDSBprimary2); lpDSBprimary2 = NULL; } - if( lpDS2 ) + if(lpDS2) { - IDirectSound_Release( lpDS2 ); + IDirectSound_Release(lpDS2); lpDS2 = NULL; } - - if( lpDSB2r ) + + if(lpDSB2r) { - IDirectSoundCaptureBuffer_Release( lpDSB2r ); + IDirectSoundCaptureBuffer_Release(lpDSB2r); lpDSB2r = NULL; } - if (dsound_tmpw) - { - DestroyWindow(dsound_tmpw);dsound_tmpw=0; - } - if (ahisndbuffer) free(ahisndbuffer); - - + if (dsound_tmpw) + { + DestroyWindow(dsound_tmpw);dsound_tmpw=0; } + if (ahisndbuffer) + free(ahisndbuffer); +} void ahi_updatesound( int force ) { - HRESULT hr; - int i; - + HRESULT hr; + int i; - - if( sound_flushes2 == 1 ) + if(sound_flushes2 == 1) + { + oldpos=0; + INTREQ(0xa000); + intcount=1; + /* Lock the entire buffer */ + hr = IDirectSoundBuffer_Lock(lpDSB2, 0, ahisndbufsize, &lpData, &dwBytes,&dwData2,&dwBytes2,0); + if(hr == DSERR_BUFFERLOST) { - oldpos=0; - INTREQ(0xa000); - intcount=1; - /* Lock the entire buffer */ - hr = IDirectSoundBuffer_Lock( lpDSB2, 0, ahisndbufsize, &lpData, &dwBytes,&dwData2,&dwBytes2,0 ); - if( hr == DSERR_BUFFERLOST ) - { - IDirectSoundBuffer_Restore( lpDSB2 ); - hr = IDirectSoundBuffer_Lock( lpDSB2, 0, 0, &lpData, &dwBytes,&dwData2,&dwBytes2, DSBLOCK_ENTIREBUFFER ); - - } - - /* Get the big looping IDirectSoundBuffer_Play() rolling here, but only once at startup */ - hr = IDirectSoundBuffer_Play( lpDSB2, 0, 0, DSBPLAY_LOOPING ); - hr=IDirectSoundBuffer_Unlock(lpDSB2,lpData,dwBytes,dwData2,dwBytes2); - if (!norec)hr = IDirectSoundCaptureBuffer_Start( lpDSB2r,DSBPLAY_LOOPING ); - - //memset( lpData, 0x80,4 ); - + IDirectSoundBuffer_Restore(lpDSB2); + hr = IDirectSoundBuffer_Lock(lpDSB2, 0, 0, &lpData, &dwBytes,&dwData2,&dwBytes2, DSBLOCK_ENTIREBUFFER); } + /* Get the big looping IDirectSoundBuffer_Play() rolling here, but only once at startup */ + hr = IDirectSoundBuffer_Play(lpDSB2, 0, 0, DSBPLAY_LOOPING); + hr = IDirectSoundBuffer_Unlock(lpDSB2,lpData,dwBytes,dwData2,dwBytes2); + if (!norec) + hr = IDirectSoundCaptureBuffer_Start(lpDSB2r,DSBPLAY_LOOPING); + //memset( lpData, 0x80,4 ); + } /* { long dwEvt=1; @@ -318,53 +248,60 @@ if (dwEvt>1 ){calcsound=0;return;} } */ - hr = IDirectSoundBuffer_GetCurrentPosition(lpDSB2, &i, 0); - if( hr != DSERR_BUFFERLOST ) - { + hr = IDirectSoundBuffer_GetCurrentPosition(lpDSB2, &i, 0); + if(hr != DSERR_BUFFERLOST) + { i -= ahitweak; - if (i < 0)i = i + ahisndbufsize; - if (i >= ahisndbufsize)i = i - ahisndbufsize; - i = ( i / (amigablksize * 4 )) * ( amigablksize * 4 ); - if (force == 1) - { - if (( oldpos != i) ) - { - INTREQ( 0xa000 ); - intcount = 1; - return; //to generate amiga ints every amigablksize - - } - else - { - return; - } - } - - } + if (i < 0) + i = i + ahisndbufsize; + if (i >= ahisndbufsize) + i = i - ahisndbufsize; + i = (i / (amigablksize * 4)) * (amigablksize * 4); + if (force == 1) + { + if ((oldpos != i)) + { + INTREQ(0xa000); + intcount = 1; + return; //to generate amiga ints every amigablksize + } else { + return; + } + } + } -hr = IDirectSoundBuffer_Lock( lpDSB2, oldpos, amigablksize * 4, &dwData1, &dwBytes1, &dwData2, &dwBytes2 ,0); + hr = IDirectSoundBuffer_Lock(lpDSB2, oldpos, amigablksize * 4, &dwData1, &dwBytes1, &dwData2, &dwBytes2, 0); + if(hr == DSERR_BUFFERLOST) + { + write_log("lostbuf%d %x\n",i,amigablksize); + IDirectSoundBuffer_Restore(lpDSB2); + hr = IDirectSoundBuffer_Lock(lpDSB2, 0, 0, &lpData, &dwBytes, NULL, NULL, DSBLOCK_ENTIREBUFFER); + dwData1=lpData;dwBytes1=dwBytes;dwBytes2=0;dwData2=0; + } + if(FAILED(hr)) + return; + //write_log("%d %x\n",freeblock,blksize); - if( hr == DSERR_BUFFERLOST ) - { - write_log("lostbuf%d %x\n",i,amigablksize); - IDirectSoundBuffer_Restore( lpDSB2 ); - hr = IDirectSoundBuffer_Lock( lpDSB2, 0, 0, &lpData, &dwBytes, NULL, NULL, DSBLOCK_ENTIREBUFFER ); - dwData1=lpData;dwBytes1=dwBytes;dwBytes2=0;dwData2=0; - } - - - //write_log("%d %x\n",freeblock,blksize); - - + if (currprefs.sound_stereo_swap_ahi) { + int i; + uae_s16 *p1 = (uae_s16*)ahisndbuffer; + uae_s16 *p2 = (uae_s16*)dwData1; + for (i = 0; i < dwBytes1 / 2; i += 2) { + p2[i + 0] = p1[i + 1]; + p2[i + 1] = p1[i + 0]; + } + } else { memcpy(dwData1,ahisndbuffer,dwBytes1); + } + sndptrmax = ahisndbuffer+ahisndbufsize; - ahisndbufpt = (int*)ahisndbuffer; + ahisndbufpt = (int*)ahisndbuffer; -IDirectSoundBuffer_Unlock(lpDSB2, dwData1,dwBytes1,dwData2, dwBytes2); - oldpos = i; - //oldpos=oldpos+(amigablksize*4); - //if (oldpos >= ahisndbufsize)oldpos=0; + IDirectSoundBuffer_Unlock(lpDSB2, dwData1,dwBytes1,dwData2, dwBytes2); + oldpos = i; + //oldpos=oldpos+(amigablksize*4); + //if (oldpos >= ahisndbufsize)oldpos=0; } @@ -374,9 +311,7 @@ IDirectSoundBuffer_Unlock(lpDSB2, dwData1,dwBytes1,dwData2, dwBytes2); void ahi_finish_sound_buffer( void ) { sound_flushes2++; - ahi_updatesound(2); - } extern GUID sound_device_guid[]; @@ -388,7 +323,7 @@ static int ahi_init_sound_win32 (void) DSCAPS DSCaps; DSCBUFFERDESC sound_buffer_rec; - if (lpDS2 ) + if (lpDS2) return 0; enumerate_sound_devices (0); @@ -403,14 +338,15 @@ static int ahi_init_sound_win32 (void) soundneutral = 0; ahisndbufsize = (amigablksize*4)*NATIVBUFFNUM; // use 4 native buffer ahisndbuffer=malloc(ahisndbufsize+32); - if (!ahisndbuffer)return 0; + if (!ahisndbuffer) + return 0; hr = DirectSoundCreate( &sound_device_guid[currprefs.win32_soundcard], &lpDS2, NULL ); - if (hr != DS_OK) + if (FAILED(hr)) { - write_log( "DirectSoundCreate() failure: %s\n", DSError2 (hr)); + write_log( "DirectSoundCreate() failure: %s\n", DXError(hr)); return 0; } - memset (&sound_buffer, 0, sizeof( DSBUFFERDESC )); + memset (&sound_buffer, 0, sizeof( DSBUFFERDESC )); sound_buffer.dwSize = sizeof( DSBUFFERDESC ); sound_buffer.dwFlags = DSBCAPS_PRIMARYBUFFER; sound_buffer.dwBufferBytes = 0; @@ -429,35 +365,35 @@ static int ahi_init_sound_win32 (void) - DSCaps.dwSize = sizeof( DSCAPS ); - hr = IDirectSound_GetCaps( lpDS2, &DSCaps ); - if( hr == DS_OK ) + DSCaps.dwSize = sizeof(DSCAPS); + hr = IDirectSound_GetCaps(lpDS2, &DSCaps); + if(SUCCEEDED(hr)) { - if( DSCaps.dwFlags & DSCAPS_EMULDRIVER ) + if(DSCaps.dwFlags & DSCAPS_EMULDRIVER) write_log( "Your DirectSound Driver is emulated via WaveOut - yuck!\n" ); } - if FAILED(IDirectSound_SetCooperativeLevel( - lpDS2,dsound_tmpw, DSSCL_PRIORITY)) + if FAILED(IDirectSound_SetCooperativeLevel(lpDS2,dsound_tmpw, DSSCL_PRIORITY)) return 0; - hr = IDirectSound_CreateSoundBuffer (lpDS2, &sound_buffer, &lpDSBprimary2, NULL); - if( hr != DS_OK ) + hr = IDirectSound_CreateSoundBuffer(lpDS2, &sound_buffer, &lpDSBprimary2, NULL); + if(FAILED(hr)) { - write_log( "CreateSoundBuffer() failure: %s\n", DSError2( hr ) ); + write_log("CreateSoundBuffer() failure: %s\n", DXError(hr)); return 0; } - hr = IDirectSoundBuffer_SetFormat (lpDSBprimary2, &wavfmt); - if( hr != DS_OK ) + hr = IDirectSoundBuffer_SetFormat(lpDSBprimary2, &wavfmt); + if(FAILED(hr)) { - write_log( "SetFormat() failure: %s\n", DSError2 (hr)); + write_log( "SetFormat() failure: %s\n", DXError(hr)); return 0; } sound_buffer.dwBufferBytes = ahisndbufsize; sound_buffer.lpwfxFormat = &wavfmt; - sound_buffer.dwFlags = DSBCAPS_CTRLFREQUENCY | DSBCAPS_CTRLVOLUME /*| DSBCAPS_CTRLPOSITIONNOTIFY */| DSBCAPS_GETCURRENTPOSITION2|DSBCAPS_GLOBALFOCUS |DSBCAPS_STATIC ; - hr = IDirectSound_CreateSoundBuffer( lpDS2, &sound_buffer, &lpDSB2, NULL ); - if (hr != DS_OK) + sound_buffer.dwFlags = DSBCAPS_CTRLFREQUENCY | DSBCAPS_CTRLVOLUME /*| DSBCAPS_CTRLPOSITIONNOTIFY */ + | DSBCAPS_GETCURRENTPOSITION2|DSBCAPS_GLOBALFOCUS |DSBCAPS_STATIC ; + hr = IDirectSound_CreateSoundBuffer(lpDS2, &sound_buffer, &lpDSB2, NULL); + if (FAILED(hr)) { - write_log ("CreateSoundBuffer() failure: %s\n", DSError2 (hr)); + write_log("CreateSoundBuffer() failure: %s\n", DXError(hr)); return 0; } /* //used for PositionNotify @@ -486,52 +422,50 @@ static int ahi_init_sound_win32 (void) */ hr = IDirectSoundBuffer_SetVolume (lpDSB2, 0); - if (hr != DS_OK) + if (FAILED(hr)) { - write_log( "SetVolume() 2 failure: %s\n", DSError2 (hr)); - return 0; + write_log("SetVolume() 2 failure: %s\n", DXError(hr)); + return 0; } - hr = IDirectSoundBuffer_GetFormat (lpDSBprimary2,&wavfmt,500,0); - if( hr != DS_OK ) + hr = IDirectSoundBuffer_GetFormat(lpDSBprimary2,&wavfmt,500,0); + if(FAILED(hr)) { - write_log( "GetFormat() failure: %s\n", DSError2 (hr)); - return 0; + write_log("GetFormat() failure: %s\n", DXError(hr)); + return 0; } // Record begin - hr = DirectSoundCaptureCreate( NULL, &lpDS2r, NULL ); - if (hr != DS_OK) + hr = DirectSoundCaptureCreate( NULL, &lpDS2r, NULL ); + if (FAILED(hr)) { - write_log( "DirectSoundCaptureCreate() failure: %s\n", DSError2 (hr)); - norec = 1; + write_log( "DirectSoundCaptureCreate() failure: %s\n", DXError(hr)); + norec = 1; } memset (&sound_buffer_rec, 0, sizeof( DSCBUFFERDESC )); sound_buffer_rec.dwSize = sizeof( DSCBUFFERDESC ); - sound_buffer_rec.dwBufferBytes = amigablksize*4*RECORDBUFFER; + sound_buffer_rec.dwBufferBytes = amigablksize*4*RECORDBUFFER; sound_buffer_rec.lpwfxFormat = &wavfmt; sound_buffer_rec.dwFlags = 0 ; - if (!norec) - { - hr = IDirectSoundCapture_CreateCaptureBuffer( lpDS2r, &sound_buffer_rec, &lpDSB2r, NULL ); - } - if (hr != DS_OK) - { - write_log ("CreateCaptureSoundBuffer() failure: %s\n", DSError2 (hr)); - norec = 1; - } - else + if (!norec) + { + hr = IDirectSoundCapture_CreateCaptureBuffer( lpDS2r, &sound_buffer_rec, &lpDSB2r, NULL ); + if (FAILED(hr)) + { + write_log ("CreateCaptureSoundBuffer() failure: %s\n", DXError(hr)); + norec = 1; + } + } - - - - if(ahisndbuffer==0)return 0; + if(ahisndbuffer==0) + return 0; ahisndbufpt =(int*) ahisndbuffer; sndptrmax = ahisndbuffer + ahisndbufsize; samplecount = 0; - memset( ahisndbuffer, soundneutral,amigablksize*8 ); + memset(ahisndbuffer, soundneutral, amigablksize*8); write_log("Init AHI Sound Rate %d Buffsize %d\n",sound_freq_ahi,amigablksize); - if (!norec)write_log("Init AHI Audio Recording \n"); + if (!norec) + write_log("Init AHI Audio Recording \n"); ahi_on = 1; return sound_freq_ahi; } @@ -564,18 +498,16 @@ uae_u32 ahi_demux (void) // d0 1=closesound d1=unit // d0 2=writesamples d1=unit a0=addr write blksize samples to card // d0 3=readsamples d1=unit a0=addr read samples from card ret: d0=samples read - // make sure you have from amigaside blksize*4 mem alloced - // d0=-1 no data available d0=-2 no recording open - // d0 > 0 there are more blksize Data in the que - // do the loop until d0 get 0 - // if d0 is greater than 200 bring a message - // that show the user that data is lost - // maximum blocksbuffered are 250 (8,5 sec) + // make sure you have from amigaside blksize*4 mem alloced + // d0=-1 no data available d0=-2 no recording open + // d0 > 0 there are more blksize Data in the que + // do the loop until d0 get 0 + // if d0 is greater than 200 bring a message + // that show the user that data is lost + // maximum blocksbuffered are 250 (8,5 sec) // d0 4=writeinterrupt d1=unit d0=0 no interrupt happen for this unit - // d0=-2 no playing open - + // d0=-2 no playing open //note units for now not support use only unit 0 - // d0=10 get clipboard size d0=size in bytes // d0=11 get clipboard data a0=clipboarddata //Note: a get clipboard size must do before @@ -592,316 +524,331 @@ uae_u32 ahi_demux (void) // d0=108 free swap array // d0=200 ahitweak d1=offset for dsound position pointer -int opcode = m68k_dreg (regs, 0); -switch (opcode) { - int i,slen,t,todo,byte1,byte2; + int opcode = m68k_dreg (regs, 0); + switch (opcode) + { + int i,slen,t,todo,byte1,byte2; LPTSTR p,p2,pos1,pos2; uae_u32 src, num_vars; static int cap_pos,clipsize; - static LPTSTR clipdat; + static LPTSTR clipdat; int cur_pos; - case 0: - cap_pos=0; - sound_freq_ahi=m68k_dreg (regs, 2); - amigablksize=m68k_dreg (regs, 3); - sound_freq_ahi=ahi_open_sound(); - uaevar.changenum--; - return sound_freq_ahi; - case 1: - ahi_close_sound(); - sound_freq_ahi = 0; - return 0; + case 0: + cap_pos=0; + sound_freq_ahi=m68k_dreg (regs, 2); + amigablksize=m68k_dreg (regs, 3); + sound_freq_ahi=ahi_open_sound(); + uaevar.changenum--; + return sound_freq_ahi; + + case 1: + ahi_close_sound(); + sound_freq_ahi = 0; + return 0; + case 2: - addr=(char *)m68k_areg (regs, 0); - for (i=0;i<(amigablksize*4);i+=4) - { - - ahisndbufpt[0]=get_long((unsigned int)addr+i); - ahisndbufpt+=1; - /*ahisndbufpt[0]=chipmem_bget((unsigned int)addr+i+2); - ahisndbufpt+=1; - ahisndbufpt[0]=chipmem_bget((unsigned int)addr+i+1); - ahisndbufpt+=1; - ahisndbufpt[0]=chipmem_bget((unsigned int)addr+i); - ahisndbufpt+=1;*/ - } - ahi_finish_sound_buffer(); - return amigablksize; + addr=(char *)m68k_areg (regs, 0); + for (i=0;i<(amigablksize*4);i+=4) + { + ahisndbufpt[0] = get_long((unsigned int)addr+i); + ahisndbufpt+=1; + /*ahisndbufpt[0]=chipmem_bget((unsigned int)addr+i+2); + ahisndbufpt+=1; + ahisndbufpt[0]=chipmem_bget((unsigned int)addr+i+1); + ahisndbufpt+=1; + ahisndbufpt[0]=chipmem_bget((unsigned int)addr+i); + ahisndbufpt+=1;*/ + } + ahi_finish_sound_buffer(); + return amigablksize; + case 3: - if (norec)return -1; - if (!ahi_on)return -2; - i = IDirectSoundCaptureBuffer_GetCurrentPosition(lpDSB2r,&t,&cur_pos); - t = amigablksize*4; + if (norec)return -1; + if (!ahi_on)return -2; + i = IDirectSoundCaptureBuffer_GetCurrentPosition(lpDSB2r,&t,&cur_pos); + t = amigablksize*4; - if (cap_pos<=cur_pos)todo=cur_pos-cap_pos; - else - todo=cur_pos+(RECORDBUFFER*t)-cap_pos; - if (todo 0) + addr = (char *)m68k_areg (regs, 0); + addr = (char *)get_real_address ((uae_u32)addr); + i = OpenClipboard (0); + EmptyClipboard(); + slen = strlen(addr); + p = GlobalAlloc (GMEM_DDESHARE,slen+2); + p2 = GlobalLock (p); + memcpy (p2,addr,slen); + p2[slen]=0; + GlobalUnlock (p); + i = (int)SetClipboardData (CF_TEXT,p2); + CloseClipboard (); + GlobalFree (p); + return 0; + + case 13: /* HACK */ + { //for higher P96 mouse draw rate + extern int p96hack_vpos2,hack_vpos,p96refresh_active; + extern uae_u16 vtotal; + extern unsigned int new_beamcon0; + p96hack_vpos2 = 0; + if (m68k_dreg (regs, 1) > 0) p96hack_vpos2 = 15625 / m68k_dreg (regs, 1); - p96refresh_active=1; - picasso_refresh (0); - } //end for higher P96 mouse draw rate - return 0; + p96refresh_active=1; + picasso_refresh (0); + } //end for higher P96 mouse draw rate + return 0; case 20: - return enforcer_enable(m68k_dreg (regs, 1)); + return enforcer_enable(m68k_dreg (regs, 1)); case 21: - return enforcer_disable(); + return enforcer_disable(); case 25: - flushprinter (); + flushprinter (); return 0; case 100: // open dll - { - char *dllname; - uae_u32 result; - dllname = ( char *) m68k_areg (regs, 0); - dllname = (char *)get_real_address ((uae_u32)dllname); - result=(uae_u32) LoadLibrary(dllname); - write_log("%s windows dll/alib loaded at %d (0 mean failure)\n",dllname,result); - return result; - } + { + char *dllname; + uae_u32 result; + dllname = ( char *) m68k_areg (regs, 0); + dllname = (char *)get_real_address ((uae_u32)dllname); + result=(uae_u32) LoadLibrary(dllname); + write_log("%s windows dll/alib loaded at %d (0 mean failure)\n",dllname,result); + return result; + } + case 101: //get dll label - { - HMODULE m; - char *funcname; - m = (HMODULE) m68k_dreg (regs, 1); - funcname = (char *)m68k_areg (regs, 0); - funcname = (char *)get_real_address ((uae_u32)funcname); - return (uae_u32) GetProcAddress(m,funcname); - } + { + HMODULE m; + char *funcname; + m = (HMODULE) m68k_dreg (regs, 1); + funcname = (char *)m68k_areg (regs, 0); + funcname = (char *)get_real_address ((uae_u32)funcname); + return (uae_u32) GetProcAddress(m,funcname); + } + case 102: //execute native code - return emulib_ExecuteNativeCode2 (); + return emulib_ExecuteNativeCode2 (); case 103: //close dll - { - HMODULE libaddr; - libaddr= (HMODULE) m68k_dreg (regs, 1); - FreeLibrary(libaddr); - return 0; - } + { + HMODULE libaddr; + libaddr = (HMODULE) m68k_dreg (regs, 1); + FreeLibrary(libaddr); + return 0; + } + case 104: //screenlost { - static int oldnum=0; - if (uaevar.changenum == oldnum)return 0; - oldnum=uaevar.changenum;return 1; + static int oldnum=0; + if (uaevar.changenum == oldnum) + return 0; + oldnum=uaevar.changenum; + return 1; } - case 105: //returns memory offset + + case 105: //returns memory offset return (uae_u32) get_real_address(0); - case 106: //byteswap 16bit vars - //a0 = start address - //d1 = number of 16bit vars - //returns address of new array - src = m68k_areg(regs, 0); - num_vars = m68k_dreg(regs, 1); + case 106: //byteswap 16bit vars + //a0 = start address + //d1 = number of 16bit vars + //returns address of new array + src = m68k_areg(regs, 0); + num_vars = m68k_dreg(regs, 1); - if (bswap_buffer_size < num_vars * 2) { - bswap_buffer_size = (num_vars + 1024) * 2; - free(bswap_buffer); - bswap_buffer = (void*)malloc(bswap_buffer_size); - } - __asm { - mov esi, dword ptr [src] - mov edi, dword ptr [bswap_buffer] - mov ecx, num_vars - - mov ebx, ecx - and ecx, 3 - je BSWAP_WORD_4X - - BSWAP_WORD_LOOP: - mov ax, [esi] - mov dl, al - mov al, ah - mov ah, dl - mov [edi], ax - add esi, 2 - add edi, 2 - loopne BSWAP_WORD_LOOP + if (bswap_buffer_size < num_vars * 2) { + bswap_buffer_size = (num_vars + 1024) * 2; + free(bswap_buffer); + bswap_buffer = (void*)malloc(bswap_buffer_size); + } + __asm { + mov esi, dword ptr [src] + mov edi, dword ptr [bswap_buffer] + mov ecx, num_vars - BSWAP_WORD_4X: - mov ecx, ebx - shr ecx, 2 - je BSWAP_WORD_END - BSWAP_WORD_4X_LOOP: - mov ax, [esi] - mov dl, al - mov al, ah - mov ah, dl - mov [edi], ax - mov ax, [esi+2] - mov dl, al - mov al, ah - mov ah, dl - mov [edi+2], ax - mov ax, [esi+4] - mov dl, al - mov al, ah - mov ah, dl - mov [edi+4], ax - mov ax, [esi+6] - mov dl, al - mov al, ah - mov ah, dl - mov [edi+6], ax - add esi, 8 - add edi, 8 - loopne BSWAP_WORD_4X_LOOP + mov ebx, ecx + and ecx, 3 + je BSWAP_WORD_4X - BSWAP_WORD_END: - } - return (uae_u32) bswap_buffer; - case 107: //byteswap 32bit vars - see case 106 - //a0 = start address - //d1 = number of 32bit vars - //returns address of new array - src = m68k_areg(regs, 0); - num_vars = m68k_dreg(regs, 1); - if (bswap_buffer_size < num_vars * 4) { - bswap_buffer_size = (num_vars + 16384) * 4; - free(bswap_buffer); - bswap_buffer = (void*)malloc(bswap_buffer_size); - } - __asm { - mov esi, dword ptr [src] - mov edi, dword ptr [bswap_buffer] - mov ecx, num_vars - - mov ebx, ecx - and ecx, 3 - je BSWAP_DWORD_4X - - BSWAP_DWORD_LOOP: - mov eax, [esi] - bswap eax - mov [edi], eax - add esi, 4 - add edi, 4 - loopne BSWAP_DWORD_LOOP + BSWAP_WORD_LOOP: + mov ax, [esi] + mov dl, al + mov al, ah + mov ah, dl + mov [edi], ax + add esi, 2 + add edi, 2 + loopne BSWAP_WORD_LOOP + + BSWAP_WORD_4X: + mov ecx, ebx + shr ecx, 2 + je BSWAP_WORD_END + BSWAP_WORD_4X_LOOP: + mov ax, [esi] + mov dl, al + mov al, ah + mov ah, dl + mov [edi], ax + mov ax, [esi+2] + mov dl, al + mov al, ah + mov ah, dl + mov [edi+2], ax + mov ax, [esi+4] + mov dl, al + mov al, ah + mov ah, dl + mov [edi+4], ax + mov ax, [esi+6] + mov dl, al + mov al, ah + mov ah, dl + mov [edi+6], ax + add esi, 8 + add edi, 8 + loopne BSWAP_WORD_4X_LOOP + BSWAP_WORD_END: + } + return (uae_u32) bswap_buffer; + + case 107: //byteswap 32bit vars - see case 106 + //a0 = start address + //d1 = number of 32bit vars + //returns address of new array + src = m68k_areg(regs, 0); + num_vars = m68k_dreg(regs, 1); + if (bswap_buffer_size < num_vars * 4) { + bswap_buffer_size = (num_vars + 16384) * 4; + free(bswap_buffer); + bswap_buffer = (void*)malloc(bswap_buffer_size); + } + __asm { + mov esi, dword ptr [src] + mov edi, dword ptr [bswap_buffer] + mov ecx, num_vars + + mov ebx, ecx + and ecx, 3 + je BSWAP_DWORD_4X - BSWAP_DWORD_4X: - mov ecx, ebx - shr ecx, 2 - je BSWAP_DWORD_END - BSWAP_DWORD_4X_LOOP: - mov eax, [esi] - bswap eax - mov [edi], eax - mov eax, [esi+4] - bswap eax - mov [edi+4], eax - mov eax, [esi+8] - bswap eax - mov [edi+8], eax - mov eax, [esi+12] - bswap eax - mov [edi+12], eax - add esi, 16 - add edi, 16 - loopne BSWAP_DWORD_4X_LOOP + BSWAP_DWORD_LOOP: + mov eax, [esi] + bswap eax + mov [edi], eax + add esi, 4 + add edi, 4 + loopne BSWAP_DWORD_LOOP + + BSWAP_DWORD_4X: + mov ecx, ebx + shr ecx, 2 + je BSWAP_DWORD_END + BSWAP_DWORD_4X_LOOP: + mov eax, [esi] + bswap eax + mov [edi], eax + mov eax, [esi+4] + bswap eax + mov [edi+4], eax + mov eax, [esi+8] + bswap eax + mov [edi+8], eax + mov eax, [esi+12] + bswap eax + mov [edi+12], eax + add esi, 16 + add edi, 16 + loopne BSWAP_DWORD_4X_LOOP - BSWAP_DWORD_END: - } - return (uae_u32) bswap_buffer; - case 108: //frees swap array - bswap_buffer_size = 0; - free(bswap_buffer); - bswap_buffer = NULL; - return 0; + BSWAP_DWORD_END: + } + return (uae_u32) bswap_buffer; + + case 108: //frees swap array + bswap_buffer_size = 0; + free(bswap_buffer); + bswap_buffer = NULL; + return 0; + case 200: - ahitweak = m68k_dreg (regs, 1); - ahi_pollrate = m68k_dreg (regs, 2); - if (ahi_pollrate < 10) - ahi_pollrate = 10; - if (ahi_pollrate > 60) - ahi_pollrate = 60; + ahitweak = m68k_dreg (regs, 1); + ahi_pollrate = m68k_dreg (regs, 2); + if (ahi_pollrate < 10) + ahi_pollrate = 10; + if (ahi_pollrate > 60) + ahi_pollrate = 60; return 1; + default: return 0x12345678; // Code for not supportet function - } + } } diff --git a/od-win32/blkdev_win32_ioctl.c b/od-win32/blkdev_win32_ioctl.c index d1996d2f..9f908bfd 100755 --- a/od-win32/blkdev_win32_ioctl.c +++ b/od-win32/blkdev_win32_ioctl.c @@ -186,7 +186,7 @@ static uae_u8 *ioctl_command_read (int unitnum, int sector) while (cnt-- > 0) { gui_cd_led (1); seterrormode (); - if (SetFilePointer (ciw32[unitnum].h, sector * 2048, 0, FILE_BEGIN) == INVALID_SET_FILE_POINTER) { + if (SetFilePointer (ciw32[unitnum].h, sector * 2048, 0, FILE_BEGIN) == INVALID_SET_FILE_POINTER) { reseterrormode (); if (win32_error (unitnum, "SetFilePointer") < 0) continue; @@ -257,7 +257,7 @@ static uae_u8 *ioctl_command_toc (int unitnum) seterrormode (); if (!DeviceIoControl(ciw32[unitnum].h, IOCTL_CDROM_READ_TOC, NULL, 0, &toc, sizeof(toc), &len, NULL)) { reseterrormode (); - if (!win32_error (unitnum, "IOCTL_CDROM_READ_TOC")) + if (win32_error (unitnum, "IOCTL_CDROM_READ_TOC") < 0) continue; return 0; } diff --git a/od-win32/dinput.c b/od-win32/dinput.c index 6ace22ca..0812860c 100755 --- a/od-win32/dinput.c +++ b/od-win32/dinput.c @@ -659,7 +659,7 @@ static BOOL CALLBACK di_enumcallback (LPCDIDEVICEINSTANCE lpddi, LPVOID *dd) lpddi->guidInstance.Data1, lpddi->guidInstance.Data2, lpddi->guidInstance.Data3, lpddi->guidInstance.Data4[0], lpddi->guidInstance.Data4[1], lpddi->guidInstance.Data4[2], lpddi->guidInstance.Data4[3], lpddi->guidInstance.Data4[4], lpddi->guidInstance.Data4[5], lpddi->guidInstance.Data4[6], lpddi->guidInstance.Data4[7]); - write_log ("'%s' '%s' %08.8X (%s)\n", lpddi->tszProductName, lpddi->tszInstanceName, lpddi->dwDevType, typetxt); + write_log ("'%s' '%s' %08.8X [%s]\n", lpddi->tszProductName, lpddi->tszInstanceName, lpddi->dwDevType, typetxt); #endif if (did == di_mouse) { diff --git a/od-win32/dxwrap.c b/od-win32/dxwrap.c index d263329f..10128f9b 100755 --- a/od-win32/dxwrap.c +++ b/od-win32/dxwrap.c @@ -50,13 +50,13 @@ static int flipinterval_supported; static int restoresurface (LPDIRECTDRAWSURFACE7 surface) { HRESULT hr = IDirectDrawSurface7_Restore (surface); - if (hr == DD_OK) { + if (SUCCEEDED(hr)) { HRESULT hr2; DDBLTFX bltfx; memset (&bltfx, 0, sizeof (bltfx)); bltfx.dwSize = sizeof (bltfx); hr2 = IDirectDrawSurface7_Blt (surface, NULL, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &bltfx); - if (hr2 != DD_OK) { + if (FAILED(hr2)) { static int crap = 0; if (hr2 == 0x887601C2) { if (crap) @@ -265,12 +265,12 @@ static int LockStub( surface_type_e type ) IDirectDrawSurface7_Restore( DirectDrawState.primary.surface ); } - while ( (ddrval = IDirectDrawSurface7_Lock( surface, NULL, surfacedesc, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT, - NULL ) ) != DD_OK ) + while (FAILED(ddrval = IDirectDrawSurface7_Lock(surface, NULL, surfacedesc, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT, + NULL))) { if (ddrval == DDERR_SURFACELOST) { ddrval = restoresurface (surface); - if (ddrval != DD_OK) + if (FAILED(ddrval)) { result = 0; break; @@ -283,7 +283,7 @@ static int LockStub( surface_type_e type ) break; } } - if( ddrval == DD_OK ) + if(SUCCEEDED(ddrval)) result = 1; if( result ) @@ -680,8 +680,8 @@ int DirectDraw_Start( GUID *guid ) helcaps.dwSize = sizeof( helcaps ); ddrval = DirectDrawCreate( guid, &DirectDrawState.directdraw.ddx, NULL ); - if (ddrval != DD_OK) { - if ( guid != NULL) + if (FAILED(ddrval)) { + if (guid != NULL) return 0; goto oops; } @@ -691,7 +691,7 @@ int DirectDraw_Start( GUID *guid ) ddrval = IDirectDraw_QueryInterface( DirectDrawState.directdraw.ddx, &IID_IDirectDraw7, (LPVOID *)&DirectDrawState.directdraw.dd ); - if( ddrval != DD_OK ) + if(FAILED(ddrval)) { gui_message("start_ddraw(): DirectX 7 or newer required"); DirectDraw_Release(); @@ -701,7 +701,7 @@ int DirectDraw_Start( GUID *guid ) DirectDraw_GetCaps( &drivercaps, &helcaps ); ShowDDCaps( drivercaps, 1 ); ShowDDCaps( helcaps, 0 ); - if (DirectDraw_GetDisplayMode () == DD_OK) + if (SUCCEEDED(DirectDraw_GetDisplayMode ())) return 1; if (guid != NULL) { DirectDraw_Release (); @@ -787,8 +787,7 @@ HRESULT DirectDraw_SetCooperativeLevel( HWND window, int want_fullscreen ) want_fullscreen ? DDSCL_ALLOWREBOOT | DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN : DDSCL_NORMAL ); - if( ddrval == DD_OK ) - { + if(SUCCEEDED(ddrval)) { DirectDrawState.fullscreen = want_fullscreen; DirectDrawState.window = window; } @@ -945,7 +944,7 @@ static DWORD ConvertGDIColor( COLORREF dwGDIColor ) IDirectDrawSurface7_GetSurfaceDesc(DirectDrawState.primary.surface, &pdds); // Use GDI SetPixel to color match for us - if( dwGDIColor != CLR_INVALID && IDirectDrawSurface7_GetDC(DirectDrawState.primary.surface, &hdc) == DD_OK) + if(dwGDIColor != CLR_INVALID && SUCCEEDED(IDirectDrawSurface7_GetDC(DirectDrawState.primary.surface, &hdc))) { rgbT = GetPixel(hdc, 0, 0); // Save current pixel value SetPixel(hdc, 0, 0, dwGDIColor); // Set our value @@ -955,7 +954,7 @@ static DWORD ConvertGDIColor( COLORREF dwGDIColor ) // Now lock the surface so we can read back the converted color ddsd.dwSize = sizeof(ddsd); hr = IDirectDrawSurface7_Lock(DirectDrawState.primary.surface, NULL, &ddsd, DDLOCK_WAIT, NULL ); - if( hr == DD_OK) + if(SUCCEEDED(hr)) { dw = *(DWORD *) ddsd.lpSurface; if( ddsd.ddpfPixelFormat.dwRGBBitCount < 32 ) // Mask it to bpp @@ -964,7 +963,7 @@ static DWORD ConvertGDIColor( COLORREF dwGDIColor ) } // Now put the color that was there back. - if( dwGDIColor != CLR_INVALID && IDirectDrawSurface7_GetDC(DirectDrawState.primary.surface,&hdc) == DD_OK ) + if(dwGDIColor != CLR_INVALID && SUCCEEDED(IDirectDrawSurface7_GetDC(DirectDrawState.primary.surface,&hdc))) { SetPixel( hdc, 0, 0, rgbT ); IDirectDrawSurface7_ReleaseDC(DirectDrawState.primary.surface,hdc); @@ -1043,7 +1042,7 @@ HRESULT DirectDraw_CreateOverlaySurface(int width, int height, int bits, int typ // Attempt to create the surface with theses settings ddrval = IDirectDraw7_CreateSurface (DirectDrawState.directdraw.dd, &ddsd, &DirectDrawState.overlay.surface, NULL); - if( ddrval == DD_OK ) + if(SUCCEEDED(ddrval)) { DirectDrawState.isoverlay = 1; } @@ -1092,7 +1091,7 @@ HRESULT DirectDraw_CreateSurface( int width, int height ) &DirectDrawState.primary.desc, &DirectDrawState.primary.surface, NULL); - if (ddrval != DD_OK) { + if (FAILED(ddrval)) { // Create a non-flipping pair, since the flipping pair creation failed... ZeroMemory (&DirectDrawState.primary.desc, sizeof(DDSURFACEDESC2)); DirectDrawState.primary.desc.dwSize = sizeof(DDSURFACEDESC2); @@ -1118,7 +1117,7 @@ HRESULT DirectDraw_CreateSurface( int width, int height ) NULL); } - if( ddrval != DD_OK ) + if(FAILED(ddrval)) { goto out; } @@ -1135,14 +1134,14 @@ HRESULT DirectDraw_CreateSurface( int width, int height ) ddSCaps.dwCaps = DDSCAPS_BACKBUFFER; ddrval = IDirectDrawSurface7_GetAttachedSurface( DirectDrawState.primary.surface, &ddSCaps, &DirectDrawState.secondary.surface ); - if( ddrval == DD_OK ) + if(SUCCEEDED(ddrval)) { /* get third buffer */ ZeroMemory(&ddSCaps, sizeof(ddSCaps)); ddSCaps.dwCaps = DDSCAPS_FLIP; ddrval = IDirectDrawSurface7_GetAttachedSurface( DirectDrawState.secondary.surface, &ddSCaps, &DirectDrawState.tertiary.surface ); - if( ddrval == DD_OK ) + if(SUCCEEDED(ddrval)) { clearsurface (tertiary_surface); #if 0 @@ -1150,7 +1149,7 @@ HRESULT DirectDraw_CreateSurface( int width, int height ) ddrval = IDirectDrawSurface7_QueryInterface( DirectDrawState.tertiary.surface, &IID_IDirectDrawSurface7, (LPVOID *)&DirectDrawState.tertiary.surface ); - if( ddrval != DD_OK ) + if(FAILED(ddrval)) { goto out; } @@ -1165,7 +1164,7 @@ HRESULT DirectDraw_CreateSurface( int width, int height ) ddrval = IDirectDrawSurface_QueryInterface( DirectDrawState.secondary.surface, &IID_IDirectDrawSurface7, (LPVOID *)&DirectDrawState.secondary.surface ); - if( ddrval != DD_OK ) + if(FAILED(ddrval)) { goto out; } @@ -1183,7 +1182,7 @@ HRESULT DirectDraw_CreateSurface( int width, int height ) &IID_IDirectDrawSurface7, (LPVOID *)&DirectDrawState.primary.surface ); - if( ddrval != DD_OK ) + if(FAILED(ddrval)) { goto out; } @@ -1204,7 +1203,7 @@ HRESULT DirectDraw_CreateSurface( int width, int height ) &DirectDrawState.secondary.desc, &DirectDrawState.secondary.surface, NULL ); - if( ddrval != DD_OK ) + if(FAILED(ddrval)) { write_log( "DDRAW:Secondary surface creation attempt #1 failed with %s\n", DXError(ddrval)); DirectDrawState.secondary.desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY; @@ -1212,7 +1211,7 @@ HRESULT DirectDraw_CreateSurface( int width, int height ) &DirectDrawState.secondary.desc, &DirectDrawState.secondary.surface, NULL ); - if( ddrval == DD_OK ) + if(SUCCEEDED(ddrval)) write_log( "DDRAW: Secondary surface created in plain system-memory\n" ); else { @@ -1228,7 +1227,7 @@ HRESULT DirectDraw_CreateSurface( int width, int height ) ddrval = IDirectDrawSurface7_QueryInterface( DirectDrawState.secondary.surface, &IID_IDirectDrawSurface7, (LPVOID *)&DirectDrawState.secondary.surface ); - if( ddrval != DD_OK ) + if(FAILED(ddrval)) { goto out; } @@ -1325,7 +1324,7 @@ HRESULT DirectDraw_SetClipper( HWND hWnd ) ddrval = IDirectDrawSurface7_SetClipper( DirectDrawState.primary.surface, hWnd ? DirectDrawState.lpDDC : NULL ); - if( hWnd && ( ddrval == DD_OK ) ) + if( hWnd && SUCCEEDED(ddrval)) { ddrval = IDirectDrawClipper_SetHWnd( DirectDrawState.lpDDC, 0, hWnd ); } @@ -1402,7 +1401,7 @@ HRESULT DirectDraw_SetPalette( int remove ) remove ? NULL : DirectDrawState.lpDDP); if (ddrval == DDERR_SURFACELOST) { ddrval = restoresurface (DirectDrawState.primary.surface); - if (ddrval == DD_OK) { + if (SUCCEEDED(ddrval)) { ddrval = IDirectDrawSurface7_SetPalette (DirectDrawState.primary.surface, remove ? NULL : DirectDrawState.lpDDP); } @@ -1431,7 +1430,7 @@ HRESULT DirectDraw_CreatePalette( LPPALETTEENTRY pal ) ddrval = IDirectDraw_CreatePalette( DirectDrawState.directdraw.dd, DDPCAPS_8BIT | DDPCAPS_ALLOW256, pal, &DirectDrawState.lpDDP, NULL); - if( ddrval == DD_OK ) + if(SUCCEEDED(ddrval)) { ddrval = DirectDraw_SetPalette(0); } @@ -1613,7 +1612,7 @@ DWORD DirectDraw_CurrentHeight( void ) int DirectDraw_GetVerticalBlankStatus (void) { BOOL status; - if (IDirectDraw7_GetVerticalBlankStatus (DirectDrawState.directdraw.dd, &status) != DD_OK) + if (FAILED(IDirectDraw7_GetVerticalBlankStatus (DirectDrawState.directdraw.dd, &status))) return -1; return status; } @@ -1645,12 +1644,12 @@ static int DirectDraw_BltFastStub4( LPDIRECTDRAWSURFACE7 dstsurf, DWORD x, DWORD int result = 0; HRESULT ddrval; - while( ( ddrval = IDirectDrawSurface7_BltFast( dstsurf, x, y, srcsurf, srcrect, DDBLTFAST_NOCOLORKEY | DDBLTFAST_WAIT ) ) != DD_OK ) + while(FAILED(ddrval = IDirectDrawSurface7_BltFast( dstsurf, x, y, srcsurf, srcrect, DDBLTFAST_NOCOLORKEY | DDBLTFAST_WAIT ))) { if (ddrval == DDERR_SURFACELOST) { ddrval = restoresurface ( dstsurf ); - if (ddrval != DD_OK) + if (FAILED(ddrval)) { break; } @@ -1661,7 +1660,7 @@ static int DirectDraw_BltFastStub4( LPDIRECTDRAWSURFACE7 dstsurf, DWORD x, DWORD break; } } - if( ddrval == DD_OK ) + if(SUCCEEDED(ddrval)) { result = 1; } @@ -1736,7 +1735,7 @@ static int DirectDraw_BltStub( LPDIRECTDRAWSURFACE7 dstsurf, LPRECT dstrect, LPD int result = 0, errcnt = 0; HRESULT ddrval; - while( ( ddrval = IDirectDrawSurface7_Blt( dstsurf, dstrect, srcsurf, srcrect, flags, ddbltfx ) ) != DD_OK ) + while(FAILED(ddrval = IDirectDrawSurface7_Blt( dstsurf, dstrect, srcsurf, srcrect, flags, ddbltfx))) { if (ddrval == DDERR_SURFACELOST) { @@ -1744,7 +1743,7 @@ static int DirectDraw_BltStub( LPDIRECTDRAWSURFACE7 dstsurf, LPRECT dstrect, LPD return 1; errcnt++; ddrval = restoresurface ( dstsurf ); - if (ddrval != DD_OK) + if (FAILED(ddrval)) { break; } @@ -1763,7 +1762,7 @@ static int DirectDraw_BltStub( LPDIRECTDRAWSURFACE7 dstsurf, LPRECT dstrect, LPD } #endif } - if( ddrval == DD_OK ) + if(SUCCEEDED(ddrval)) { result = 1; } @@ -1834,7 +1833,7 @@ int DirectDraw_Flip(int wait) } else { return 1; } - if(ddrval == DD_OK) { + if(SUCCEEDED(ddrval)) { result = 1; } else { if (ddrval == DDERR_SURFACELOST) { @@ -2076,7 +2075,7 @@ HRESULT DirectDraw_UpdateOverlay( RECT sr, RECT dr ) result = IDirectDrawSurface7_UpdateOverlay( DirectDrawState.overlay.surface, &sr, DirectDrawState.primary.surface, &dr, overlayflags, &overlayfx); } - if (result != DD_OK) { + if (FAILED(result)) { if (result == DDERR_SURFACELOST) display_change_requested++; write_log ("UpdateOverlay failed %s\n", DXError (result)); @@ -2107,7 +2106,7 @@ int DirectDraw_GetPrimaryPixelFormat (LPDDPIXELFORMAT ddpf) ddrval = IDirectDrawSurface7_GetPixelFormat (DirectDrawState.overlay.surface, ddpf); else ddrval = IDirectDrawSurface7_GetPixelFormat (DirectDrawState.primary.surface, ddpf); - if (ddrval != DD_OK) { + if (FAILED(ddrval)) { write_log ("GetPixelFormat failed\n%s\n", DXError (ddrval)); return 0; } diff --git a/od-win32/keyboard_win32.c b/od-win32/keyboard_win32.c index 54d71536..7e1eb6e7 100755 --- a/od-win32/keyboard_win32.c +++ b/od-win32/keyboard_win32.c @@ -41,8 +41,6 @@ #include "akiko.h" #include "arcadia.h" -extern void screenshot(int); - //#define DBG_KEYBD 1 //#define DEBUG_KBD @@ -389,7 +387,7 @@ void my_kbd_handler (int keyboard, int scancode, int newstate) } break; case DIK_SYSRQ: - screenshot (endpressed() ? 1 : 0); + screenshot (endpressed() ? 1 : 0, 1); break; case DIK_PAUSE: if (endpressed ()) diff --git a/od-win32/mman.c b/od-win32/mman.c index 5e75be28..e68baf17 100755 --- a/od-win32/mman.c +++ b/od-win32/mman.c @@ -16,6 +16,7 @@ static struct shmid_ds shmids[MAX_SHMID]; static uae_u32 gfxoffs; uae_u32 natmem_offset = 0; +uae_u32 max_allowed_mman = 512; void init_shm(void) { @@ -33,10 +34,10 @@ void init_shm(void) while ((uae_u64)memstats.dwAvailPageFile + (uae_u64)memstats.dwAvailPhys >= ((uae_u64)max_z3fastmem << 1) && max_z3fastmem != ((uae_u64)2048 * 1024 * 1024)) - max_z3fastmem <<= 1; + max_z3fastmem <<= 1; size = max_z3fastmem; - if (size > 512 * 1024 * 1024) - size = 512 * 1024 * 1024; + if (size > max_allowed_mman * 1024 * 1024) + size = max_allowed_mman * 1024 * 1024; canbang = 0; gfxoffs = 0; diff --git a/od-win32/picasso96_win.c b/od-win32/picasso96_win.c index 267bb691..05416bdb 100755 --- a/od-win32/picasso96_win.c +++ b/od-win32/picasso96_win.c @@ -108,6 +108,41 @@ struct ScreenResolution hicolour = { 640, 480 }; struct ScreenResolution truecolour = { 640, 480 }; struct ScreenResolution alphacolour = { 640, 480 }; +#include "win32gui.h" +#include "resource.h" +#define UAE_RTG_LIBRARY_VERSION 40 +#define UAE_RTG_LIBRARY_REVISION 3993 +static void checkrtglibrary(void) +{ + uae_u32 v; + static int checked = FALSE; + + if (checked) + return; + v = get_long (4); // execbase + v += 378; // liblist + while ((v = get_long(v))) { + uae_u32 v2 = get_long(v + 10); // name + uae_u8 *p; + addrbank *b = &get_mem_bank(v2); + if (!b || !b->check (v2, 12)) + continue; + p = b->xlateaddr(v2); + if (!memcmp(p, "rtg.library\0", 12)) { + uae_u16 ver = get_word(v + 20); + uae_u16 rev = get_word(v + 22); + if (ver * 10000 + rev < UAE_RTG_LIBRARY_VERSION * 10000 + UAE_RTG_LIBRARY_REVISION) { + char msg[2000]; + WIN32GUI_LoadUIString(IDS_OLDRTGLIBRARY, msg, sizeof(msg)); + gui_message(msg, ver, rev, UAE_RTG_LIBRARY_VERSION, UAE_RTG_LIBRARY_REVISION); + } else { + write_log("P96: rtg.library %d.%d detected\n", ver, rev); + } + checked = TRUE; + } + } +} + static uae_u32 p2ctab[256][2]; static int set_gc_called = 0; //fastscreen @@ -1751,6 +1786,7 @@ void picasso_enablescreen (int on) wgfx_linestart = 0xFFFFFFFF; picasso_refresh (1); write_log ("SetSwitch() from threadid %d - showing %s screen\n", GetCurrentThreadId(), on ? "picasso96": "amiga"); + checkrtglibrary(); } /* diff --git a/od-win32/resources/resource.h b/od-win32/resources/resource.h index 05234511..52efc784 100755 --- a/od-win32/resources/resource.h +++ b/od-win32/resources/resource.h @@ -163,6 +163,7 @@ #define IDS_PRI_BELOWNORMAL 186 #define IDS_PRI_LOW 187 #define IDI_FOLDER 188 +#define IDS_OLDRTGLIBRARY 188 #define IDI_DISPLAY 190 #define IDI_ROOT 192 #define IDI_ICON2 194 @@ -220,6 +221,9 @@ #define IDS_STATEFILE_RAMDUMP 247 #define IDS_STATEFILE_WAVE 248 #define IDD_FRONTEND 249 +#define IDS_SOUND_SWAP_PAULA 249 +#define IDS_SOUND_SWAP_AHI 250 +#define IDS_SOUND_SWAP_BOTH 251 #define IDS_NUMSG_NEEDEXT2 300 #define IDS_NUMSG_NOROMKEY 301 #define IDS_NUMSG_KSROMCRCERROR 302 @@ -767,8 +771,11 @@ #define IDC_PATHS_ROMS 1661 #define IDC_SOUNDSTEREOMIX 1661 #define IDC_PATHS_CONFIGS 1662 +#define IDC_SOUNDSWAP 1662 #define IDC_PATHS_SCREENSHOTS 1663 #define IDC_PATHS_SAVESTATES 1664 +#define IDC_SOUNDSTEREOSWAPTXT 1664 +#define IDC_SOUNDSWAPTXT 1664 #define IDC_PATHS_SAVEIMAGES 1665 #define IDC_PATHS_ROML 1666 #define IDC_PATHS_CONFIGL 1667 @@ -836,7 +843,7 @@ #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 249 #define _APS_NEXT_COMMAND_VALUE 40021 -#define _APS_NEXT_CONTROL_VALUE 1703 +#define _APS_NEXT_CONTROL_VALUE 1704 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/od-win32/resources/winuae.rc b/od-win32/resources/winuae.rc index 32481f25..1d2a7249 100755 --- a/od-win32/resources/winuae.rc +++ b/od-win32/resources/winuae.rc @@ -136,8 +136,8 @@ BEGIN RTEXT "Z3-Fast:",IDC_Z3TEXT,139,85,30,10,SS_CENTERIMAGE CONTROL "Slider1",IDC_Z3FASTMEM,"msctls_trackbar32", TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,80,60,20 - RTEXT "RTG (graphics card):",IDC_GFXCARDTEXT,96,110,76,10, - SS_CENTERIMAGE + RTEXT "RTG: [] Graphics card memory. Required for Picasso96 emulation.", + IDC_GFXCARDTEXT,96,110,76,10,SS_NOTIFY | SS_CENTERIMAGE CONTROL "Slider1",IDC_P96MEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,105,60,20 EDITTEXT IDC_CHIPRAM,105,59,30,12,ES_CENTER | ES_READONLY @@ -329,28 +329,28 @@ BEGIN TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,138,75,106,19 EDITTEXT IDC_SOUNDBUFFERMEM,248,78,40,12,ES_CENTER | ES_READONLY GROUPBOX "Settings",IDC_SOUNDINTERPOLATION2,6,101,290,60 - RTEXT "Frequency:",IDC_SOUNDFREQTXT,34,110,37,8,SS_CENTERIMAGE - COMBOBOX IDC_SOUNDFREQ,36,119,67,75,CBS_DROPDOWN | WS_VSCROLL | + LTEXT "Frequency",IDC_SOUNDFREQTXT,13,111,37,8,SS_CENTERIMAGE + COMBOBOX IDC_SOUNDFREQ,15,120,59,75,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP - RTEXT "Audio filter:",IDC_SOUNDFILTERTXT,36,135,36,8, + LTEXT "Audio filter",IDC_SOUNDFILTERTXT,227,135,34,8, SS_CENTERIMAGE - COMBOBOX IDC_SOUNDFILTER,36,144,67,75,CBS_DROPDOWNLIST | + COMBOBOX IDC_SOUNDFILTER,227,144,62,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - RTEXT "Stereo mode:",IDC_SOUNDSTEREOTXT,116,110,43,8, + LTEXT "Stereo mode",IDC_SOUNDSTEREOTXT,86,111,41,8, SS_CENTERIMAGE - COMBOBOX IDC_SOUNDSTEREO,116,119,67,75,CBS_DROPDOWNLIST | + COMBOBOX IDC_SOUNDSTEREO,85,120,62,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - RTEXT "Interpolation:",IDC_SOUNDINTERPOLATIONTXT,115,135,41,8, + LTEXT "Interpolation",IDC_SOUNDINTERPOLATIONTXT,227,111,41,8, SS_CENTERIMAGE - COMBOBOX IDC_SOUNDINTERPOLATION,116,144,67,75,CBS_DROPDOWNLIST | + COMBOBOX IDC_SOUNDINTERPOLATION,227,119,62,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - RTEXT "Stereo separation:",IDC_SOUNDSTEREOSEPTXT,196,110,58,8, + LTEXT "Stereo separation",IDC_SOUNDSTEREOSEPTXT,155,111,56,8, SS_CENTERIMAGE - COMBOBOX IDC_SOUNDSTEREOSEP,197,119,67,75,CBS_DROPDOWNLIST | + COMBOBOX IDC_SOUNDSTEREOSEP,156,120,62,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - RTEXT "Stereo mixing delay:",IDC_SOUNDSTEREOMIXTXT,196,135,63, - 8,SS_CENTERIMAGE - COMBOBOX IDC_SOUNDSTEREOMIX,197,144,67,75,CBS_DROPDOWNLIST | + LTEXT "Stereo mixing delay",IDC_SOUNDSTEREOMIXTXT,155,135,63,8, + SS_CENTERIMAGE + COMBOBOX IDC_SOUNDSTEREOMIX,156,144,62,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP GROUPBOX "Disk Drive Sound Emulation",IDC_STATIC,6,164,290,46 CONTROL "",IDC_SOUNDDRIVEVOLUME,"msctls_trackbar32", @@ -366,6 +366,10 @@ BEGIN TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,14,221,107,19 EDITTEXT IDC_SOUNDADJUSTNUM,124,224,40,12,ES_CENTER | ES_READONLY PUSHBUTTON "Calibrate",IDC_SOUNDCALIBRATE,183,223,40,14 + COMBOBOX IDC_SOUNDSWAP,85,144,62,75,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "Swap channels",IDC_SOUNDSWAPTXT,86,135,50,8, + SS_CENTERIMAGE END IDD_LOADSAVE DIALOGEX 0, 0, 302, 241 @@ -413,8 +417,9 @@ BEGIN BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,11,33,78,12 CONTROL "PostScript printer emulation",IDC_PSPRINTER,"Button", BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,93,33,100,12 - RTEXT "Autoflush timeout []Time in seconds after pending print job is automatically flushed.", - IDC_PRINTERAUTOFLUSHTXT,202,32,57,15,SS_CENTERIMAGE + RTEXT "Autoflush timeout [] Time in seconds after pending print job is automatically flushed.", + IDC_PRINTERAUTOFLUSHTXT,202,32,57,15,SS_NOTIFY | + SS_CENTERIMAGE EDITTEXT IDC_PRINTERAUTOFLUSH,263,33,25,12,ES_NUMBER RTEXT "Ghostscript extra parameters:",IDC_STATIC,12,49,91,15, SS_CENTERIMAGE @@ -426,8 +431,9 @@ BEGIN BS_VCENTER | WS_TABSTOP,132,83,48,13 CONTROL "RTS/CTS",IDC_SER_CTSRTS,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,185,83,53,12 - CONTROL "Direct",IDC_SERIAL_DIRECT,"Button",BS_AUTOCHECKBOX | - BS_VCENTER | WS_TABSTOP,243,83,46,12 + CONTROL "Direct []Use when emulating serial linked games on two PCs running WinUAE", + IDC_SERIAL_DIRECT,"Button",BS_AUTOCHECKBOX | BS_VCENTER | + WS_TABSTOP,243,83,46,12 GROUPBOX "MIDI",IDC_MIDIFRAME,4,104,292,33 RTEXT "Out:",IDC_MIDI,10,115,34,15,SS_CENTERIMAGE COMBOBOX IDC_MIDIOUTLIST,50,115,95,130,CBS_DROPDOWNLIST | @@ -435,14 +441,16 @@ BEGIN RTEXT "In:",IDC_MIDI2,150,115,29,15,SS_CENTERIMAGE COMBOBOX IDC_MIDIINLIST,185,115,95,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - GROUPBOX "Amiga Mouse/Joystick Ports",IDC_PORT0,4,139,292,77 + GROUPBOX "Mouse/Joystick Ports",IDC_PORT0,4,139,292,75 COMBOBOX IDC_PORT0_JOYS,45,155,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_PORT1_JOYS,45,176,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "Swap Ports",IDC_SWAP,114,195,75,14 + PUSHBUTTON "Swap Ports",IDC_SWAP,211,195,75,14 RTEXT "Port 0:",IDC_STATIC,11,154,25,15,SS_CENTERIMAGE RTEXT "Port 1:",IDC_STATIC,11,175,25,15,SS_CENTERIMAGE + LTEXT "X-Arcade layout information []#1",IDC_STATIC,16,195,106, + 15,SS_NOTIFY | SS_CENTERIMAGE END IDD_CONTRIBUTORS DIALOGEX 0, 0, 411, 242 @@ -1287,6 +1295,7 @@ BEGIN IDS_PRI_NORMAL "Normal" IDS_PRI_BELOWNORMAL "Below Normal" IDS_PRI_LOW "Low" + IDS_OLDRTGLIBRARY "Your LIBS:Picasso96/rtg.library (%d.%d) requires updating.\nReplace it with version from ""Amiga Programs""-directory in WinUAE archive.\nNew library fixes graphics problems and increases performance." END STRINGTABLE @@ -1379,6 +1388,9 @@ BEGIN IDS_STATEFILE_UNCOMPRESSED "Uncompressed" IDS_STATEFILE_RAMDUMP "RAM dump" IDS_STATEFILE_WAVE "Wave audio dump" + IDS_SOUND_SWAP_PAULA "Paula only" + IDS_SOUND_SWAP_AHI "AHI only" + IDS_SOUND_SWAP_BOTH "Both" END STRINGTABLE @@ -1438,7 +1450,7 @@ END STRINGTABLE BEGIN IDS_QS_MODEL_UAE "High-end expanded configuration" - IDS_QS_MODEL_ARCADIA "Arcadia\nArcadia Multi Select system is arcade platform developed by Arcadia and Mastertronic. It is based on an Amiga 500 mainboard with ROM cage attached to expansion port. Arcadia ROM files go to ""Cartridge ROM File"" in ROM-panel." + IDS_QS_MODEL_ARCADIA "Your LIBS:Picasso96/rtg.library (%d.%d) needs updating\nReplace it with newer version from ""Amiga Programs""-directory in WinUAE archive." END #endif // English (U.S.) resources diff --git a/od-win32/screenshot.c b/od-win32/screenshot.c index db9129f9..79065b49 100755 --- a/od-win32/screenshot.c +++ b/od-win32/screenshot.c @@ -58,75 +58,114 @@ static int toclipboard (BITMAPINFO *bi, void *bmp) return v; } +static HDC surface_dc, offscreen_dc; +static BITMAPINFO bi; // bitmap info +static LPVOID lpvBits = NULL; // pointer to bitmap bits array +static HBITMAP offscreen_bitmap; +static int screenshot_prepared; + +void screenshot_free(void) +{ + if (surface_dc) + releasehdc (surface_dc); + surface_dc = NULL; + if(offscreen_dc) + DeleteDC(offscreen_dc); + offscreen_dc = NULL; + if(offscreen_bitmap) + DeleteObject(offscreen_bitmap); + offscreen_bitmap = NULL; + if(lpvBits) + free(lpvBits); + lpvBits = NULL; + screenshot_prepared = FALSE; +} + + +int screenshot_prepare(void) +{ + unsigned int width, height; + HGDIOBJ hgdiobj; + + screenshot_free(); + + width = WIN32GFX_GetWidth(); + height = WIN32GFX_GetHeight(); + + surface_dc = gethdc (); + if (surface_dc == NULL) + goto oops; + + // need a HBITMAP to convert it to a DIB + if((offscreen_bitmap = CreateCompatibleBitmap(surface_dc, width, height)) == NULL) + goto oops; // error + + // The bitmap is empty, so let's copy the contents of the surface to it. + // For that we need to select it into a device context. + if((offscreen_dc = CreateCompatibleDC(surface_dc)) == NULL) + goto oops; // error + + // select offscreen_bitmap into offscreen_dc + hgdiobj = SelectObject(offscreen_dc, offscreen_bitmap); + + // now we can copy the contents of the surface to the offscreen bitmap + BitBlt(offscreen_dc, 0, 0, width, height, surface_dc, 0, 0, SRCCOPY); + + // de-select offscreen_bitmap + SelectObject(offscreen_dc, hgdiobj); + + ZeroMemory(&bi, sizeof(bi)); + bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + bi.bmiHeader.biWidth = width; + bi.bmiHeader.biHeight = height; + bi.bmiHeader.biPlanes = 1; + bi.bmiHeader.biBitCount = 24; + bi.bmiHeader.biCompression = BI_RGB; + bi.bmiHeader.biSizeImage = (((bi.bmiHeader.biWidth * bi.bmiHeader.biBitCount + 31) & ~31) / 8) * bi.bmiHeader.biHeight; + bi.bmiHeader.biXPelsPerMeter = 0; + bi.bmiHeader.biYPelsPerMeter = 0; + bi.bmiHeader.biClrUsed = 0; + bi.bmiHeader.biClrImportant = 0; + + // Reserve memory for bitmap bits + if(!(lpvBits = malloc(bi.bmiHeader.biSizeImage))) + goto oops; // out of memory + + // Have GetDIBits convert offscreen_bitmap to a DIB (device-independent bitmap): + if(!GetDIBits(offscreen_dc, offscreen_bitmap, 0, bi.bmiHeader.biHeight, lpvBits, &bi, DIB_RGB_COLORS)) + goto oops; // GetDIBits FAILED + + releasehdc (surface_dc); + surface_dc = NULL; + screenshot_prepared = TRUE; + return 1; + +oops: + screenshot_free(); + return 0; +} + + /* Captures the Amiga display (DirectDraw, D3D or OpenGL) surface and saves it to file as a 24bit bitmap. */ -void screenshot(int mode) +void screenshot(int mode, int doprepare) { static int recursive; - FILE *fp = NULL; - HDC surface_dc = NULL; // GDI-compatible device context for the surface HBITMAP offscreen_bitmap = NULL; // bitmap that is converted to a DIB HDC offscreen_dc = NULL; // offscreen DC that we can select offscreen bitmap into - - BITMAPINFO bi; // bitmap info - LPVOID lpvBits = NULL; // pointer to bitmap bits array - - unsigned int width = WIN32GFX_GetWidth(); - unsigned int height = WIN32GFX_GetHeight(); - + if(recursive) return; recursive++; - surface_dc = gethdc (); - - // need a HBITMAP to convert it to a DIB - if((offscreen_bitmap = CreateCompatibleBitmap(surface_dc, width, height)) == NULL) - goto oops; // error - - // The bitmap is empty, so let's copy the contents of the surface to it. - // For that we need to select it into a device context. - if((offscreen_dc = CreateCompatibleDC(surface_dc)) == NULL) - goto oops; // error - - { - // select offscreen_bitmap into offscreen_dc - HGDIOBJ hgdiobj = SelectObject(offscreen_dc, offscreen_bitmap); - - // now we can copy the contents of the surface to the offscreen bitmap - BitBlt(offscreen_dc, 0, 0, width, height, surface_dc, 0, 0, SRCCOPY); - - // de-select offscreen_bitmap - SelectObject(offscreen_dc, hgdiobj); + if (!screenshot_prepared || doprepare) { + if (!screenshot_prepare()) + goto oops; } - - ZeroMemory(&bi, sizeof(bi)); - bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - bi.bmiHeader.biWidth = width; - bi.bmiHeader.biHeight = height; - bi.bmiHeader.biPlanes = 1; - bi.bmiHeader.biBitCount = 24; - bi.bmiHeader.biCompression = BI_RGB; - bi.bmiHeader.biSizeImage = (((bi.bmiHeader.biWidth * bi.bmiHeader.biBitCount + 31) & ~31) / 8) * bi.bmiHeader.biHeight; - bi.bmiHeader.biXPelsPerMeter = 0; - bi.bmiHeader.biYPelsPerMeter = 0; - bi.bmiHeader.biClrUsed = 0; - bi.bmiHeader.biClrImportant = 0; - - // Reserve memory for bitmap bits - if(!(lpvBits = malloc(bi.bmiHeader.biSizeImage))) - goto oops; // out of memory - - // Have GetDIBits convert offscreen_bitmap to a DIB (device-independent bitmap): - if(!GetDIBits(offscreen_dc, offscreen_bitmap, 0, bi.bmiHeader.biHeight, lpvBits, &bi, DIB_RGB_COLORS)) - goto oops; // GetDIBits FAILED - - releasehdc (surface_dc); - surface_dc = 0; if (mode == 0) { toclipboard (&bi, lpvBits); @@ -187,23 +226,14 @@ void screenshot(int mode) } oops: - if (surface_dc) - releasehdc (surface_dc); - - if(offscreen_dc) - DeleteDC(offscreen_dc); - - if(offscreen_bitmap) - DeleteObject(offscreen_bitmap); - - if(lpvBits) - free(lpvBits); - if(fp) fclose(fp); + if (doprepare) + screenshot_free(); + recursive--; - + return; } diff --git a/od-win32/sounddep/sound.c b/od-win32/sounddep/sound.c index fdb770e6..242b7a76 100755 --- a/od-win32/sounddep/sound.c +++ b/od-win32/sounddep/sound.c @@ -106,7 +106,7 @@ static void clearbuffer (void) IDirectSoundBuffer_Restore (lpDSBsecondary); hr = IDirectSoundBuffer_Lock (lpDSBsecondary, 0, dsoundbuf, &buffer, &size, NULL, NULL, 0); } - if (hr != DS_OK) { + if (FAILED(hr)) { write_log ("failed to Lock sound buffer (clear): %s\n", DXError (hr)); return; } @@ -128,7 +128,7 @@ static void resume_audio_ds (void) paused = 0; clearbuffer (); hr = IDirectSoundBuffer_Play (lpDSBsecondary, 0, 0, DSBPLAY_LOOPING); - if (hr != DS_OK) + if (FAILED(hr)) write_log ("Play failed: %s\n", DXError (hr)); writepos = snd_configsize; } @@ -141,7 +141,7 @@ static int restore (DWORD hr) write_log ("sound buffer lost\n"); #endif hr = IDirectSoundBuffer_Restore (lpDSBsecondary); - if (hr != DS_OK) { + if (FAILED(hr)) { //write_log ("restore failed %s\n", DXError (hr)); return 1; } @@ -168,7 +168,7 @@ static int getpos (void) HRESULT hr; hr = IDirectSoundBuffer_GetCurrentPosition (lpDSBsecondary, &playpos, &safepos); - if (hr != DS_OK) { + if (FAILED(hr)) { write_log ("GetCurrentPosition failed: %s\n", DXError (hr)); return -1; } @@ -238,7 +238,7 @@ static void setvolume (void) if (currprefs.sound_volume < 100 && !mute) vol = (LONG)((DSBVOLUME_MIN / 2) + (-DSBVOLUME_MIN / 2) * log (1 + (2.718281828 - 1) * (1 - currprefs.sound_volume / 100.0))); hr = IDirectSoundBuffer_SetVolume (lpDSBsecondary, vol); - if (hr != DS_OK) + if (FAILED(hr)) write_log ("SOUND: SetVolume(%d) failed: %s\n", vol, DXError (hr)); } @@ -265,14 +265,14 @@ static int open_audio_ds (int size) sndbufsize = SND_MAX_BUFFER; hr = DirectSoundCreate (&sound_device_guid[currprefs.win32_soundcard], &lpDS, NULL); - if (hr != DS_OK) { + if (FAILED(hr)) { write_log ("SOUND: DirectSoundCreate() failure: %s\n", DXError (hr)); return 0; } memset (&DSCaps, 0, sizeof (DSCaps)); DSCaps.dwSize = sizeof (DSCaps); hr = IDirectSound_GetCaps (lpDS, &DSCaps); - if (hr!= DS_OK) { + if (FAILED(hr)) { write_log ("SOUND: Error getting DirectSound capabilities: %s\n", DXError (hr)); goto error; } @@ -300,7 +300,7 @@ static int open_audio_ds (int size) sound_buffer.dwSize = sizeof (sound_buffer); sound_buffer.dwFlags = DSBCAPS_PRIMARYBUFFER | DSBCAPS_GETCURRENTPOSITION2; hr = IDirectSound_CreateSoundBuffer (lpDS, &sound_buffer, &lpDSBprimary, NULL); - if( hr != DS_OK ) { + if (FAILED(hr)) { write_log ("SOUND: Primary CreateSoundBuffer() failure: %s\n", DXError (hr)); goto error; } @@ -308,7 +308,7 @@ static int open_audio_ds (int size) memset(&DSBCaps, 0, sizeof(DSBCaps)); DSBCaps.dwSize = sizeof(DSBCaps); hr = IDirectSoundBuffer_GetCaps(lpDSBprimary, &DSBCaps); - if (hr != DS_OK) { + if (FAILED(hr)) { write_log ("SOUND: Primary GetCaps() failure: %s\n", DXError (hr)); goto error; } @@ -326,7 +326,7 @@ static int open_audio_ds (int size) max_sndbufsize = SND_MAX_BUFFER2; dsoundbuf = max_sndbufsize * 2; hr = IDirectSound_SetCooperativeLevel (lpDS, hMainWnd, DSSCL_PRIORITY); - if (hr != DS_OK) { + if (FAILED(hr)) { write_log ("SOUND: Can't set cooperativelevel: %s\n", DXError (hr)); goto error; } @@ -344,14 +344,14 @@ static int open_audio_ds (int size) sound_buffer.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_GLOBALFOCUS | DSBCAPS_STATIC; sound_buffer.dwFlags |= DSBCAPS_CTRLVOLUME; - hr = IDirectSound_CreateSoundBuffer( lpDS, &sound_buffer, &lpDSBsecondary, NULL ); - if (hr != DS_OK) { + hr = IDirectSound_CreateSoundBuffer(lpDS, &sound_buffer, &lpDSBsecondary, NULL); + if (FAILED(hr)) { write_log ("SOUND: Secondary CreateSoundBuffer() failure: %s\n", DXError (hr)); goto error; } hr = IDirectSoundBuffer_SetFormat (lpDSBprimary, &wavfmt); - if( hr != DS_OK ) { + if (FAILED(hr)) { write_log ("SOUND: Primary SetFormat() failure: %s\n", DXError (hr)); goto error; } @@ -496,7 +496,7 @@ static void finish_sound_buffer_ds (void) double vdiff, m, skipmode; hr = IDirectSoundBuffer_GetStatus (lpDSBsecondary, &status); - if (hr != DS_OK) + if (FAILED(hr)) return; if (status & DSBSTATUS_BUFFERLOST) { restore (DSERR_BUFFERLOST); @@ -509,7 +509,7 @@ static void finish_sound_buffer_ds (void) } for (;;) { hr = IDirectSoundBuffer_GetCurrentPosition (lpDSBsecondary, &playpos, &safepos); - if (hr != DS_OK) { + if (FAILED(hr)) { restore (hr); //write_log ("GetCurrentPosition failed: %s\n", DirectSound_ErrorText (hr)); return; @@ -547,7 +547,7 @@ static void finish_sound_buffer_ds (void) hr = IDirectSoundBuffer_Lock (lpDSBsecondary, writepos, sndbufsize, &b1, &s1, &b2, &s2, 0); if (restore (hr)) return; - if (hr != DS_OK) { + if (FAILED(hr)) { write_log ("lock failed: %s (%d %d)\n", DXError (hr), writepos, sndbufsize); return; } @@ -578,6 +578,16 @@ static void finish_sound_buffer_ds (void) sound_setadjust (skipmode); } +static void channelswap(uae_s16 *sndbuffer, int len) +{ + int i; + for (i = 0; i < len; i += 2) { + uae_s16 t = sndbuffer[i]; + sndbuffer[i] = sndbuffer[i + 1]; + sndbuffer[i + 1] = t; + } +} + static void filtercheck (uae_s16 *sndbuffer, int len) { int ch = currprefs.sound_stereo == 2 ? 4 : (currprefs.sound_stereo ? 2 : 1); @@ -585,8 +595,6 @@ static void filtercheck (uae_s16 *sndbuffer, int len) static double cold[4]; double old0, old1, v; - if (!currprefs.sound_filter) - return; if (gui_data.powerled || currprefs.sound_filter == 2) { if (ch == 1) { old0 = cold[0]; @@ -620,7 +628,10 @@ void finish_sound_buffer (void) { if (turbo_emulation) return; - filtercheck ((uae_s16*)sndbuffer, sndbufsize / 2); + if (currprefs.sound_filter) + filtercheck((uae_s16*)sndbuffer, sndbufsize / 2); + if (currprefs.sound_stereo == 1 && currprefs.sound_stereo_swap_paula) + channelswap((uae_s16*)sndbuffer, sndbufsize / 2); #ifdef DRIVESOUND driveclick_mix ((uae_s16*)sndbuffer, sndbufsize / 2); #endif diff --git a/od-win32/srcrelease.bat b/od-win32/srcrelease.bat index c0b0e3aa..dff75e5f 100755 --- a/od-win32/srcrelease.bat +++ b/od-win32/srcrelease.bat @@ -1,7 +1,7 @@ -cd c:\projects\winuae_bak +cd e:\projects\winuae_bak rm -rf bak mkdir bak -copy /s c:\projects\winuae\src\*.* c:\projects\winuae_bak\bak\ +copy /s e:\projects\winuae\src\*.* e:\projects\winuae_bak\bak\ cd bak del *.obj *.ilk *.exe *.pdb *.pch *.idb /s @@ -84,6 +84,6 @@ 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 +cd e:\projects\winuae\src\od-win32 zip -9 winuaedebug%1 winuae_msvc\release\winuae.pdb move winuaedebug%1.zip d:\amiga\winuaepackets\ diff --git a/od-win32/win32.c b/od-win32/win32.c index 32111ca5..8dcd7fa7 100755 --- a/od-win32/win32.c +++ b/od-win32/win32.c @@ -29,6 +29,7 @@ #include #include #include +#include #include "sysdeps.h" #include "options.h" @@ -76,7 +77,7 @@ static int no_rdtsc; HINSTANCE hInst = NULL; HMODULE hUIDLL = NULL; -HWND (WINAPI *pHtmlHelp)(HWND, LPCSTR, UINT, LPDWORD ) = NULL; +HWND (WINAPI *pHtmlHelp)(HWND, LPCSTR, UINT, LPDWORD) = NULL; HWND hAmigaWnd, hMainWnd, hHiddenWnd; RECT amigawin_rect; static UINT TaskbarRestart; @@ -107,7 +108,8 @@ static int mm_timerres; static int timermode, timeon; static HANDLE timehandle; -char *start_path; +char start_path_data[MAX_DPATH]; +char start_path_exe[MAX_DPATH]; char help_file[MAX_DPATH]; extern int harddrive_dangerous, do_rdbdump, aspi_allow_all, no_rawinput; @@ -231,7 +233,7 @@ static int figure_processor_speed (void) } if (mmx) cpu_mmx = 1; - } __except( GetExceptionCode() == EXCEPTION_ILLEGAL_INSTRUCTION ) { + } __except(GetExceptionCode() == EXCEPTION_ILLEGAL_INSTRUCTION) { } if (QueryPerformanceFrequency(&freq)) { @@ -1478,9 +1480,9 @@ static HMODULE LoadGUI( void ) int fail = 1; if (language == 0x400) - sprintf (dllbuf, "%sguidll.dll", start_path); + sprintf (dllbuf, "%sguidll.dll", start_path_exe); else - sprintf (dllbuf, "%sWinUAE_%s.dll", start_path, dllname); + sprintf (dllbuf, "%sWinUAE_%s.dll", start_path_exe, dllname); result = WIN32_LoadLibrary (dllbuf); if( result) { @@ -1596,20 +1598,19 @@ void logging_init( void ) } #ifndef SINGLEFILE if (currprefs.win32_logfile) { - sprintf (debugfilename, "%swinuaelog.txt", start_path); + sprintf (debugfilename, "%swinuaelog.txt", start_path_data); if (!debugfile) debugfile = fopen (debugfilename, "wt"); } else if (!first) { - sprintf (debugfilename, "%swinuaebootlog.txt", start_path); + sprintf (debugfilename, "%swinuaebootlog.txt", start_path_data); if (!debugfile) debugfile = fopen (debugfilename, "wt"); } #endif first++; - write_log ( "%s", VersionStr ); - write_log (" (%s %d.%d %s%s)", os_winnt ? "NT" : "W9X/ME", + write_log ("%s (%s %d.%d %s%s%s)", VersionStr, os_winnt ? "NT" : "W9X/ME", osVersion.dwMajorVersion, osVersion.dwMinorVersion, osVersion.szCSDVersion, - os_winnt_admin ? " Admin" : ""); + strlen(osVersion.szCSDVersion) > 0 ? " " : "", os_winnt_admin ? "Admin" : ""); write_log (" %s %X.%X %d", SystemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL ? "32-bit x86" : SystemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 ? "IA64" : @@ -1621,10 +1622,11 @@ void logging_init( void ) "\n(c) 1996-2001 Brian King - Win32 port, Picasso96 RTG, and GUI." "\n(c) 1996-1999 Mathias Ortmann - Win32 port and bsdsocket support." "\n(c) 2000-2001 Bernd Meyer - JIT engine." - "\n(c) 2000-2001 Bernd Roesch - MIDI input, many fixes." + "\n(c) 2000-2005 Bernd Roesch - MIDI input, many fixes." "\nPress F12 to show the Settings Dialog (GUI), Alt-F4 to quit." "\nEnd+F1 changes floppy 0, End+F2 changes floppy 1, etc." "\n"); + write_log ("EXE: '%s'\nDATA: '%s'\n", start_path_exe, start_path_data); } void logging_cleanup( void ) @@ -1792,7 +1794,7 @@ void fetch_path (char *name, char *out, int size) { int size2 = size; - strcpy (out, start_path); + strcpy (out, start_path_data); if (!strcmp (name, "FloppyPath")) strcat (out, "..\\shared\\adf\\"); if (!strcmp (name, "hdfPath")) @@ -1804,7 +1806,7 @@ void fetch_path (char *name, char *out, int size) if (hWinUAEKey) RegQueryValueEx (hWinUAEKey, name, 0, NULL, out, &size); if (out[0] == '\\') { /* relative? */ - strcpy (out, start_path); + strcpy (out, start_path_data); if (hWinUAEKey) { size2 -= strlen (out); RegQueryValueEx (hWinUAEKey, name, 0, NULL, out + strlen (out) - 1, &size2); @@ -1814,7 +1816,7 @@ void fetch_path (char *name, char *out, int size) if (!strcmp (name, "KickstartPath")) { DWORD v = GetFileAttributes (out); if (v == INVALID_FILE_ATTRIBUTES || !(v & FILE_ATTRIBUTE_DIRECTORY)) - strcpy (out, start_path); + strcpy (out, start_path_data); } strncat (out, "\\", size); } @@ -1823,7 +1825,7 @@ void set_path (char *name, char *path) char tmp[MAX_DPATH]; if (!path) { - strcpy (tmp, start_path); + strcpy (tmp, start_path_data); if (!strcmp (name, "KickstartPath")) strcat (tmp, "Roms"); if (!strcmp (name, "ConfigurationPath")) @@ -1841,7 +1843,7 @@ void set_path (char *name, char *path) if (!strcmp (name, "KickstartPath")) { DWORD v = GetFileAttributes (tmp); if (v == INVALID_FILE_ATTRIBUTES || !(v & FILE_ATTRIBUTE_DIRECTORY)) - strcpy (tmp, start_path); + strcpy (tmp, start_path_data); } strcat (tmp, "\\"); @@ -1872,7 +1874,7 @@ void read_rom_list (int force) if (!hWinUAEKey) return; RegCreateKeyEx(hWinUAEKey , "DetectedROMs", 0, NULL, REG_OPTION_NON_VOLATILE, - KEY_ALL_ACCESS, NULL, &fkey, &disp); + KEY_READ | KEY_WRITE, NULL, &fkey, &disp); if (fkey == NULL) return; if (disp == REG_CREATED_NEW_KEY || force) @@ -1943,59 +1945,76 @@ static void WIN32_HandleRegistryStuff( void ) HKEY hWinUAEKeyLocal = NULL; HKEY fkey; int forceroms = 0; + HKEY rkey; + char rpath1[MAX_DPATH], rpath2[MAX_DPATH], rpath3[MAX_DPATH]; + + rpath1[0] = rpath2[0] = rpath3[0] = 0; + rkey = HKEY_CLASSES_ROOT; + if (os_winnt) { + if (os_winnt_admin) + rkey = HKEY_LOCAL_MACHINE; + else + rkey = HKEY_CURRENT_USER; + strcpy(rpath1, "Software\\Classes\\"); + strcpy(rpath2, rpath1); + strcpy(rpath3, rpath1); + } + strcat(rpath1, ".uae"); + strcat(rpath2, "WinUAE\\shell\\Edit\\command"); + strcat(rpath3, "WinUAE\\shell\\Open\\command"); /* Create/Open the hWinUAEKey which points to our config-info */ - if( RegCreateKeyEx( HKEY_CLASSES_ROOT, ".uae", 0, "", REG_OPTION_NON_VOLATILE, - KEY_ALL_ACCESS, NULL, &hWinUAEKey, &disposition ) == ERROR_SUCCESS ) + if (RegCreateKeyEx(rkey, rpath1, 0, "", REG_OPTION_NON_VOLATILE, + KEY_WRITE | KEY_READ, NULL, &hWinUAEKey, &disposition) == ERROR_SUCCESS) { // Regardless of opening the existing key, or creating a new key, we will write the .uae filename-extension // commands in. This way, we're always up to date. /* Set our (default) sub-key to point to the "WinUAE" key, which we then create */ - RegSetValueEx( hWinUAEKey, "", 0, REG_SZ, (CONST BYTE *)"WinUAE", strlen( "WinUAE" ) + 1 ); + RegSetValueEx(hWinUAEKey, "", 0, REG_SZ, (CONST BYTE *)"WinUAE", strlen( "WinUAE" ) + 1); - if( ( RegCreateKeyEx( HKEY_CLASSES_ROOT, "WinUAE\\shell\\Edit\\command", 0, "", REG_OPTION_NON_VOLATILE, - KEY_ALL_ACCESS, NULL, &hWinUAEKeyLocal, &disposition ) == ERROR_SUCCESS ) ) + if((RegCreateKeyEx(rkey, rpath2, 0, "", REG_OPTION_NON_VOLATILE, + KEY_WRITE | KEY_READ, NULL, &hWinUAEKeyLocal, &disposition) == ERROR_SUCCESS)) { /* Set our (default) sub-key to BE the "WinUAE" command for editing a configuration */ - sprintf( path, "%sWinUAE.exe -f \"%%1\" -s use_gui=yes", start_path ); - RegSetValueEx( hWinUAEKeyLocal, "", 0, REG_SZ, (CONST BYTE *)path, strlen( path ) + 1 ); + sprintf(path, "%sWinUAE.exe -f \"%%1\" -s use_gui=yes", start_path_data); + RegSetValueEx(hWinUAEKeyLocal, "", 0, REG_SZ, (CONST BYTE *)path, strlen(path) + 1); + RegCloseKey(hWinUAEKeyLocal); } - RegCloseKey( hWinUAEKeyLocal ); - if( ( RegCreateKeyEx( HKEY_CLASSES_ROOT, "WinUAE\\shell\\Open\\command", 0, "", REG_OPTION_NON_VOLATILE, - KEY_ALL_ACCESS, NULL, &hWinUAEKeyLocal, &disposition ) == ERROR_SUCCESS ) ) + if((RegCreateKeyEx(rkey, rpath3, 0, "", REG_OPTION_NON_VOLATILE, + KEY_WRITE | KEY_READ, NULL, &hWinUAEKeyLocal, &disposition) == ERROR_SUCCESS)) { /* Set our (default) sub-key to BE the "WinUAE" command for launching a configuration */ - sprintf( path, "%sWinUAE.exe -f \"%%1\"", start_path ); - RegSetValueEx( hWinUAEKeyLocal, "", 0, REG_SZ, (CONST BYTE *)path, strlen( path ) + 1 ); + sprintf(path, "%sWinUAE.exe -f \"%%1\"", start_path_data); + RegSetValueEx(hWinUAEKeyLocal, "", 0, REG_SZ, (CONST BYTE *)path, strlen( path ) + 1); + RegCloseKey(hWinUAEKeyLocal); } - RegCloseKey( hWinUAEKeyLocal ); + RegCloseKey(hWinUAEKey); } - RegCloseKey( hWinUAEKey ); hWinUAEKey = NULL; /* Create/Open the hWinUAEKey which points our config-info */ - if( RegCreateKeyEx( HKEY_CURRENT_USER, "Software\\Arabuusimiehet\\WinUAE", 0, "", REG_OPTION_NON_VOLATILE, - KEY_ALL_ACCESS, NULL, &hWinUAEKey, &disposition ) == ERROR_SUCCESS ) + if (RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Arabuusimiehet\\WinUAE", 0, "", REG_OPTION_NON_VOLATILE, + KEY_WRITE | KEY_READ, NULL, &hWinUAEKey, &disposition) == ERROR_SUCCESS) { - initpath ("FloppyPath", start_path); - initpath ("KickstartPath", start_path); - initpath ("hdfPath", start_path); - initpath ("ConfigurationPath", start_path); - initpath ("ScreenshotPath", start_path); - initpath ("StatefilePath", start_path); - initpath ("SaveimagePath", start_path); - initpath ("VideoPath", start_path); - if( disposition == REG_CREATED_NEW_KEY ) + initpath ("FloppyPath", start_path_data); + initpath ("KickstartPath", start_path_data); + initpath ("hdfPath", start_path_data); + initpath ("ConfigurationPath", start_path_data); + initpath ("ScreenshotPath", start_path_data); + initpath ("StatefilePath", start_path_data); + initpath ("SaveimagePath", start_path_data); + initpath ("VideoPath", start_path_data); + if (disposition == REG_CREATED_NEW_KEY) { /* Create and initialize all our sub-keys to the default values */ colortype = 0; - RegSetValueEx( hWinUAEKey, "DisplayInfo", 0, REG_DWORD, (CONST BYTE *)&colortype, sizeof( colortype ) ); - RegSetValueEx( hWinUAEKey, "xPos", 0, REG_DWORD, (CONST BYTE *)&colortype, sizeof( colortype ) ); - RegSetValueEx( hWinUAEKey, "yPos", 0, REG_DWORD, (CONST BYTE *)&colortype, sizeof( colortype ) ); - RegSetValueEx( hWinUAEKey, "xPosGUI", 0, REG_DWORD, (CONST BYTE *)&colortype, sizeof( colortype ) ); - RegSetValueEx( hWinUAEKey, "yPosGUI", 0, REG_DWORD, (CONST BYTE *)&colortype, sizeof( colortype ) ); + RegSetValueEx(hWinUAEKey, "DisplayInfo", 0, REG_DWORD, (CONST BYTE *)&colortype, sizeof(colortype)); + RegSetValueEx(hWinUAEKey, "xPos", 0, REG_DWORD, (CONST BYTE *)&colortype, sizeof(colortype)); + RegSetValueEx(hWinUAEKey, "yPos", 0, REG_DWORD, (CONST BYTE *)&colortype, sizeof(colortype)); + RegSetValueEx(hWinUAEKey, "xPosGUI", 0, REG_DWORD, (CONST BYTE *)&colortype, sizeof(colortype)); + RegSetValueEx(hWinUAEKey, "yPosGUI", 0, REG_DWORD, (CONST BYTE *)&colortype, sizeof(colortype)); } size = sizeof (version); if (RegQueryValueEx (hWinUAEKey, "Version", 0, &dwType, (LPBYTE)&version, &size) == ERROR_SUCCESS) { @@ -2013,7 +2032,7 @@ static void WIN32_HandleRegistryStuff( void ) forceroms = 1; } - RegQueryValueEx( hWinUAEKey, "DisplayInfo", 0, &dwType, (LPBYTE)&colortype, &dwDisplayInfoSize ); + RegQueryValueEx(hWinUAEKey, "DisplayInfo", 0, &dwType, (LPBYTE)&colortype, &dwDisplayInfoSize); if (colortype == 0) /* No color information stored in the registry yet */ { char szMessage[4096]; @@ -2031,7 +2050,7 @@ static void WIN32_HandleRegistryStuff( void ) WIN32GFX_FigurePixelFormats(colortype); } size = sizeof (quickstart); - RegQueryValueEx( hWinUAEKey, "QuickStartMode", 0, &dwType, (LPBYTE)&quickstart, &size ); + RegQueryValueEx(hWinUAEKey, "QuickStartMode", 0, &dwType, (LPBYTE)&quickstart, &size); } fetch_path ("ConfigurationPath", path, sizeof (path)); path[strlen (path) - 1] = 0; @@ -2168,12 +2187,14 @@ extern void test (void); static int PASCAL WinMain2 (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { - char *posn; + char *posn, *p; HANDLE hMutex; char **argv; int argc; int i; int multi_display = 1; + int start_data = 0; + DWORD v; #if 1 #ifdef __GNUC__ @@ -2228,57 +2249,77 @@ __asm{ if (!strcmp (arg, "-norawinput")) no_rawinput = 1; if (!strcmp (arg, "-scsilog")) log_scsi = 1; if (!strcmp (arg, "-nomultidisplay")) multi_display = 0; + if (!strcmp (arg, "-legacypaths")) start_data = -1; + if (!strcmp (arg, "-datapath") && i + 1 < argc) { + strcpy(start_path_data, argv[i + 1]); + start_data = 1; + i++; + } } #if 0 argv = 0; argv[0] = 0; #endif - /* Get our executable's root-path */ - if ((start_path = xmalloc (MAX_DPATH))) + GetModuleFileName(NULL, start_path_exe, MAX_DPATH); + if((posn = strrchr (start_path_exe, '\\'))) + posn[1] = 0; + p = getenv("AMIGAFOREVERDATA"); + if (start_data == 0 && p) { + strcpy (start_path_data, p); + v = GetFileAttributes(start_path_data); + strcat(start_path_data, "\\WinUAE"); + if (v != INVALID_FILE_ATTRIBUTES && (v & FILE_ATTRIBUTE_DIRECTORY)) + start_data = 1; + } + if (start_data == 0 && SUCCEEDED(SHGetFolderPath(NULL, CSIDL_COMMON_DOCUMENTS, NULL, 0, start_path_data))) { + strcat(start_path_data, "\\My Amiga Files\\WinUAE"); + v = GetFileAttributes(start_path_data); + if (v != INVALID_FILE_ATTRIBUTES && (v & FILE_ATTRIBUTE_DIRECTORY)) + start_data = 1; + } + v = GetFileAttributes(start_path_data); + if (v == INVALID_FILE_ATTRIBUTES || !(v & FILE_ATTRIBUTE_DIRECTORY) || start_data <= 0) + strcpy(start_path_data, start_path_exe); + + if (strlen(start_path_data) > 0 && (start_path_data[strlen(start_path_data) - 1] != '\\' && start_path_data[strlen(start_path_data) - 1] != '/')) + strcat(start_path_data, "\\"); + + sprintf(help_file, "%sWinUAE.chm", start_path_data); + sprintf(VersionStr, "WinUAE %d.%d.%d%s", UAEMAJOR, UAEMINOR, UAESUBREV, WINUAEBETA ? WINUAEBETASTR : ""); + SetCurrentDirectory (start_path_data); + + logging_init (); + + if(WIN32_RegisterClasses() && WIN32_InitLibraries() && DirectDraw_Start(NULL)) { - GetModuleFileName( NULL, start_path, MAX_DPATH ); - if((posn = strrchr (start_path, '\\'))) - posn[1] = 0; - sprintf (help_file, "%sWinUAE.chm", start_path ); - sprintf( VersionStr, "WinUAE %d.%d.%d%s", UAEMAJOR, UAEMINOR, UAESUBREV, WINUAEBETA ? WINUAEBETASTR : "" ); - SetCurrentDirectory (start_path); - - logging_init (); - - if( WIN32_RegisterClasses() && WIN32_InitLibraries() && DirectDraw_Start(NULL) ) - { - DEVMODE devmode; - DWORD i = 0; - - DirectDraw_Release (); - write_log ("Enumerating display devices.. \n"); - enumeratedisplays (multi_display); - write_log ("Sorting devices and modes..\n"); - sortdisplays (); - write_log ("done\n"); + DEVMODE devmode; + DWORD i = 0; + + DirectDraw_Release (); + write_log ("Enumerating display devices.. \n"); + enumeratedisplays (multi_display); + write_log ("Sorting devices and modes..\n"); + sortdisplays (); + write_log ("done\n"); - memset (&devmode, 0, sizeof(devmode)); - devmode.dmSize = sizeof(DEVMODE); - if (EnumDisplaySettings (NULL, ENUM_CURRENT_SETTINGS, &devmode)) - { - default_freq = devmode.dmDisplayFrequency; - if( default_freq >= 70 ) - default_freq = 70; - else - default_freq = 60; - } - - WIN32_HandleRegistryStuff(); - WIN32_InitHtmlHelp(); - DirectDraw_Release(); - betamessage (); - keyboard_settrans (); + memset (&devmode, 0, sizeof(devmode)); + devmode.dmSize = sizeof(DEVMODE); + if (EnumDisplaySettings (NULL, ENUM_CURRENT_SETTINGS, &devmode)) { + default_freq = devmode.dmDisplayFrequency; + if( default_freq >= 70 ) + default_freq = 70; + else + default_freq = 60; + } + WIN32_HandleRegistryStuff(); + WIN32_InitHtmlHelp(); + DirectDraw_Release(); + betamessage (); + keyboard_settrans (); #ifdef PARALLEL_PORT - paraport_mask = paraport_init (); + paraport_mask = paraport_init (); #endif - real_main (argc, argv); - } - free (start_path); + real_main (argc, argv); } if (mm_timerres && timermode == 0) @@ -2314,8 +2355,8 @@ int execute_command (char *cmd) si.cb = sizeof (si); si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; si.wShowWindow = SW_HIDE; - if( CreateProcess( NULL, cmd, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi ) ) { - WaitForSingleObject( pi.hProcess, INFINITE ); + if(CreateProcess(NULL, cmd, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi)) { + WaitForSingleObject(pi.hProcess, INFINITE); return 1; } return 0; @@ -2538,9 +2579,9 @@ void systraymenu (HWND hwnd) HMODULE WIN32_LoadLibrary (const char *name) { HMODULE m; - char *s = xmalloc (strlen (start_path) + strlen (WIN32_PLUGINDIR) + strlen (name) + 1); + char *s = xmalloc (strlen (start_path_exe) + strlen (WIN32_PLUGINDIR) + strlen (name) + 1); if (s) { - sprintf (s, "%s%s%s", start_path, WIN32_PLUGINDIR, name); + sprintf (s, "%s%s%s", start_path_exe, WIN32_PLUGINDIR, name); m = LoadLibrary (s); xfree (s); if (m) @@ -2559,8 +2600,7 @@ int PASCAL WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLin oldaff = SetThreadAffinityMask(thread, 1); __try { WinMain2 (hInstance, hPrevInstance, lpCmdLine, nCmdShow); - } __except(ExceptionFilter(GetExceptionInformation(), GetExceptionCode())) - { + } __except(ExceptionFilter(GetExceptionInformation(), GetExceptionCode())) { } SetThreadAffinityMask(thread, oldaff); return FALSE; diff --git a/od-win32/win32.h b/od-win32/win32.h index c48a2d2b..0e314bf8 100755 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -22,7 +22,10 @@ extern int manual_palette_refresh_needed; extern int mouseactive, focus; extern int ignore_messages_all; #define WINUAEBETA 1 -#define WINUAEBETASTR " Beta 6" +#define WINUAEBETASTR " Beta 7" + +extern char start_path_exe[MAX_DPATH]; +extern char start_path_data[MAX_DPATH]; extern void my_kbd_handler (int, int, int); extern void clearallkeys(void); @@ -65,7 +68,6 @@ extern int win_x_diff, win_y_diff; extern void sleep_millis (int ms); extern void sleep_millis_busy (int ms); -extern void screenshot(int mode); extern void wait_keyrelease (void); extern void keyboard_settrans (void); @@ -95,4 +97,8 @@ void read_rom_list (int); #define WIN32_PLUGINDIR "plugins\\" HMODULE WIN32_LoadLibrary (const char *); +extern int screenshot_prepare(void); +extern void screenshot_free(void); + + #endif \ No newline at end of file diff --git a/od-win32/win32_scale2x.c b/od-win32/win32_scale2x.c index a7dd6ab3..cc9f4cc6 100755 --- a/od-win32/win32_scale2x.c +++ b/od-win32/win32_scale2x.c @@ -90,7 +90,7 @@ void S2X_init (int dw, int dh, int aw, int ah, int mult, int ad, int dd) &DirectDrawState.temporary.desc, &DirectDrawState.temporary.surface, NULL); - if (ddrval != DD_OK) { + if (FAILED(ddrval)) { write_log ("DDRAW: failed to create temp surface\n%s\n", DXError (ddrval)); tempsurf = 0; } @@ -175,10 +175,10 @@ void S2X_render (void) if (temp_needed) { desc.dwSize = sizeof (desc); - while ((ddrval = IDirectDrawSurface7_Lock (dds, NULL, &desc, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT, NULL)) != DD_OK) { + while (FAILED(ddrval = IDirectDrawSurface7_Lock (dds, NULL, &desc, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT, NULL))) { if (ddrval == DDERR_SURFACELOST) { ddrval = IDirectDrawSurface7_Restore (dds); - if (ddrval != DD_OK) + if (FAILED(ddrval)) return; } else if (ddrval != DDERR_SURFACEBUSY) { return; diff --git a/od-win32/win32gfx.c b/od-win32/win32gfx.c index 74252414..ea18660b 100755 --- a/od-win32/win32gfx.c +++ b/od-win32/win32gfx.c @@ -325,23 +325,23 @@ static int set_ddraw (void) overlay = (currentmode->flags & DM_OVERLAY) ? TRUE : FALSE; ddrval = DirectDraw_SetCooperativeLevel( hAmigaWnd, dxfullscreen); - if (ddrval != DD_OK) + if (FAILED(ddrval)) goto oops; if (dxfullscreen) { write_log( "set_ddraw: Trying %dx%d, bits=%d, refreshrate=%d\n", width, height, bits, freq ); ddrval = DirectDraw_SetDisplayMode (width, height, bits, freq); - if (ddrval != DD_OK) { + if (FAILED(ddrval)) { write_log ("set_ddraw: failed, trying without forced refresh rate\n"); ddrval = DirectDraw_SetDisplayMode (width, height, bits, 0); - if (ddrval != DD_OK) { + if (FAILED(ddrval)) { write_log( "set_ddraw: Couldn't SetDisplayMode()\n" ); goto oops; } } ddrval = DirectDraw_GetDisplayMode(); - if (ddrval != DD_OK) { + if (FAILED(ddrval)) { write_log( "set_ddraw: Couldn't GetDisplayMode()\n" ); goto oops; } @@ -354,18 +354,18 @@ static int set_ddraw (void) if (dd) { ddrval = DirectDraw_CreateClipper(); - if (ddrval != DD_OK) { + if (FAILED(ddrval)) { write_log( "set_ddraw: No clipping support\n" ); goto oops; } ddrval = DirectDraw_CreateSurface (width, height); - if (ddrval != DD_OK) { + if (FAILED(ddrval)) { write_log( "set_ddraw: Couldn't CreateSurface() for primary because %s.\n", DXError( ddrval ) ); goto oops; } if (DirectDraw_GetPrimaryBitCount() != (unsigned)bits && overlay) { ddrval = DirectDraw_CreateOverlaySurface (width, height, bits, 0); - if( ddrval != DD_OK ) + if(FAILED(ddrval)) { write_log( "set_ddraw: Couldn't CreateOverlaySurface(%d,%d,%d) because %s.\n", width, height, bits, DXError( ddrval ) ); goto oops2; @@ -384,14 +384,14 @@ static int set_ddraw (void) ddrval = DirectDraw_SetClipper (hAmigaWnd); - if (ddrval != DD_OK) { + if (FAILED(ddrval)) { write_log( "set_ddraw: Couldn't SetHWnd()\n" ); goto oops; } if (bits == 8) { ddrval = DirectDraw_CreatePalette (currentmode->pal); - if (ddrval != DD_OK) + if (FAILED(ddrval)) { write_log( "set_ddraw: Couldn't CreatePalette()\n" ); goto oops; @@ -576,7 +576,7 @@ void sortdisplays (void) DisplayModes[0].depth = -1; md1->disabled = 1; if (DirectDraw_Start (md1->primary ? NULL : &md1->guid)) { - if (DirectDraw_GetDisplayMode () == DD_OK) { + if (SUCCEEDED(DirectDraw_GetDisplayMode())) { int w = DirectDraw_CurrentWidth (); int h = DirectDraw_CurrentHeight (); int b = DirectDraw_GetSurfaceBitCount (); @@ -612,7 +612,7 @@ RGBFTYPE WIN32GFX_FigurePixelFormats( RGBFTYPE colortype ) ignore_messages_all++; DirectDraw_Start (NULL); - if( colortype == 0 ) /* Need to query a 16-bit display mode for its pixel-format. Do this by opening such a screen */ + if(colortype == 0) /* Need to query a 16-bit display mode for its pixel-format. Do this by opening such a screen */ { hAmigaWnd = CreateWindowEx (WS_EX_TOPMOST, "AmigaPowah", VersionStr, @@ -621,19 +621,19 @@ RGBFTYPE WIN32GFX_FigurePixelFormats( RGBFTYPE colortype ) 1,//GetSystemMetrics (SM_CXSCREEN), 1,//GetSystemMetrics (SM_CYSCREEN), hHiddenWnd, NULL, 0, NULL); - if( hAmigaWnd ) + if(hAmigaWnd) { window_created = 1; ddrval = DirectDraw_SetCooperativeLevel( hAmigaWnd, TRUE ); /* TRUE indicates full-screen */ - if( ddrval != DD_OK ) + if(FAILED(ddrval)) { - gui_message( "WIN32GFX_FigurePixelFormats: ERROR - %s\n", DXError(ddrval) ); + gui_message("WIN32GFX_FigurePixelFormats: ERROR - %s\n", DXError(ddrval)); goto out; } } else { - gui_message( "WIN32GFX_FigurePixelFormats: ERROR - test-window could not be created.\n" ); + gui_message("WIN32GFX_FigurePixelFormats: ERROR - test-window could not be created.\n"); } } else @@ -648,11 +648,11 @@ RGBFTYPE WIN32GFX_FigurePixelFormats( RGBFTYPE colortype ) write_log ("figure_pixel_formats: Attempting %dx%d..\n", dm->res.width, dm->res.height); ddrval = DirectDraw_SetDisplayMode (dm->res.width, dm->res.height, 16, 0); /* 0 for default freq */ - if (ddrval != DD_OK) + if (FAILED(ddrval)) continue; ddrval = DirectDraw_GetDisplayMode(); - if (ddrval != DD_OK) + if (FAILED(ddrval)) continue; colortype = DirectDraw_GetPixelFormat(); @@ -1200,7 +1200,7 @@ void init_colors (void) case 1: memcpy (xcolors, xcol8, sizeof xcolors); ddrval = DirectDraw_SetPaletteEntries( 0, 256, colors256 ); - if (ddrval != DD_OK) + if (FAILED(ddrval)) write_log ("DX_SetPalette() failed with %s/%d\n", DXError (ddrval), ddrval); break; @@ -1292,9 +1292,9 @@ void DX_SetPalette (int start, int count) /* Set our DirectX palette here */ if( currentmode->current_depth == 8 ) { - if (DirectDraw_SetPalette( 0 ) == DD_OK) { + if (SUCCEEDED(DirectDraw_SetPalette(0))) { ddrval = DirectDraw_SetPaletteEntries( start, count, (LPPALETTEENTRY)&(picasso96_state.CLUT[start] ) ); - if (ddrval != DD_OK) + if (FAILED(ddrval)) gui_message("DX_SetPalette() failed with %s/%d\n", DXError (ddrval), ddrval); } } @@ -2141,10 +2141,10 @@ void WIN32GFX_PaletteChange( void ) if (currentmode->current_depth > 8) return; hr = DirectDraw_SetPalette (1); /* Remove current palette */ - if (hr != DD_OK) + if (FAILED(hr)) write_log ("SetPalette(1) failed, %s\n", DXError (hr)); hr = DirectDraw_SetPalette (0); /* Set our real palette */ - if (hr != DD_OK) + if (FAILED(hr)) write_log ("SetPalette(0) failed, %s\n", DXError (hr)); } @@ -2155,9 +2155,9 @@ int WIN32GFX_ClearPalette( void ) return 1; if (!(currentmode->flags & DM_DDRAW) || (currentmode->flags & DM_D3D)) return 1; hr = DirectDraw_SetPalette (1); /* Remove palette */ - if (hr != DD_OK) + if (FAILED(hr)) write_log ("SetPalette(1) failed, %s\n", DXError (hr)); - return hr == DD_OK; + return SUCCEEDED(hr); } int WIN32GFX_SetPalette( void ) @@ -2167,9 +2167,9 @@ int WIN32GFX_SetPalette( void ) if (currentmode->current_depth > 8) return 1; hr = DirectDraw_SetPalette (0); /* Set palette */ - if (hr != DD_OK) + if (FAILED(hr)) write_log ("SetPalette(0) failed, %s\n", DXError (hr)); - return hr == DD_OK; + return SUCCEEDED(hr); } void WIN32GFX_WindowMove ( void ) { @@ -2268,7 +2268,7 @@ HDC gethdc (void) if (D3D_isenabled()) return D3D_getDC (0); #endif - if(DirectDraw_GetDC(&hdc, DirectDraw_GetLockableType()) != DD_OK) + if(FAILED(DirectDraw_GetDC(&hdc, DirectDraw_GetLockableType()))) hdc = 0; return hdc; } diff --git a/od-win32/win32gfx.h b/od-win32/win32gfx.h index 731aaab1..d605dea5 100755 --- a/od-win32/win32gfx.h +++ b/od-win32/win32gfx.h @@ -29,7 +29,6 @@ int WIN32GFX_AdjustScreenmode( uae_u32 *pwidth, uae_u32 *pheight, uae_u32 *ppixb extern HWND hStatusWnd; extern HINSTANCE hDDraw; -extern char *start_path; extern uae_u32 default_freq; extern int normal_display_change_starting; diff --git a/od-win32/win32gui.c b/od-win32/win32gui.c index d0accb98..0d47b9ae 100755 --- a/od-win32/win32gui.c +++ b/od-win32/win32gui.c @@ -96,10 +96,9 @@ extern HWND (WINAPI *pHtmlHelp)(HWND, LPCSTR, UINT, LPDWORD ); { char szMessage[MAX_DPATH]; WIN32GUI_LoadUIString( IDS_NOHELP, szMessage, MAX_DPATH ); gui_message( szMessage ); } extern HWND hAmigaWnd; -extern char help_file[ MAX_DPATH ]; +extern char help_file[MAX_DPATH]; extern int mouseactive; -extern char *start_path; static char config_filename[ MAX_DPATH ] = ""; @@ -560,7 +559,7 @@ int scan_roms (char *pathp) char path[MAX_DPATH]; int ret = scan_roms_2 (pathp); - sprintf (path, "%s..\\shared\\rom\\", start_path); + sprintf (path, "%s..\\shared\\rom\\", start_path_data); if (!ret && pathp == NULL) { ret = scan_roms_2 (path); if (ret) @@ -678,6 +677,7 @@ void gui_display( int shortcut ) int flipflop = 0; HRESULT hr; + screenshot_prepare(); #ifdef D3D D3D_guimode (TRUE); #endif @@ -705,7 +705,7 @@ void gui_display( int shortcut ) if (isfullscreen ()) { hr = DirectDraw_FlipToGDISurface(); - if (hr != DD_OK) + if (FAILED(hr)) write_log ("FlipToGDISurface failed, %s\n", DXError (hr)); } @@ -754,6 +754,7 @@ void gui_display( int shortcut ) #ifdef PICASSO96 DX_SetPalette (0, 256); #endif + screenshot_free(); } static void prefs_to_gui (struct uae_prefs *p) @@ -832,7 +833,7 @@ int DiskSelection_2 (HWND hDlg, WPARAM wParam, int flag, struct uae_prefs *prefs memset (&openFileName, 0, sizeof (OPENFILENAME)); - strncpy (init_path, start_path, MAX_DPATH); + strncpy (init_path, start_path_data, MAX_DPATH); switch (flag) { case 0: @@ -2294,7 +2295,7 @@ static BOOL CALLBACK LoadSaveDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM if (workprefs.info[0]) { char name_buf[MAX_DPATH]; if (strstr (workprefs.info, "Configurations\\")) - sprintf (name_buf, "%s\\%s", start_path, workprefs.info); + sprintf (name_buf, "%s\\%s", start_path_data, workprefs.info); else strcpy (name_buf, workprefs.info); ShellExecute (NULL, NULL, name_buf, NULL, NULL, SW_SHOWNORMAL); @@ -3670,7 +3671,7 @@ static BOOL CALLBACK DisplayDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM recursive++; if( ( wParam == IDC_TEST16BIT ) && DirectDraw_Start(NULL) ) { - if( RegOpenKeyEx( HKEY_CURRENT_USER, "Software\\Arabuusimiehet\\WinUAE", 0, KEY_ALL_ACCESS, &hPixelFormatKey ) == ERROR_SUCCESS ) + if( RegOpenKeyEx( HKEY_CURRENT_USER, "Software\\Arabuusimiehet\\WinUAE", 0, KEY_WRITE | KEY_READ, &hPixelFormatKey ) == ERROR_SUCCESS ) { char szMessage[ 4096 ]; char szTitle[ MAX_DPATH ]; @@ -3716,7 +3717,7 @@ static void values_to_chipsetdlg (HWND hDlg) LPTSTR string = NULL; int which_button; - switch( workprefs.chipset_mask ) + switch(workprefs.chipset_mask) { case 0: CheckRadioButton( hDlg, IDC_OCS, IDC_AGA, IDC_OCS+0 ); @@ -3802,9 +3803,6 @@ static void values_from_chipsetdlg (HWND hDlg, UINT msg, WPARAM wParam, LPARAM l static BOOL CALLBACK ChipsetDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { static int recursive = 0; - RGBFTYPE colortype = RGBFB_NONE; - DWORD dwType = REG_DWORD; - DWORD dwDisplayInfoSize = sizeof( colortype ); switch (msg) { case WM_INITDIALOG: @@ -4730,7 +4728,7 @@ static void enable_for_sounddlg (HWND hDlg) EnableWindow (GetDlgItem (hDlg, IDC_SOUNDVOLUME), workprefs.produce_sound); EnableWindow (GetDlgItem (hDlg, IDC_SOUNDVOLUME2), workprefs.produce_sound); EnableWindow (GetDlgItem (hDlg, IDC_SOUNDSTEREOSEP), workprefs.sound_stereo == 1 && workprefs.produce_sound); - EnableWindow (GetDlgItem (hDlg, IDC_SOUNDSTEREOMIX), workprefs.sound_stereo == 1&& workprefs.produce_sound); + EnableWindow (GetDlgItem (hDlg, IDC_SOUNDSTEREOMIX), workprefs.sound_stereo == 1 && workprefs.produce_sound); EnableWindow (GetDlgItem (hDlg, IDC_SOUNDBUFFERMEM), workprefs.produce_sound); EnableWindow (GetDlgItem (hDlg, IDC_SOUNDBUFFERRAM), workprefs.produce_sound); @@ -4770,7 +4768,7 @@ static void sound_loaddrivesamples (void) free (drivesounds); p = drivesounds = 0; - sprintf (dirname, "%s\\uae_data\\*.wav", start_path); + sprintf (dirname, "%s\\uae_data\\*.wav", start_path_data); h = FindFirstFile (dirname, &fd); if (h == INVALID_HANDLE_VALUE) return; @@ -4862,6 +4860,16 @@ static void values_to_sounddlg (HWND hDlg) SendDlgItemMessage(hDlg, IDC_SOUNDSTEREO, CB_ADDSTRING, 0, (LPARAM)txt); SendDlgItemMessage (hDlg, IDC_SOUNDSTEREO, CB_SETCURSEL, workprefs.sound_stereo, 0); + SendDlgItemMessage(hDlg, IDC_SOUNDSWAP, CB_RESETCONTENT, 0, 0); + SendDlgItemMessage(hDlg, IDC_SOUNDSWAP, CB_ADDSTRING, 0, (LPARAM)"-"); + WIN32GUI_LoadUIString (IDS_SOUND_SWAP_PAULA, txt, sizeof (txt)); + SendDlgItemMessage(hDlg, IDC_SOUNDSWAP, CB_ADDSTRING, 0, (LPARAM)txt); + WIN32GUI_LoadUIString (IDS_SOUND_SWAP_AHI, txt, sizeof (txt)); + SendDlgItemMessage(hDlg, IDC_SOUNDSWAP, CB_ADDSTRING, 0, (LPARAM)txt); + WIN32GUI_LoadUIString (IDS_SOUND_SWAP_BOTH, txt, sizeof (txt)); + SendDlgItemMessage(hDlg, IDC_SOUNDSWAP, CB_ADDSTRING, 0, (LPARAM)txt); + SendDlgItemMessage(hDlg, IDC_SOUNDSWAP, CB_SETCURSEL, workprefs.sound_stereo_swap_paula + workprefs.sound_stereo_swap_ahi * 2, 0); + SendDlgItemMessage(hDlg, IDC_SOUNDSTEREOSEP, CB_RESETCONTENT, 0, 0); for (i = 10; i >= 0; i--) { sprintf (txt, "%d%%", i * 10); @@ -4997,6 +5005,9 @@ static void values_from_sounddlg (HWND hDlg) workprefs.win32_soundcard = SendDlgItemMessage (hDlg, IDC_SOUNDCARDLIST, CB_GETCURSEL, 0, 0L); workprefs.sound_filter = SendDlgItemMessage (hDlg, IDC_SOUNDFILTER, CB_GETCURSEL, 0, 0); + workprefs.sound_stereo_swap_paula = (SendDlgItemMessage (hDlg, IDC_SOUNDSWAP, CB_GETCURSEL, 0, 0) & 1) ? 1 : 0; + workprefs.sound_stereo_swap_ahi = (SendDlgItemMessage (hDlg, IDC_SOUNDSWAP, CB_GETCURSEL, 0, 0) & 2) ? 1 : 0; + idx = SendDlgItemMessage (hDlg, IDC_SOUNDDRIVE, CB_GETCURSEL, 0, 0); if (idx >= 0) { i = SendDlgItemMessage (hDlg, IDC_SOUNDDRIVESELECT, CB_GETCURSEL, 0, 0); @@ -6409,20 +6420,7 @@ static DWORD dwEnumeratedPrinters = 0; static char comports[MAX_SERIALS][8]; static int ghostscript_available; -/* -static int joy0idc[] = { - IDC_PORT0_JOYSC, IDC_PORT0_KBDA, IDC_PORT0_KBDB, IDC_PORT0_KBDC, IDC_PORT0_KBDD, IDC_PORT0_KBDE, - IDC_PORT0_JOYS, -1 -}; - -static int joy1idc[] = { - IDC_PORT1_JOYSC, IDC_PORT1_KBDA, IDC_PORT1_KBDB, IDC_PORT1_KBDC, IDC_PORT1_KBDD, IDC_PORT1_KBDE, - IDC_PORT1_JOYS, -1 -}; -*/ static int joy0previous, joy1previous; - - static BOOL bNoMidiIn = FALSE; static void enable_for_portsdlg( HWND hDlg ) @@ -6430,12 +6428,6 @@ static void enable_for_portsdlg( HWND hDlg ) int v; v = workprefs.input_selected_setting > 0 ? FALSE : TRUE; -/* - for (i = 0; joy0idc[i] >= 0; i++) { - EnableWindow (GetDlgItem (hDlg, joy0idc[i]), v); - EnableWindow (GetDlgItem (hDlg, joy1idc[i]), v); - } -*/ EnableWindow (GetDlgItem (hDlg, IDC_SWAP), v); #if !defined (SERIAL_PORT) EnableWindow( GetDlgItem( hDlg, IDC_MIDIOUTLIST), FALSE ); @@ -6470,20 +6462,6 @@ static void updatejoyport (HWND hDlg) char tmp[MAX_DPATH]; enable_for_portsdlg (hDlg); -/* - for (i = 0; i < 2; i++) { - int *idcs1 = i == 0 ? joy0idc : joy1idc; - int *idcs2 = i == 0 ? joy1idc : joy0idc; - v = jsem_iskbdjoy (i, &workprefs); - if (v < 0) - v = 0; - else - v++; - CheckRadioButton (hDlg, idcs1[0], idcs1[NUM_JOYKBD], idcs1[v]); - for (j = 1; j < NUM_JOYKBD + 2; j++) - EnableWindow (GetDlgItem (hDlg, idcs2[j]), workprefs.input_selected_setting == 0 && j != v); - } -*/ if (joy0previous < 0) joy0previous = inputdevice_get_device_total (IDTYPE_JOYSTICK) + 1; if (joy1previous < 0) @@ -6597,44 +6575,6 @@ static void values_from_portsdlg (HWND hDlg) fixjport (&workprefs.jport1, workprefs.jport0); } -/* - for (i = 0; i < 2; i++) { - int *idcs = i == 0 ? joy0idc : joy1idc; - int *port = i == 0 ? &workprefs.jport0 : &workprefs.jport1; - int prevport = *port; - int *joyprev = i == 0 ? &joy0previous : &joy1previous; - int v = SendDlgItemMessage (hDlg, idcs[NUM_JOYKBD + 1], CB_GETCURSEL, 0, 0L); - if (v != CB_ERR) - *joyprev = v; - for (j = 0; j < NUM_JOYKBD + 1; j++) { - if (IsDlgButtonChecked (hDlg, idcs[j])) { - if (j > 0) { - *port = JSEM_KBDLAYOUT + j - 1; - } else { - if (v != CB_ERR && v > 0) { - *joyprev = v; - v--; - if (v >= inputdevice_get_device_total (IDTYPE_JOYSTICK)) - *port = JSEM_MICE + v - inputdevice_get_device_total (IDTYPE_JOYSTICK); - else - *port = JSEM_JOYS + v; - } - } - } - } - if (*port != prevport) { - lastside = i; - changed = 1; - } - } - if (changed) { - if (lastside) - fixjport (&workprefs.jport0, workprefs.jport1); - else - fixjport (&workprefs.jport1, workprefs.jport0); - } -*/ - item = SendDlgItemMessage( hDlg, IDC_PRINTERLIST, CB_GETCURSEL, 0, 0L ); if( item != CB_ERR ) { @@ -6922,10 +6862,10 @@ static BOOL CALLBACK PortsDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lP recursive++; pages[PORTS_ID] = hDlg; currentpage = PORTS_ID; - init_portsdlg( hDlg ); - enable_for_portsdlg (hDlg); - values_to_portsdlg (hDlg); - updatejoyport (hDlg); + init_portsdlg(hDlg); + enable_for_portsdlg(hDlg); + values_to_portsdlg(hDlg); + updatejoyport(hDlg); recursive--; break; case WM_USER: @@ -7213,7 +7153,7 @@ static BOOL CALLBACK InputDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lPa inputdevice_updateconfig (&workprefs); inputdevice_config_change (); input_selected_widget = -1; - init_inputdlg( hDlg ); + init_inputdlg(hDlg); case WM_USER: recursive++; @@ -7841,7 +7781,7 @@ static BOOL CALLBACK AVIOutputDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM break; case IDC_SCREENSHOT: - screenshot(1); + screenshot(1, 0); break; case IDC_AVIOUTPUT_PAL: @@ -8033,6 +7973,7 @@ static BOOL CALLBACK childenumproc (HWND hwnd, LPARAM lParam) TOOLINFO ti; char tmp[MAX_DPATH]; char *p; + int v; tmp[0] = 0; SendMessage (hwnd, WM_GETTEXT, (WPARAM)sizeof (tmp), (LPARAM)tmp); @@ -8078,11 +8019,11 @@ static BOOL CALLBACK childenumproc (HWND hwnd, LPARAM lParam) SendMessage(ToolTipHWND2, TTM_SETDELAYTIME, (WPARAM)TTDT_AUTOPOP, (LPARAM)MAKELONG(20000, 0)); SendMessage(ToolTipHWND2, TTM_SETMAXTIPWIDTH, 0, 400); SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM)tmp); - SendMessage(ToolTipHWND2, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti); + v = SendMessage(ToolTipHWND2, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti); } } else { - SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM)tmp); - SendMessage(ToolTipHWND, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti); + v = SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM)tmp); + v = SendMessage(ToolTipHWND, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti); } return 1; } @@ -8826,14 +8767,14 @@ static int fsdialog (HWND *hwnd, DWORD *flags) if (!isfullscreen ()) return 0; hr = DirectDraw_FlipToGDISurface(); - if (hr != DD_OK) + if (FAILED(hr)) write_log ("FlipToGDISurface failed, %s\n", DXError (hr)); *flags &= ~MB_SETFOREGROUND; return 0; /* HRESULT hr; hr = DirectDraw_FlipToGDISurface(); - if (hr != DD_OK) { + if (FAILED(hr)) { write_log ("FlipToGDISurface failed, %s\n", DXError (hr)); return 0; } diff --git a/zfile.c b/zfile.c index 06997c5e..78bd0f0e 100755 --- a/zfile.c +++ b/zfile.c @@ -969,13 +969,26 @@ static int zunzip (struct zfile *z, zfile_callback zc, void *user) return 1; } +#define AF "%AMIGAFOREVERDATA%" + +static void manglefilename(char *out, const char *in) +{ + out[0] = 0; + if (!strncasecmp(in, AF, strlen(AF))) + strcpy (out, start_path_data); + if ((in[0] == '/' || in[0] == '\\') || (strlen(in) > 3 && in[1] == ':' && in[2] == '\\')) + out[0] = 0; + strcat(out, in); +} int zfile_zopen (const char *name, zfile_callback zc, void *user) { struct zfile *l; int ztype; - - l = zfile_fopen_2 (name, "rb"); + char path[MAX_DPATH]; + + manglefilename(path, name); + l = zfile_fopen_2(path, "rb"); if (!l) return 0; ztype = iszip (l); @@ -987,7 +1000,7 @@ int zfile_zopen (const char *name, zfile_callback zc, void *user) arcacc_zunzip (l, zc, user, ztype); zfile_fclose (l); return 1; -} +} /* * fopen() for a compressed file @@ -995,7 +1008,10 @@ int zfile_zopen (const char *name, zfile_callback zc, void *user) struct zfile *zfile_fopen (const char *name, const char *mode) { struct zfile *l; - l = zfile_fopen_2 (name, mode); + char path[MAX_DPATH]; + + manglefilename(path, name); + l = zfile_fopen_2 (path, mode); if (!l) return 0; l = zuncompress (l); @@ -1009,10 +1025,12 @@ int zfile_exists (const char *name) if (strlen (name) == 0) return 0; - strcpy (fname, name); + manglefilename(fname, name); f = openzip (fname, 0); - if (!f) - f = fopen(name,"rb"); + if (!f) { + manglefilename(fname, name); + f = fopen(fname,"rb"); + } if (!f) return 0; fclose (f);