int unitnum = get_standard_cd_unit2 (csu);
if (unitnum < 0)
return -1;
+#ifdef RETROPLATFORM
+ rp_cd_device_enable (unitnum, true);
+#endif
delayed[unitnum] = 0;
if (currprefs.cdslots[unitnum].delayed) {
delayed[unitnum] = PRE_INSERT_DELAY;
int sys_command_open (int unitnum)
{
waspaused[unitnum] = 0;
- return sys_command_open_internal (unitnum, currprefs.cdslots[unitnum].name[0] ? currprefs.cdslots[unitnum].name : NULL, CD_STANDARD_UNIT_DEFAULT);
+ int v = sys_command_open_internal (unitnum, currprefs.cdslots[unitnum].name[0] ? currprefs.cdslots[unitnum].name : NULL, CD_STANDARD_UNIT_DEFAULT);
+ if (!v)
+ return 0;
+#ifdef RETROPLATFORM
+ rp_cd_device_enable (unitnum, true);
+#endif
+ return v;
}
void sys_command_close (int unitnum)
{
+#ifdef RETROPLATFORM
+ rp_cd_device_enable (unitnum, false);
+#endif
sys_command_close_internal (unitnum);
}
struct device_info di;
sys_command_info (unitnum, &di, 1);
#ifdef RETROPLATFORM
- rp_cd_change (unitnum, di.media_inserted);
rp_cd_image_change (unitnum, name);
#endif
}
struct sprite *s = &spr[num];
int dma, posctl = 0;
uae_u16 data;
- int isdma = dmaen (DMA_SPRITE);
+ // fetch both sprite pairs even if DMA was switched off between sprites
+ int isdma = dmaen (DMA_SPRITE) || ((num & 1) && spr[num & ~1].dmacycle);
if (isdma && vpos == sprite_vblank_endline)
spr_arm (num, 0);
case 'H':
{
int count, temp, badly, skip;
+ uae_u32 addr = 0;
uae_u32 oldpc = m68k_getpc ();
struct regstruct save_regs = regs;
count = readint (&inptr);
else
count = 10;
+ if (count > 1000) {
+ addr = count;
+ count = MAX_HIST;
+ }
if (count < 0)
break;
skip = count;
}
while (temp != lasthist) {
regs = history[temp];
- m68k_setpc (history[temp].pc);
- if (badly)
- m68k_dumpstate (stdout, NULL);
- else
- m68k_disasm (stdout, history[temp].pc, NULL, 1);
+ if (history[temp].pc == addr || addr == 0) {
+ m68k_setpc (history[temp].pc);
+ if (badly)
+ m68k_dumpstate (stdout, NULL);
+ else
+ m68k_disasm (stdout, history[temp].pc, NULL, 1);
+ if (addr && history[temp].pc == addr)
+ break;
+ }
if (skip-- < 0)
break;
if (++temp == MAX_HIST)
currprefs.floppyslots[i].dfxtype = changed_prefs.floppyslots[i].dfxtype;
reset_drive (i);
#ifdef RETROPLATFORM
- rp_floppydrive_change (i, currprefs.floppyslots[i].dfxtype >= 0 ? 1 : 0);
+ rp_floppy_device_enable (i, currprefs.floppyslots[i].dfxtype >= 0);
#endif
}
}
thisframe_y_adjust = minfirstline;
thisframe_y_adjust_real = thisframe_y_adjust << linedbl;
- tmp = (maxvpos_nom - thisframe_y_adjust) << linedbl;
+ tmp = (maxvpos_nom - thisframe_y_adjust + 1) << linedbl;
if (tmp != max_ypos_thisframe) {
last_max_ypos = tmp;
if (last_max_ypos < 0)
break;
if (where2 < 0)
continue;
-
hposblank = 0;
pfield_draw_line (line, where2, amiga2aspect_line_map[i1 + 1]);
}
-
/* clear possible old garbage at the bottom if emulated area become smaller */
for (i = last_max_ypos; i < gfxvidinfo.height; i++) {
int i1 = i + min_ypos_for_screen;
if (mode < 0)
whence = SEEK_SET;
- TRACE((L"ACTION_SEEK(%s,%d,%d)\n", k->aino->nname, pos, mode));
+ old = fs_lseek (k->fd, 0, SEEK_CUR);
+ TRACE((L"ACTION_SEEK(%s,%d,%d)=%d\n", k->aino->nname, pos, mode, old));
gui_flicker_led (LED_HD, unit->unit, 1);
- old = fs_lseek (k->fd, 0, SEEK_CUR);
{
uae_s64 temppos;
uae_s64 filesize = fs_lseek64 (k->fd, 0, SEEK_END);
if (num == 0 && otherbuttonpressed)
newport = newport ? 0 : 1;
if (currprefs.input_selected_setting == GAMEPORT_INPUT_SETTINGS) {
- if (num == 0 || num == 1) {
+ if ((num == 0 || num == 1) && currprefs.jports[newport].id != JPORT_CUSTOM) {
int om = jsem_ismouse (num, &currprefs);
int om1 = jsem_ismouse (0, &currprefs);
int om2 = jsem_ismouse (1, &currprefs);
if (gameports)
cleardev (joysticks, joy);
input_get_default_joystick (joysticks, joy, i, af, 0);
- _tcsncpy (prefs->jports[i].name, idev[IDTYPE_MOUSE].get_friendlyname (joy), MAX_JPORTNAME - 1);
- _tcsncpy (prefs->jports[i].configname, idev[IDTYPE_MOUSE].get_uniquename (joy), MAX_JPORTNAME - 1);
+ _tcsncpy (prefs->jports[i].name, idev[IDTYPE_JOYSTICK].get_friendlyname (joy), MAX_JPORTNAME - 1);
+ _tcsncpy (prefs->jports[i].configname, idev[IDTYPE_JOYSTICK].get_uniquename (joy), MAX_JPORTNAME - 1);
used[joy] = 1;
joymodes[i] = JSEM_MODE_JOYSTICK;
}
* (c) 1995 Bernd Schmidt
*/
+#define DEBUG_STUPID 0
+
#include "sysconfig.h"
#include "sysdeps.h"
uaecptr a2 = a - 32;
uaecptr a3 = m68k_getpc () - 32;
write_log (L"Your Amiga program just did something terribly stupid %08X PC=%08X\n", a, M68K_GETPC);
- //activate_debugger();
+#if DEBUG_STUPID
+ activate_debugger();
+#endif
m68k_dumpstate (0, 0);
for (i = 0; i < 10; i++) {
write_log (L"%08X ", i >= 5 ? a3 : a2);
}
while (regs.spcflags & SPCFLAG_STOP) {
+
+ if (uae_int_requested) {
+ INTREQ_f (0x8008);
+ set_special (SPCFLAG_INT);
+ }
+ {
+ extern int volatile uaenet_int_requested;
+ if (uaenet_int_requested) {
+ INTREQ_f (0x8000 | 0x2000);
+ set_special (SPCFLAG_INT);
+ }
+ }
+ {
+ extern void bsdsock_fake_int_handler (void);
+ extern int volatile bsd_int_requested;
+ if (bsd_int_requested)
+ bsdsock_fake_int_handler ();
+ }
+
if (cpu_tracer > 0) {
cputrace.stopped = regs.stopped;
cputrace.intmask = regs.intmask;
return 1;
}
- if (currprefs.cpu_idle && currprefs.m68k_speed != 0 && ((regs.spcflags & SPCFLAG_STOP)) == SPCFLAG_STOP) {
+ if (!uae_int_requested && currprefs.cpu_idle && currprefs.m68k_speed != 0 && ((regs.spcflags & SPCFLAG_STOP)) == SPCFLAG_STOP) {
/* sleep 1ms if STOP-instruction is executed */
if (1) {
static int sleepcnt, lvpos, zerocnt;
_tcscpy (did->name, lpddi->tszInstanceName);
} else {
did->name = xmalloc (TCHAR, 100);
- _stprintf (did->name, L"[no name]");
+ _tcscpy (did->name, L"[no name]");
}
trimws (did->name);
_stprintf (tmp, L"%08X-%04X-%04X-%02X%02X%02X%02X%02X%02X%02X%02X %08X-%04X-%04X-%02X%02X%02X%02X%02X%02X%02X%02X",
checkrtglibrary();
}
+static void resetpalette(void)
+{
+ for (int i = 0; i < 256; i++)
+ picasso96_state.CLUT[i].Pad = 0xff;
+}
+
/*
* SetColorArray:
* a0: struct BoardInfo
int g = get_byte (clut + 1);
int b = get_byte (clut + 2);
- changed |= (picasso96_state.CLUT[i].Red != r
+ //write_log(L"%d: %02x%02x%02x\n", i, r, g, b);
+ changed |= picasso96_state.CLUT[i].Red != r
|| picasso96_state.CLUT[i].Green != g
- || picasso96_state.CLUT[i].Blue != b);
-
+ || picasso96_state.CLUT[i].Blue != b;
+ if (picasso96_state.CLUT[i].Pad) {
+ changed = 1;
+ picasso96_state.CLUT[i].Pad = 0;
+ }
picasso96_state.CLUT[i].Red = r;
picasso96_state.CLUT[i].Green = g;
picasso96_state.CLUT[i].Blue = b;
clut += 3;
}
- picasso_palette ();
+ changed |= picasso_palette ();
return changed;
}
static uae_u32 REGPARAM2 picasso_SetColorArray (TrapContext *ctx)
{
uae_u32 state = m68k_dreg (regs, 0);
P96TRACE ((L"SetDisplay(%d)\n", state));
+ resetpalette();
return !state;
}
uaegfx_active = 0;
interrupt_enabled = 0;
reserved_gfxmem = 0;
+ resetpalette();
}
void uaegfx_install_code (void)
rp_device_change (RP_DEVICE_CD, num, name);
}
-void rp_floppydrive_change (int num, int removed)
+void rp_floppy_device_enable (int num, bool enabled)
{
if (!cando ())
return;
- if (removed)
- floppy_mask &= ~(1 << num);
- else
+ if (enabled)
floppy_mask |= 1 << num;
+ else
+ floppy_mask &= ~(1 << num);
RPSendMessagex (RPIPCGM_DEVICES, RP_DEVICE_FLOPPY, floppy_mask, NULL, 0, &guestinfo, NULL);
}
-void rp_hd_change (int num, int removed)
+void rp_hd_device_enable (int num, bool enabled)
{
if (!cando ())
return;
- if (removed)
- hd_mask &= ~(1 << num);
- else
+ if (enabled)
hd_mask |= 1 << num;
+ else
+ hd_mask &= ~(1 << num);
RPSendMessagex (RPIPCGM_DEVICES, RP_DEVICE_HD, hd_mask, NULL, 0, &guestinfo, NULL);
}
-void rp_cd_change (int num, int removed)
+void rp_cd_device_enable (int num, bool enabled)
{
if (!cando ())
return;
- if (removed)
- cd_mask &= ~(1 << num);
- else
+ if (enabled)
cd_mask |= 1 << num;
+ else
+ cd_mask &= ~(1 << num);
RPSendMessagex (RPIPCGM_DEVICES, RP_DEVICE_CD, cd_mask, NULL, 0, &guestinfo, NULL);
}
extern void rp_update_volume (struct uae_prefs*);
extern void rp_update_leds (int, int, int);
extern void rp_floppy_track (int floppy, int track);
-extern void rp_floppydrive_change (int num, int removed);
extern void rp_hd_activity (int, int, int);
-extern void rp_hd_change (int, int);
extern void rp_cd_activity (int, int);
-extern void rp_cd_change (int, int);
+
+void rp_floppy_device_enable (int num, bool enabled);
+void rp_hd_device_enable (int num, bool enabled);
+void rp_cd_device_enable (int num, bool enabled);
#define WINUAEPUBLICBETA 1
#define LANG_DLL 1
-#define WINUAEBETA L"9"
-#define WINUAEDATE MAKEBD(2011, 1, 4)
+#define WINUAEBETA L"10"
+#define WINUAEDATE MAKEBD(2011, 1, 9)
#define WINUAEEXTRA L""
#define WINUAEREV L""
#endif
#define AMIGA_WIDTH_MAX (752 / 2)
-#define AMIGA_HEIGHT_MAX (572 / 2)
+#define AMIGA_HEIGHT_MAX (574 / 2)
#define DM_DX_FULLSCREEN 1
#define DM_W_FULLSCREEN 2
| doMask256 (g, green_bits, green_shift)
| doMask256 (b, blue_bits, blue_shift))
| doMask256 (0xff, alpha_bits, alpha_shift);
- if (v != picasso_vidinfo.clut[i]) {
+ if (v != picasso_vidinfo.clut[i]) {
+ //write_log (L"%d:%08x\n", i, v);
picasso_vidinfo.clut[i] = v;
changed = 1;
}
+- fast multicore systems filesystem slowdown fix (always been there but "slower" CPUs didn't trigger it so easily)
+- last scanline was invisible in filtered doubled modes
+- sprite dma does not switch immediately off when DMACON sprite bit is cleared (Magic Demo / Diabolics)
+- do not autoswitch (button press on unused input device) if it would replace GamePorts custom remapped input device
+- fixed GamePorts parallel port configuration possible crash and wrong configuration
+
Beta 9:
- emulate mouse counter behavior 100% when joystick is connected (increase/decrease counter by 4 when