* 0xb80004-0xb80028
*/
-#define CDINTERRUPT_SUBCODE 0x80000000
-#define CDINTERRUPT_DRIVEXMIT 0x40000000 /* not used by ROM */
-#define CDINTERRUPT_DRIVERECV 0x20000000 /* not used by ROM */
-#define CDINTERRUPT_RXDMADONE 0x10000000
-#define CDINTERRUPT_TXDMADONE 0x08000000
-#define CDINTERRUPT_PBX 0x04000000
-#define CDINTERRUPT_OVERFLOW 0x02000000
-
-#define CDFLAG_SUBCODE 0x80000000
-#define CDFLAG_TXD 0x40000000
-#define CDFLAG_RXD 0x20000000
-#define CDFLAG_CAS 0x10000000
-#define CDFLAG_PBX 0x08000000
-#define CDFLAG_ENABLE 0x04000000
-#define CDFLAG_RAW 0x02000000
-#define CDFLAG_MSB 0x01000000
+#define CDINTERRUPT_SUBCODE 0x80000000
+#define CDINTERRUPT_DRIVEXMIT 0x40000000 /* not used by ROM */
+#define CDINTERRUPT_DRIVERECV 0x20000000 /* not used by ROM */
+#define CDINTERRUPT_RXDMADONE 0x10000000
+#define CDINTERRUPT_TXDMADONE 0x08000000
+#define CDINTERRUPT_PBX 0x04000000
+#define CDINTERRUPT_OVERFLOW 0x02000000
+
+#define CDFLAG_SUBCODE 0x80000000
+#define CDFLAG_TXD 0x40000000
+#define CDFLAG_RXD 0x20000000
+#define CDFLAG_CAS 0x10000000
+#define CDFLAG_PBX 0x08000000
+#define CDFLAG_ENABLE 0x04000000
+#define CDFLAG_RAW 0x02000000
+#define CDFLAG_MSB 0x01000000
#define CDS_ERROR 0x80
#define CDS_PLAYING 0x08
restore_u32 ();
cdrom_addressdata = restore_u32 ();
cdrom_addressmisc = restore_u32 ();
+ subcode_address = cdrom_addressmisc | 0x100;
+ cdrx_address = cdrom_addressmisc;
+ cdtx_address = cdrom_addressmisc | 0x200;
cdrom_subcodeoffset = restore_u8 ();
cdcomtxinx = restore_u8 ();
cdcomrxinx = restore_u8 ();
static int blit_startcycles, blit_misscyclecounter;
#ifdef CPUEMU_12
-extern uae_u8 cycle_line[];
+extern uae_u8 cycle_line[256];
#endif
static long blit_firstline_cycles;
static void blitter_line_proc (void)
{
- if (!blitsign) {
- if (bltcon0 & 0x800)
+ if (bltcon0 & 0x800) {
+ if (!blitsign)
bltapt += (uae_s16)blt_info.bltamod;
+ else
+ bltapt += (uae_s16)blt_info.bltbmod;
+ }
+
+ if (!blitsign) {
if (bltcon1 & 0x10) {
if (bltcon1 & 0x8)
blitter_line_decy ();
else
blitter_line_incx ();
}
- } else {
- if (bltcon0 & 0x800)
- bltapt += (uae_s16)blt_info.bltbmod;
}
if (bltcon1 & 0x10) {
if (bltcon1 & 0x4)
else
blitter_line_incy ();
}
+
blitsign = 0 > (uae_s16)bltapt;
bltstate = BLT_write;
}
if (blitter_cycle_exact) {
int rounds = 10000;
while (bltstate != BLT_done && rounds > 0) {
- memset (cycle_line, 0, maxhpos);
+ memset (cycle_line, 0, sizeof cycle_line);
decide_blitter (maxhpos);
rounds--;
}
{
if (bltcon & 1)
blinea_shift = bltcon0 >> 12;
+ if (bltcon & 2)
+ blitsign = bltcon1 & 0x40;
if (bltstate == BLT_done)
return;
if (bltcon)
blit_interrupt = 0;
if (blitline) {
- blitsing = bltcon1 & 0x2;
blinea = blt_info.bltadat;
blineb = (blt_info.bltbdat >> blt_info.blitbshift) | (blt_info.bltbdat << (16 - blt_info.blitbshift));
- blitsign = bltcon1 & 0x40;
blitonedot = 0;
+ blitsing = bltcon1 & 0x2;
cycles = vblitsize;
} else {
blit_firstline_cycles = blit_first_cycle + (blit_diag[0] * hblitsize + cpu_cycles) * CYCLE_UNIT;
L" r Dump state of the CPU\n"
L" r <reg> <value> Modify CPU registers (Dx,Ax,USP,ISP,VBR,...)\n"
L" m <address> [<lines>] Memory dump starting at <address>\n"
- L" m r<register> Memory dump starting at <register>\n"
L" d <address> [<lines>] Disassembly starting at <address>\n"
L" t [instructions] Step one or more instructions\n"
L" z Step through one instruction - useful for JSR, DBRA etc\n"
L" f <address> Add/remove breakpoint\n"
L" fa <address> [<start>] [<end>]\n"
L" Find effective address <address>\n"
- L" fi Step forward until PC points to RTS/RTD or RTE\n"
+ L" fi Step forward until PC points to RTS, RTD or RTE\n"
L" fi <opcode> Step forward until PC points to <opcode>\n"
L" fp \"<name>\"/<addr> Step forward until process <name> or <addr> is active\n"
L" fl List breakpoints\n"
L" smc [<0-1>] Enable self-modifying code detector. 1 = enable break.\n"
L" dm Dump current address space map\n"
L" v <vpos> [<hpos>] Show DMA data (accurate only in cycle-exact mode)\n"
+ L" v [-1 to -4] = enable visual DMA debugger\n"
L" ?<value> Hex/Bin/Dec converter\n"
#ifdef _WIN32
L" x Close debugger.\n"
int avioutput_width, avioutput_height, avioutput_bits;
int avioutput_fps = VBLANK_HZ_PAL;
-DWORD avioutput_framelimiter = 0, avioutput_nosoundoutput = 0;
+DWORD avioutput_framelimiter = 0, avioutput_nosoundoutput = 0, avioutput_nosoundsync = 1;
TCHAR avioutput_filename[MAX_DPATH];
static TCHAR avioutput_filename_tmp[MAX_DPATH];
{
regsetint (avikey, L"FrameLimiter", avioutput_framelimiter);
regsetint (avikey, L"NoSoundOutput", avioutput_nosoundoutput);
+ regsetint (avikey, L"NoSoundSync", avioutput_nosoundsync);
regsetint (avikey, L"FPS", avioutput_fps);
}
static void getsettings (UAEREG *avikey)
DWORD val;
if (regqueryint (avikey, L"NoSoundOutput", &val))
avioutput_nosoundoutput = val;
+ if (regqueryint (avikey, L"NoSoundSync", &val))
+ avioutput_nosoundsync = val;
if (regqueryint (avikey, L"FrameLimiter", &val))
avioutput_framelimiter = val;
if (!avioutput_framelimiter)
#define ADJUST_SIZE 10
#define EXP 1.1
-void frame_drawn(void)
+void frame_drawn (void)
{
#if 0
double diff, skipmode;
extern int avioutput_width, avioutput_height, avioutput_bits;
extern int avioutput_fps;
-extern DWORD avioutput_framelimiter, avioutput_nosoundoutput;
+extern DWORD avioutput_framelimiter, avioutput_nosoundoutput, avioutput_nosoundsync;
extern TCHAR avioutput_filename[MAX_DPATH];
#include "sysconfig.h"
-//#undef SERIAL_ENET
+#undef SERIAL_ENET
#include <windows.h>
#include <winspool.h>
#define IDS_PRINTER_EPSON 352
#define IDS_PRINTER_EPSON9 352
#define IDS_PRINTER_POSTSCRIPT_DETECTION 353
-#define IDI_ICON4 353
#define IDI_EXPANSION 353
#define IDS_PRINTER_POSTSCRIPT_EMULATION 354
#define IDS_PRINTER_PASSTHROUGH 355
#define IDC_AVIOUTPUT_DIMENSIONS_STATIC 1648
#define IDC_STATE_BUFFERSIZE_TEXT 1648
#define IDC_CONFIGTREE 1648
+#define IDC_AVIOUTPUT_NOSOUNDOUTPUT2 1648
+#define IDC_AVIOUTPUT_NOSOUNDSYNC 1648
#define IDC_AVIOUTPUT_OPTIONS 1649
#define IDC_STATE_RATE_TEXT 1649
#define IDC_DISKLISTREMOVE 1649
CONTROL "",IDC_AVIOUTPUT_AUDIO_STATIC,"Static",SS_LEFTNOWORDWRAP | SS_CENTERIMAGE | SS_SUNKEN | WS_GROUP,59,34,209,13\r
CONTROL "Video",IDC_AVIOUTPUT_VIDEO,"Button",BS_AUTOCHECKBOX | BS_PUSHLIKE | BS_FLAT | WS_TABSTOP,15,50,39,14\r
CONTROL "",IDC_AVIOUTPUT_VIDEO_STATIC,"Static",SS_LEFTNOWORDWRAP | SS_CENTERIMAGE | SS_SUNKEN | WS_GROUP,59,51,209,13\r
- CONTROL "Disable frame rate limit while recording",IDC_AVIOUTPUT_FRAMELIMITER,\r
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,68,158,10\r
+ CONTROL "Disable frame rate limit",IDC_AVIOUTPUT_FRAMELIMITER,\r
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,71,158,10\r
CONTROL "AVI output enabled",IDC_AVIOUTPUT_ACTIVATED,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,15,103,108,14\r
CONTROL "PAL",IDC_AVIOUTPUT_PAL,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,131,103,66,14\r
CONTROL "NTSC",IDC_AVIOUTPUT_NTSC,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,204,103,66,14\r
- CONTROL "Slider1",IDC_AVIOUTPUT_FPS,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | TBS_ENABLESELRANGE | WS_TABSTOP,166,84,87,11\r
- LTEXT "fps",IDC_AVIOUTPUT_FPS_STATIC,255,84,19,8\r
+ CONTROL "Slider1",IDC_AVIOUTPUT_FPS,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | TBS_ENABLESELRANGE | WS_TABSTOP,143,74,87,11\r
+ LTEXT "fps",IDC_AVIOUTPUT_FPS_STATIC,237,74,19,8\r
PUSHBUTTON "Save screenshot",IDC_SCREENSHOT,16,141,77,14\r
GROUPBOX "Ripper",IDC_STATIC,5,127,274,38\r
PUSHBUTTON "Pro Wizard 1.62",IDC_PROWIZARD,104,141,77,14,WS_DISABLED\r
CONTROL "Record",IDC_INPREC_RECORD,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,192,178,77,14\r
CONTROL "Playback",IDC_INPREC_PLAY,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,16,178,77,14\r
CONTROL "Alt. playback mode",IDC_INPREC_PLAYMODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,103,180,78,10\r
- CONTROL "Disable sound output while recording",IDC_AVIOUTPUT_NOSOUNDOUTPUT,\r
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,85,148,10\r
+ CONTROL "Disable sound output",IDC_AVIOUTPUT_NOSOUNDOUTPUT,\r
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,88,123,10\r
+ CONTROL "Disable sound sync",IDC_AVIOUTPUT_NOSOUNDSYNC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,147,88,120,10\r
END\r
\r
IDD_INPUT DIALOGEX 0, 0, 300, 242\r
v = 0;
mult = (1000.0 + v);
- if (avioutput_audio)
+ if (avioutput_audio && avioutput_enabled && avioutput_nosoundsync)
mult = 1000.0;
- if (isvsync () || (avioutput_audio && !compiled_code)) {
+ if (isvsync () || (avioutput_audio && avioutput_enabled && !compiled_code)) {
vsynctime = vsynctime_orig;
scaled_sample_evtime = scaled_sample_evtime_orig * mult / 1000.0;
} else if (compiled_code || currprefs.m68k_speed != 0) {
driveclick_mix ((uae_s16*)paula_sndbuffer, sdp->sndbufsize / 2);
#endif
#ifdef AVIOUTPUT
- if (avioutput_audio)
+ if (avioutput_enabled && avioutput_audio)
AVIOutput_WriteAudio ((uae_u8*)paula_sndbuffer, sdp->sndbufsize);
if (avioutput_enabled && (!avioutput_framelimiter || avioutput_nosoundoutput))
return;
return 0;
case WM_LBUTTONDOWN:
case WM_LBUTTONDBLCLK:
- if (!mouseactive && !gui_active && (!mousehack_alive () || currprefs.input_tablet != TABLET_MOUSEHACK || isfullscreen () > 0)) {
+ if (!mouseactive && !gui_active && (!mousehack_alive () || currprefs.input_tablet != TABLET_MOUSEHACK || (currprefs.input_tablet == TABLET_MOUSEHACK && !currprefs.input_magic_mouse) || isfullscreen () > 0)) {
setmouseactive ((message == WM_LBUTTONDBLCLK || isfullscreen() > 0) ? 2 : 1);
} else if (dinput_winmouse () >= 0 && isfocus ()) {
setmousebuttonstate (dinput_winmouse (), 0, 1);
int wow64 = 0;
static int started;
static int first;
+ TCHAR tmp[MAX_DPATH];
if (first > 1) {
write_log (L"** RESTART **\n");
L"\nPress F12 to show the Settings Dialog (GUI), Alt-F4 to quit."
L"\nEnd+F1 changes floppy 0, End+F2 changes floppy 1, etc."
L"\n");
+ tmp[0] = 0;
+ GetModuleFileName (NULL, tmp, sizeof (tmp) / sizeof (TCHAR));
+ write_log (L"'%s'\n", tmp);
write_log (L"EXE: '%s', DATA: '%s'\n", start_path_exe, start_path_data);
regstatus ();
}
#define WINUAEPUBLICBETA 1
-#define WINUAEBETA L"22"
-#define WINUAEDATE MAKEBD(2009, 11, 21)
+#define WINUAEBETA L"23"
+#define WINUAEDATE MAKEBD(2009, 11, 29)
#define WINUAEEXTRA L""
#define WINUAEREV L""
return currentmode->current_height;
}
+static int init_round;
static BOOL doInit (void);
uae_u32 default_freq = 0;
return 0;
write_log (L"DirectDraw GUID=%s\n", outGUID (displayGUID));
+ init_round = 0;
ret = -2;
do {
if (ret < -1) {
update_gfxparams ();
}
ret = doInit ();
+ init_round++;
+ if (ret < -9) {
+ DirectDraw_Release ();
+ if (!DirectDraw_Start (displayGUID))
+ return 0;
+ }
} while (ret < 0);
if (!ret) {
int ret = 0;
int mult = 0;
- colortype = DirectDraw_GetPixelFormat();
+ colortype = DirectDraw_GetPixelFormat ();
gfxmode_reset ();
for (;;) {
return 1;
oops:
- close_hwnds();
+ close_hwnds ();
return ret;
}
discard_prefs (p, 0);
}
type2 = type;
- if (type == 0)
+ if (type == 0) {
default_prefs (p, type);
+#if 0
+ if (isdefault == 0) {
+ fetch_configurationpath (tmp1, sizeof (tmp1) / sizeof (TCHAR));
+ _tcscat (tmp1, OPTIONSFILENAME);
+ cfgfile_load (p, tmp1, NULL, 0, 0);
+ }
+#endif
+ }
+
regqueryint (NULL, L"ConfigFile_NoAuto", &ct2);
v = cfgfile_load (p, fname, &type2, ct2, isdefault ? 0 : 1);
if (!v)
static int gui_width = 640, gui_height = 480;
static int mm = 0;
-static void m(void)
+static void m (void)
{
write_log (L"%d:0: %dx%d %dx%d %dx%d\n", mm, currprefs.gfx_size.width, currprefs.gfx_size.height,
workprefs.gfx_size.width, workprefs.gfx_size.height, changed_prefs.gfx_size.width, changed_prefs.gfx_size.height);
_stprintf (tmpstr, L"%d fps", avioutput_fps);
SendMessage (GetDlgItem(hDlg, IDC_AVIOUTPUT_FPS_STATIC), WM_SETTEXT, (WPARAM) 0, (LPARAM) tmpstr);
- _stprintf (tmpstr, L"Actual: %d x %d", workprefs.gfx_size.width, workprefs.gfx_size.height);
- SendMessage (GetDlgItem(hDlg, IDC_AVIOUTPUT_DIMENSIONS_STATIC), WM_SETTEXT, (WPARAM) 0, (LPARAM) tmpstr);
-
switch(avioutput_fps)
{
case VBLANK_HZ_PAL:
CheckDlgButton (hDlg, IDC_AVIOUTPUT_FRAMELIMITER, avioutput_framelimiter ? FALSE : TRUE);
CheckDlgButton (hDlg, IDC_AVIOUTPUT_NOSOUNDOUTPUT, avioutput_nosoundoutput ? TRUE : FALSE);
+ CheckDlgButton (hDlg, IDC_AVIOUTPUT_NOSOUNDSYNC, avioutput_nosoundsync ? TRUE : FALSE);
CheckDlgButton (hDlg, IDC_AVIOUTPUT_ACTIVATED, avioutput_requested ? BST_CHECKED : BST_UNCHECKED);
CheckDlgButton (hDlg, IDC_SAMPLERIPPER_ACTIVATED, sampleripper_enabled ? BST_CHECKED : BST_UNCHECKED);
}
avioutput_nosoundoutput = 1;
CheckDlgButton (hDlg, IDC_AVIOUTPUT_FRAMELIMITER, avioutput_framelimiter ? FALSE : TRUE);
CheckDlgButton (hDlg, IDC_AVIOUTPUT_NOSOUNDOUTPUT, avioutput_nosoundoutput ? TRUE : FALSE);
+ CheckDlgButton (hDlg, IDC_AVIOUTPUT_NOSOUNDSYNC, avioutput_nosoundsync ? TRUE : FALSE);
ew (hDlg, IDC_AVIOUTPUT_ACTIVATED, (!avioutput_audio && !avioutput_video) ? FALSE : TRUE);
avioutput_nosoundoutput = IsDlgButtonChecked (hDlg, IDC_AVIOUTPUT_NOSOUNDOUTPUT) ? 1 : 0;
AVIOutput_SetSettings ();
break;
+ case IDC_AVIOUTPUT_NOSOUNDSYNC:
+ avioutput_nosoundsync = IsDlgButtonChecked (hDlg, IDC_AVIOUTPUT_NOSOUNDSYNC) ? 1 : 0;
+ AVIOutput_SetSettings ();
+ break;
case IDC_INPREC_PLAYMODE:
break;
+
+- mouse capture didn't work if mouse driver (tablet) mode was enabled
+ without magic mouse
+- selecting wave recording (file select) disabled audio sync even if
+ recording was not activated
+- added disable sound sync option to output panel. Previously it was
+ always disabled (for best sound quality), option was added because
+ audio only recording with sync disabled can cause sound glitches and
+ emulation slowdowns and vsync issues (recorded sound was still fine)
+- CD32 state restore compatibility update
+- only update BLTSIGN when writing to BPLCON1, not when starting the
+ the blit (Anesthesia / Possessed and probably others)
+
Beta 22:
- do not load multiple harddrives (directory and regular hardfile) from
- added simple validation to harddrive device and volume labels
- fixed small graphics glitch in Sequential / Andromeda "18 frames!"
- slightly smaller on screen leds, fits in 320 pixel wide display
-- "write to BPLCON1 immediately after BPL1DAT" handling was buggy, in
- some cases bpl delay change had too long delay (Demo2 / Parasite)
+- BPLCON1 to bitplane delay timing fix in some specific situations
- KS 1.x interlace screen setup was incompatible with "scandoubler"
Beta 21:
if (_tcslen (name) == 0)
return NULL;
manglefilename (path, name);
- //write_log (L"zfile_fopen('%s','%s',%08x)\n", path, mode, mask);
l = zfile_fopen_2 (path, mode, mask);
if (!l)
return 0;
}
#endif
-static struct zfile *zfile_fopenx (const TCHAR *name, const TCHAR *mode, int mask, int index)
+static struct zfile *zfile_fopenx2 (const TCHAR *name, const TCHAR *mode, int mask, int index)
{
struct zfile *f;
TCHAR tmp[MAX_DPATH];
#endif
return NULL;
}
+
+static struct zfile *zfile_fopenx (const TCHAR *name, const TCHAR *mode, int mask, int index)
+{
+ struct zfile *zf;
+ //write_log (L"zfile_fopen('%s','%s',%08x,%d)\n", name, mode, mask, index);
+ zf = zfile_fopenx2 (name, mode, mask, index);
+ //write_log (L"=%p\n", zf);
+ return zf;
+}
+
struct zfile *zfile_fopen (const TCHAR *name, const TCHAR *mode, int mask)
{
return zfile_fopenx (name, mode, mask, 0);
{
struct zfile *zf = NULL;
struct zvolume *zvnew = NULL;
- int i;
+// int i;
int done = 0;
#ifdef ZFILE_DEBUG