|| 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);
}
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) {
#include "newcpu.h"
#include "zfile.h"
#include "filesys.h"
+#include "fsdb.h"
#define CONFIG_BLEN 2560
"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)"
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"
" o <1|2|addr> [<lines>]View memory as Copper instructions\n"
" O Display bitplane offsets\n"
" O <plane> <offset> Offset a bitplane\n"
- " H <count> Show PC history <count> instructions\n"
+ " H[H] <count> Show PC history (HH=full CPU info) <count> instructions\n"
" M Search for *Tracker sound modules\n"
" C <value> Search for values like energy or lifes in games\n"
" W <address> <value> Write into Amiga memory\n"
case 'S': savemem (&inptr); break;
case 's':
if (*inptr == 'c') {
- screenshot (1);
+ screenshot (1, 1);
} else {
searchmem (&inptr);
}
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);
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':
}
}
+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;
return;
bogusframe = 1;
+ addhistory();
if (do_skip && skipaddr_start == 0xC0DEDBAD) {
#if 0
}
}
-#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;
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) {
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",
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;
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))
}
}
}
- 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;
}
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;
}
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 */
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;
}
}
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);
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 */
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);
}
#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);
int sound_adjust;
int sound_filter;
int sound_volume;
+ int sound_stereo_swap_paula;
+ int sound_stereo_swap_ahi;
int comptrustbyte;
int comptrustword;
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:
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);
gui_display (-1);
break;
case AKS_SCREENSHOT:
- screenshot (1);
+ screenshot(1, 1);
break;
#ifdef ACTION_REPLAY
case AKS_FREEZEBUTTON:
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");
}
}
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");
}
}
static int vin,devicenum;
static int amigablksize;
-DWORD sound_flushes2 = 0;
+static DWORD sound_flushes2 = 0;
extern HWND hAmigaWnd;
#ifdef __GNUC__
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;
__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);
}
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;
}
*/
- 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;
}
void ahi_finish_sound_buffer( void )
{
sound_flushes2++;
-
ahi_updatesound(2);
-
}
extern GUID sound_device_guid[];
DSCAPS DSCaps;
DSCBUFFERDESC sound_buffer_rec;
- if (lpDS2 )
+ if (lpDS2)
return 0;
enumerate_sound_devices (0);
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;
- 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
*/
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;
}
// 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
// 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<t)
- { //if no complete buffer ready exit
- return -1;
- }
- i = IDirectSoundCaptureBuffer_Lock(lpDSB2r,cap_pos,t,&pos1,&byte1,&pos2,&byte2,0);
+ if (cap_pos<=cur_pos)
+ todo=cur_pos-cap_pos;
+ else
+ todo=cur_pos+(RECORDBUFFER*t)-cap_pos;
+ if (todo<t)
+ { //if no complete buffer ready exit
+ return -1;
+ }
+ i = IDirectSoundCaptureBuffer_Lock(lpDSB2r,cap_pos,t,&pos1,&byte1,&pos2,&byte2,0);
+
+ if ((cap_pos+t)< (t*RECORDBUFFER))
+ {
+ cap_pos=cap_pos+t;
+ }
+ else
+ {
+ cap_pos = 0;
+ }
+ addr=(char *)m68k_areg (regs, 0);
+ sndbufrecpt=(unsigned int*)pos1;
+ t=t/4;
+ for (i=0;i<t;i++)
+ {
+ put_long((uae_u32)addr,sndbufrecpt[0]);
+ addr+=4;
+ sndbufrecpt+=1;
+ }
+ t=t*4;
+ i=IDirectSoundCaptureBuffer_Unlock(lpDSB2r,pos1,byte1,pos2,byte2);
+ return (todo-t)/t;
- if ((cap_pos+t)< (t*RECORDBUFFER))
- {
- cap_pos=cap_pos+t;
- }
- else
- {
- cap_pos = 0;
-
- }
- addr=(char *)m68k_areg (regs, 0);
- sndbufrecpt=(unsigned int*)pos1;
- t=t/4;
- for (i=0;i<t;i++)
- {
- put_long((uae_u32)addr,sndbufrecpt[0]);
- addr+=4;
- sndbufrecpt+=1;
- }
- t=t*4;
- i=IDirectSoundCaptureBuffer_Unlock(lpDSB2r,pos1,byte1,pos2,byte2);
- return (todo-t)/t;
case 4:
- if (!ahi_on)return -2;
- i=intcount;
- intcount=0;
- return i;
+ if (!ahi_on)
+ return -2;
+ i=intcount;
+ intcount=0;
+ return i;
+
case 5:
- if ( !ahi_on ) return 0;
- ahi_updatesound ( 1 );
+ if ( !ahi_on )
+ return 0;
+ ahi_updatesound ( 1 );
return 1;
case 10:
- i=OpenClipboard(0);
- clipdat=GetClipboardData(CF_TEXT);
- if (clipdat)
- {
- clipsize=strlen(clipdat);
- clipsize++;
- return clipsize;
- }
- else
- {
- return 0;
- }
+ i=OpenClipboard(0);
+ clipdat=GetClipboardData(CF_TEXT);
+ if (clipdat)
+ {
+ clipsize=strlen(clipdat);
+ clipsize++;
+ return clipsize;
+ }
+ return 0;
+
case 11:
- addr=(char *)m68k_areg (regs, 0);
- for (i=0;i<clipsize;i++)
- {
- put_byte((uae_u32)addr,clipdat[0]);
- addr++;
- clipdat++;
- }
- CloseClipboard();
- return 0;
+ addr=(char *)m68k_areg (regs, 0);
+ for (i=0;i<clipsize;i++)
+ {
+ put_byte((uae_u32)addr,clipdat[0]);
+ addr++;
+ clipdat++;
+ }
+ CloseClipboard();
+ return 0;
+
case 12:
- 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)
+ 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
- }
+ }
}
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;
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;
}
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) {
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)
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;
break;
}
}
- if( ddrval == DD_OK )
+ if(SUCCEEDED(ddrval))
result = 1;
if( result )
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;
}
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();
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 ();
want_fullscreen ?
DDSCL_ALLOWREBOOT | DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN :
DDSCL_NORMAL );
- if( ddrval == DD_OK )
- {
+ if(SUCCEEDED(ddrval)) {
DirectDrawState.fullscreen = want_fullscreen;
DirectDrawState.window = window;
}
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
// 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
}
// 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);
// 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;
}
&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);
NULL);
}
- if( ddrval != DD_OK )
+ if(FAILED(ddrval))
{
goto out;
}
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
ddrval = IDirectDrawSurface7_QueryInterface( DirectDrawState.tertiary.surface,
&IID_IDirectDrawSurface7,
(LPVOID *)&DirectDrawState.tertiary.surface );
- if( ddrval != DD_OK )
+ if(FAILED(ddrval))
{
goto out;
}
ddrval = IDirectDrawSurface_QueryInterface( DirectDrawState.secondary.surface,
&IID_IDirectDrawSurface7,
(LPVOID *)&DirectDrawState.secondary.surface );
- if( ddrval != DD_OK )
+ if(FAILED(ddrval))
{
goto out;
}
&IID_IDirectDrawSurface7,
(LPVOID *)&DirectDrawState.primary.surface );
- if( ddrval != DD_OK )
+ if(FAILED(ddrval))
{
goto out;
}
&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;
&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
{
ddrval = IDirectDrawSurface7_QueryInterface( DirectDrawState.secondary.surface,
&IID_IDirectDrawSurface7,
(LPVOID *)&DirectDrawState.secondary.surface );
- if( ddrval != DD_OK )
+ if(FAILED(ddrval))
{
goto out;
}
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 );
}
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);
}
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);
}
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;
}
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;
}
break;
}
}
- if( ddrval == DD_OK )
+ if(SUCCEEDED(ddrval))
{
result = 1;
}
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)
{
return 1;
errcnt++;
ddrval = restoresurface ( dstsurf );
- if (ddrval != DD_OK)
+ if (FAILED(ddrval))
{
break;
}
}
#endif
}
- if( ddrval == DD_OK )
+ if(SUCCEEDED(ddrval))
{
result = 1;
}
} else {
return 1;
}
- if(ddrval == DD_OK) {
+ if(SUCCEEDED(ddrval)) {
result = 1;
} else {
if (ddrval == DDERR_SURFACELOST) {
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));
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;
}
#include "akiko.h"
#include "arcadia.h"
-extern void screenshot(int);
-
//#define DBG_KEYBD 1
//#define DEBUG_KBD
}
break;
case DIK_SYSRQ:
- screenshot (endpressed() ? 1 : 0);
+ screenshot (endpressed() ? 1 : 0, 1);
break;
case DIK_PAUSE:
if (endpressed ())
static uae_u32 gfxoffs;
uae_u32 natmem_offset = 0;
+uae_u32 max_allowed_mman = 512;
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;
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
wgfx_linestart = 0xFFFFFFFF;
picasso_refresh (1);
write_log ("SetSwitch() from threadid %d - showing %s screen\n", GetCurrentThreadId(), on ? "picasso96": "amiga");
+ checkrtglibrary();
}
/*
#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
#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
#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
#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
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
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",
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
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
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 |
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
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
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
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
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);
}
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;
}
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;
}
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;
}
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;
}
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;
}
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));
}
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;
}
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;
}
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;
}
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;
}
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;
}
double vdiff, m, skipmode;
hr = IDirectSoundBuffer_GetStatus (lpDSBsecondary, &status);
- if (hr != DS_OK)
+ if (FAILED(hr))
return;
if (status & DSBSTATUS_BUFFERLOST) {
restore (DSERR_BUFFERLOST);
}
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;
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;
}
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);
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];
{
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
-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
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\
#include <math.h>
#include <mmsystem.h>
#include <shobjidl.h>
+#include <shlobj.h>
#include "sysdeps.h"
#include "options.h"
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;
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;
}
if (mmx)
cpu_mmx = 1;
- } __except( GetExceptionCode() == EXCEPTION_ILLEGAL_INSTRUCTION ) {
+ } __except(GetExceptionCode() == EXCEPTION_ILLEGAL_INSTRUCTION) {
}
if (QueryPerformanceFrequency(&freq)) {
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)
{
}
#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" :
"\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 )
{
int size2 = size;
- strcpy (out, start_path);
+ strcpy (out, start_path_data);
if (!strcmp (name, "FloppyPath"))
strcat (out, "..\\shared\\adf\\");
if (!strcmp (name, "hdfPath"))
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);
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);
}
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"))
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, "\\");
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)
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) {
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];
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;
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__
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)
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;
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)
oldaff = SetThreadAffinityMask(thread, 1);
__try {
WinMain2 (hInstance, hPrevInstance, lpCmdLine, nCmdShow);
- } __except(ExceptionFilter(GetExceptionInformation(), GetExceptionCode()))
- {
+ } __except(ExceptionFilter(GetExceptionInformation(), GetExceptionCode())) {
}
SetThreadAffinityMask(thread, oldaff);
return FALSE;
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);
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);
#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
&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;
}
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;
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;
}
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;
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;
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 ();
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,
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
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();
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;
/* 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);
}
}
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));
}
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 )
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 )
{
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;
}
extern HWND hStatusWnd;
extern HINSTANCE hDDraw;
-extern char *start_path;
extern uae_u32 default_freq;
extern int normal_display_change_starting;
{ 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 ] = "";
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)
int flipflop = 0;
HRESULT hr;
+ screenshot_prepare();
#ifdef D3D
D3D_guimode (TRUE);
#endif
if (isfullscreen ()) {
hr = DirectDraw_FlipToGDISurface();
- if (hr != DD_OK)
+ if (FAILED(hr))
write_log ("FlipToGDISurface failed, %s\n", DXError (hr));
}
#ifdef PICASSO96
DX_SetPalette (0, 256);
#endif
+ screenshot_free();
}
static void prefs_to_gui (struct uae_prefs *p)
memset (&openFileName, 0, sizeof (OPENFILENAME));
- strncpy (init_path, start_path, MAX_DPATH);
+ strncpy (init_path, start_path_data, MAX_DPATH);
switch (flag)
{
case 0:
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);
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 ];
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 );
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:
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);
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;
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);
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);
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 )
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 );
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)
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 )
{
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:
inputdevice_updateconfig (&workprefs);
inputdevice_config_change ();
input_selected_widget = -1;
- init_inputdlg( hDlg );
+ init_inputdlg(hDlg);
case WM_USER:
recursive++;
break;
case IDC_SCREENSHOT:
- screenshot(1);
+ screenshot(1, 0);
break;
case IDC_AVIOUTPUT_PAL:
TOOLINFO ti;
char tmp[MAX_DPATH];
char *p;
+ int v;
tmp[0] = 0;
SendMessage (hwnd, WM_GETTEXT, (WPARAM)sizeof (tmp), (LPARAM)tmp);
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;
}
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;
}
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);
arcacc_zunzip (l, zc, user, ztype);
zfile_fclose (l);
return 1;
-}
+}
/*
* fopen() for a compressed file
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);
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);