}
#endif
-STATIC_INLINE bool usehacks1 (void)
+STATIC_INLINE bool usehacks(void)
{
return currprefs.cpu_model >= 68020 || currprefs.m68k_speed != 0;
}
-#if 0
-STATIC_INLINE bool usehacks2 (void)
-{
- if (currprefs.cpu_cycle_exact && currprefs.cpu_model <= 68020)
- return false;
- return currprefs.cpu_model >= 68020 || currprefs.m68k_speed != 0;
-}
-#endif
-
#define SINC_QUEUE_MAX_AGE 2048
/* Queue length 256 implies minimum emulated period of 8. This should be
* sufficient for all imaginable purposes. This must be power of two. */
uaecptr ptx;
bool ptx_written;
bool ptx_tofetch;
+ int dmaofftime_active;
};
static int samplecnt;
cdp->evtime = MAX_EV;
cdp->intreq2 = 0;
cdp->dmaenstore = false;
+ cdp->dmaofftime_active = 0;
#if TEST_AUDIO > 0
cdp->have_dat = false;
#endif
}
audio_activate ();
- if ((cdp->state == 2 || cdp->state == 3) && usehacks1 () && !chan_ena && old_dma) {
- // DMA switched off, state=2/3 and "too fast CPU": kill DMA instantly
- // or CPU timed DMA wait routines in common tracker players will lose notes
+ if ((cdp->state == 2 || cdp->state == 3) && usehacks()) {
+ if (!chan_ena && old_dma) {
+ // DMA switched off, state=2/3 and "too fast CPU": set flag
+ cdp->dmaofftime_active = true;
+ }
+ if (cdp->dmaofftime_active && !old_dma && chan_ena) {
+ // We are still in state=2/3 and program is going to re-enable
+ // DMA. Force state to zero to prevent CPU timed DMA wait
+ // routines in common tracker players to lose notes.
#if DEBUG_AUDIO_HACK > 0
- if (debugchannel (nr))
- write_log (_T("%d: INSTADMAOFF\n"), nr, M68K_GETPC);
+ if (debugchannel (nr))
+ write_log (_T("%d: INSTADMAOFF\n"), nr, M68K_GETPC);
#endif
- newsample (nr, (cdp->dat2 >> 0) & 0xff);
- if (napnav)
- setirq (nr, 91);
- zerostate (nr);
- return;
+ newsample (nr, (cdp->dat2 >> 0) & 0xff);
+// if (napnav)
+// setirq (nr, 91);
+ zerostate (nr);
+ }
}
#if DEBUG_AUDIO > 0
cdp->state = 2;
setirq (nr, 0);
loaddat (nr);
- if (usehacks1 () && cdp->per < 10 * CYCLE_UNIT) {
+ if (usehacks() && cdp->per < 10 * CYCLE_UNIT) {
// make sure audio.device AUDxDAT startup returns to idle state before DMA is enabled
newsample (nr, (cdp->dat2 >> 0) & 0xff);
zerostate (nr);
// someone wants to update PT but DSR has not yet been processed.
// too fast CPU and some tracker players: enable DMA, CPU delay, update AUDxPT with loop position
- if (usehacks1 () && ((cdp->ptx_tofetch && cdp->state == 1) || cdp->ptx_written)) {
+ if (usehacks() && ((cdp->ptx_tofetch && cdp->state == 1) || cdp->ptx_written)) {
cdp->ptx = cdp->lc;
cdp->ptx_written = true;
#if DEBUG_AUDIO_HACK > 0
struct audio_channel_data *cdp = audio_channel + nr;
audio_activate ();
update_audio ();
- if (usehacks1 () && ((cdp->ptx_tofetch && cdp->state == 1) || cdp->ptx_written)) {
+ if (usehacks() && ((cdp->ptx_tofetch && cdp->state == 1) || cdp->ptx_written)) {
cdp->ptx = cdp->lc;
cdp->ptx_written = true;
#if DEBUG_AUDIO_HACK > 0
type = DMARECORD_BLITTER;
if (debug_dma)
record_dma (reg, dat, addr, hpos, vpos, type);
+ if (memwatch_enabled) {
+ if (reg == 0)
+ debug_wputpeekdma_chipram(addr, dat, MW_MASK_BLITTER_D, reg);
+ else if (reg == 0x70)
+ debug_wgetpeekdma_chipram(addr, dat, MW_MASK_BLITTER_C, reg);
+ else if (reg == 0x72)
+ debug_wgetpeekdma_chipram(addr, dat, MW_MASK_BLITTER_B, reg);
+ else if (reg == 0x74)
+ debug_wgetpeekdma_chipram(addr, dat, MW_MASK_BLITTER_A, reg);
+ }
#endif
}
//last_custom_value1 = w; blitter writes are not stored
if (!(log_blitter & 4)) {
chipmem_wput_indirect (addr, w);
- debug_wputpeekdma_chipram (addr, w, 0x000);
+ debug_wputpeekdma_chipram (addr, w, MW_MASK_BLITTER_D, 0x000);
}
}
if (!dmaen (DMA_BLITTER))
return;
blt_info.bltcdat = chipmem_wget_indirect (bltcpt);
+ debug_wgetpeekdma_chipram (bltcpt, blt_info.bltcdat, MW_MASK_BLITTER_C, 0x070);
last_custom_value1 = blt_info.bltcdat;
}
bltstate = BLT_work;
return;
//last_custom_value1 = blt_info.bltddat; blitter writes are not stored
chipmem_wput_indirect (bltdpt, blt_info.bltddat);
- debug_wputpeekdma_chipram (bltdpt, blt_info.bltddat, 0x000);
+ debug_wputpeekdma_chipram (bltdpt, blt_info.bltddat, MW_MASK_BLITTER_D, 0x000);
}
bltstate = BLT_next;
}
TCHAR fname[MAX_DPATH];
write_log (_T("CCD TOC: '%s'\n"), img);
- _tcscpy (fname, img);
+ _tcscpy (fname, zfile_getname(zcue));
TCHAR *ext = _tcsrchr (fname, '.');
if (ext)
*ext = 0;
}
if (_tcscmp (option, _T("joyportfriendlyname0")) == 0 || _tcscmp (option, _T("joyportfriendlyname1")) == 0) {
- inputdevice_joyport_config (p, value, _tcscmp (option, _T("joyportfriendlyname0")) == 0 ? 0 : 1, -1, 2);
+ inputdevice_joyport_config (p, value, _tcscmp (option, _T("joyportfriendlyname0")) == 0 ? 0 : 1, -1, 2, true);
return 1;
}
if (_tcscmp (option, _T("joyportfriendlyname2")) == 0 || _tcscmp (option, _T("joyportfriendlyname3")) == 0) {
- inputdevice_joyport_config (p, value, _tcscmp (option, _T("joyportfriendlyname2")) == 0 ? 2 : 3, -1, 2);
+ inputdevice_joyport_config (p, value, _tcscmp (option, _T("joyportfriendlyname2")) == 0 ? 2 : 3, -1, 2, true);
return 1;
}
if (_tcscmp (option, _T("joyportname0")) == 0 || _tcscmp (option, _T("joyportname1")) == 0) {
- inputdevice_joyport_config (p, value, _tcscmp (option, _T("joyportname0")) == 0 ? 0 : 1, -1, 1);
+ inputdevice_joyport_config (p, value, _tcscmp (option, _T("joyportname0")) == 0 ? 0 : 1, -1, 1, true);
return 1;
}
if (_tcscmp (option, _T("joyportname2")) == 0 || _tcscmp (option, _T("joyportname3")) == 0) {
- inputdevice_joyport_config (p, value, _tcscmp (option, _T("joyportname2")) == 0 ? 2 : 3, -1, 1);
+ inputdevice_joyport_config (p, value, _tcscmp (option, _T("joyportname2")) == 0 ? 2 : 3, -1, 1, true);
return 1;
}
if (_tcscmp (option, _T("joyport0")) == 0 || _tcscmp (option, _T("joyport1")) == 0) {
- inputdevice_joyport_config (p, value, _tcscmp (option, _T("joyport0")) == 0 ? 0 : 1, -1, 0);
+ inputdevice_joyport_config (p, value, _tcscmp (option, _T("joyport0")) == 0 ? 0 : 1, -1, 0, true);
return 1;
}
if (_tcscmp (option, _T("joyport2")) == 0 || _tcscmp (option, _T("joyport3")) == 0) {
- inputdevice_joyport_config (p, value, _tcscmp (option, _T("joyport2")) == 0 ? 2 : 3, -1, 0);
+ inputdevice_joyport_config (p, value, _tcscmp (option, _T("joyport2")) == 0 ? 2 : 3, -1, 0, true);
return 1;
}
if (cfgfile_strval (option, value, _T("joyport0mode"), &p->jports[0].mode, joyportmodes, 0))
}
if ((p->cpu_model >= 68020 || !p->cpu_cycle_exact) && !p->immediate_blits)
p->waiting_blits = 1;
+ if (p->sound_filter_type == FILTER_SOUND_TYPE_A500 && (p->chipset_mask & CSMASK_AGA))
+ p->sound_filter_type = FILTER_SOUND_TYPE_A1200;
+ else if (p->sound_filter_type == FILTER_SOUND_TYPE_A1200 && !(p->chipset_mask & CSMASK_AGA))
+ p->sound_filter_type = FILTER_SOUND_TYPE_A500;
return v;
}
}
}
+static int cia_interrupt_disabled;
+
+static bool access_last_eclock(void)
+{
+ if (!currprefs.cpu_cycle_exact)
+ return false;
+ return true;
+}
+
static void ICR (uae_u32 data)
{
INTREQ_0 (0x8000 | data);
}
static void ICRA (uae_u32 data)
{
+ if (cia_interrupt_disabled & 1) {
+ event2_newevent_xx (-1, 4 * CYCLE_UNIT, data, ICRA);
+ return;
+ }
ICR (data);
ciaaicr |= 0x40;
}
static void ICRB (uae_u32 data)
{
+ if (cia_interrupt_disabled & 2) {
+#if CIAB_DEBUG_IRQ
+ write_log(_T("ciab interrupt disabled ICR=%02X PC=%x\n"), ciabicr, M68K_GETPC);
+#endif
+ event2_newevent_xx (-1, 4 * CYCLE_UNIT, data, ICRB);
+ return;
+ }
ICR (data);
ciabicr |= 0x40;
}
#endif
if (!(ciaaicr & 0x80)) {
ciaaicr |= 0x80;
- if (currprefs.cpu_cycle_exact)
+ if (currprefs.cpu_cycle_exact) {
event2_newevent_xx (-1, DIV10 + 2 * CYCLE_UNIT + CYCLE_UNIT / 2, 0x0008, ICRA);
- else
+ } else {
ICRA (0x0008);
+ }
}
}
}
#endif
if (!(ciabicr & 0x80)) {
ciabicr |= 0x80;
- if (currprefs.cpu_cycle_exact)
+ if (currprefs.cpu_cycle_exact) {
event2_newevent_xx (-1, DIV10 + 2 * CYCLE_UNIT + CYCLE_UNIT / 2, 0x2000, ICRB);
- else
+ } else {
ICRB (0x2000);
+ }
}
}
}
case 13:
#if CIAB_DEBUG_IRQ
if (ciabicr & (0x80 | 0x40))
- write_log (_T("CIAB IRQ cleared\n"));
+ write_log (_T("CIAB IRQ cleared PC=%x\n"), M68K_GETPC);
#endif
tmp = ciabicr & ~0x40;
ciabicr = 0;
return currprefs.cs_ide || currprefs.cs_pcmcia;
}
-static void cia_wait_pre (void)
+static void cia_wait_pre (int cianummask)
{
if (currprefs.cachesize)
return;
+ if (currprefs.cpu_cycle_exact) {
+ cia_interrupt_disabled |= cianummask;
+ }
+
#ifndef CUSTOM_SIMPLE
int div = (get_cycles () - eventtab[ev_cia].oldcycles) % DIV10;
int cycles;
#endif
}
-static void cia_wait_post (uae_u32 value)
+static void cia_wait_post (int cianummask, uae_u32 value)
{
if (currprefs.cachesize) {
do_cycles (8 * CYCLE_UNIT /2);
x_do_cycles_post (c, value);
else
do_cycles (c);
+ if (currprefs.cpu_cycle_exact) {
+ cia_interrupt_disabled &= ~cianummask;
+ }
}
}
if (!isgaylenocia (addr))
return v;
- cia_wait_pre ();
switch ((addr >> 12) & 3) {
case 0:
- if (!issinglecia ())
+ if (!issinglecia ()) {
+ cia_wait_pre (1 | 2);
v = (addr & 1) ? ReadCIAA (r) : ReadCIAB (r);
+ cia_wait_post (1 | 2, v);
+ }
break;
case 1:
- if (currprefs.cpu_model == 68000 && currprefs.cpu_compatible)
+ cia_wait_pre (2);
+ if (currprefs.cpu_model == 68000 && currprefs.cpu_compatible) {
v = (addr & 1) ? regs.irc : ReadCIAB (r);
- else
+ } else {
v = (addr & 1) ? 0xff : ReadCIAB (r);
+ }
+ cia_wait_post (2, v);
break;
case 2:
+ cia_wait_pre (1);
if (currprefs.cpu_model == 68000 && currprefs.cpu_compatible)
v = (addr & 1) ? ReadCIAA (r) : regs.irc >> 8;
else
v = (addr & 1) ? ReadCIAA (r) : 0xff;
+ cia_wait_post (1, v);
break;
case 3:
- if (currprefs.cpu_model == 68000 && currprefs.cpu_compatible)
+ if (currprefs.cpu_model == 68000 && currprefs.cpu_compatible) {
+ cia_wait_pre (0);
v = (addr & 1) ? regs.irc : regs.irc >> 8;
+ cia_wait_post (0, v);
+ }
if (warned > 0 || currprefs.illegal_mem) {
write_log (_T("cia_bget: unknown CIA address %08X=%02X PC=%08X\n"), addr, v & 0xff, M68K_GETPC);
warned--;
}
break;
}
- cia_wait_post (v);
return v;
}
if (!isgaylenocia (addr))
return v;
- cia_wait_pre ();
switch ((addr >> 12) & 3)
{
case 0:
- if (!issinglecia ())
+ if (!issinglecia ()) {
+ cia_wait_pre (1 | 2);
v = (ReadCIAB (r) << 8) | ReadCIAA (r);
+ cia_wait_post (1 | 2, v);
+ }
break;
case 1:
+ cia_wait_pre (2);
v = (ReadCIAB (r) << 8) | 0xff;
+ cia_wait_post (2, v);
break;
case 2:
+ cia_wait_pre (1);
v = (0xff << 8) | ReadCIAA (r);
+ cia_wait_post (1, v);
break;
case 3:
- if (currprefs.cpu_model == 68000 && currprefs.cpu_compatible)
+ if (currprefs.cpu_model == 68000 && currprefs.cpu_compatible) {
+ cia_wait_pre (0);
v = regs.irc;
+ cia_wait_post (0, v);
+ }
if (warned > 0 || currprefs.illegal_mem) {
write_log (_T("cia_wget: unknown CIA address %08X=%04X PC=%08X\n"), addr, v & 0xffff, M68K_GETPC);
warned--;
}
break;
}
- cia_wait_post (v);
return v;
}
if (!isgaylenocia (addr))
return;
- cia_wait_pre ();
if (!issinglecia () || (addr & 0x3000) != 0) {
+ cia_wait_pre (((addr & 0x2000) == 0 ? 1 : 0) | ((addr & 0x1000) == 0 ? 2 : 0));
if ((addr & 0x2000) == 0)
WriteCIAB (r, value);
if ((addr & 0x1000) == 0)
WriteCIAA (r, value);
+ cia_wait_post (((addr & 0x2000) == 0 ? 1 : 0) | ((addr & 0x1000) == 0 ? 2 : 0), value);
if (((addr & 0x3000) == 0x3000) && (warned > 0 || currprefs.illegal_mem)) {
write_log (_T("cia_bput: unknown CIA address %08X=%082X PC=%08X\n"), addr, value & 0xff, M68K_GETPC);
warned--;
}
}
- cia_wait_post (value);
}
static void REGPARAM2 cia_wput (uaecptr addr, uae_u32 value)
if (!isgaylenocia (addr))
return;
- cia_wait_pre ();
if (!issinglecia () || (addr & 0x3000) != 0) {
+ cia_wait_pre (((addr & 0x2000) == 0 ? 1 : 0) | ((addr & 0x1000) == 0 ? 2 : 0));
if ((addr & 0x2000) == 0)
WriteCIAB (r, value >> 8);
if ((addr & 0x1000) == 0)
WriteCIAA (r, value & 0xff);
+ cia_wait_post (((addr & 0x2000) == 0 ? 1 : 0) | ((addr & 0x1000) == 0 ? 2 : 0), value);
if (((addr & 0x3000) == 0x3000) && (warned > 0 || currprefs.illegal_mem)) {
write_log (_T("cia_wput: unknown CIA address %08X=%04X %08X\n"), addr, value & 0xffff, M68K_GETPC);
warned--;
}
}
- cia_wait_post (value);
}
static void REGPARAM2 cia_lput (uaecptr addr, uae_u32 value)
struct ev eventtab[ev_max];
struct ev2 eventtab2[ev2_max];
+int hpos_offset;
int vpos;
static int vpos_count, vpos_count_diff;
int lof_store; // real bit in custom registers
static enum nln_how nextline_how;
static int lof_changed = 0, lof_changing = 0, interlace_changed = 0;
static int lof_changed_previous_field;
+static int vposw_change;
static bool lof_lace;
static bool bplcon0_interlace_seen;
static int scandoubled_line;
uae_u16 intena, intreq;
uae_u16 dmacon;
uae_u16 adkcon; /* used by audio code */
-uae_u16 last_custom_value1;
+uae_u32 last_custom_value1;
static uae_u32 cop1lc, cop2lc, copcon;
static int diw_hstrt, diw_hstop;
static int diw_hcounter;
-#define HSYNCTIME (maxhpos * CYCLE_UNIT);
+#define HSYNCTIME (maxhpos * CYCLE_UNIT)
struct sprite {
uaecptr pt;
if (!chipmem_check_indirect (plpt, bytecount)) {
static int count = 0;
if (!count)
- count++, write_log (_T("Warning: Bad playfield pointer\n"));
+ count++, write_log (_T("Warning: Bad playfield pointer %08x\n"), plpt);
return NULL;
}
return chipmem_xlate_indirect (plpt);
#ifdef DEBUGGER
if (debug_dma)
record_dma (0x110 + nr * 2, chipmem_wget_indirect (p), p, hpos, vpos, DMARECORD_BITPLANE);
+ if (memwatch_enabled)
+ debug_wgetpeekdma_chipram(p, chipmem_wget_indirect (p), MW_MASK_BPL_0 << nr, 0x110 + nr * 2);
#endif
switch (fm)
{
#ifdef AGA
case 1:
fetched_aga[nr] = chipmem_lget_indirect (p);
- last_custom_value1 = fetched[nr] = (uae_u16)fetched_aga[nr];
+ last_custom_value1 = fetched_aga[nr];
+ fetched[nr] = (uae_u16)fetched_aga[nr];
break;
case 2:
fetched_aga[nr] = ((uae_u64)chipmem_lget_indirect (p)) << 32;
fetched_aga[nr] |= chipmem_lget_indirect (p + 4);
- last_custom_value1 = fetched[nr] = (uae_u16)fetched_aga[nr];
+ last_custom_value1 = (uae_u32)fetched_aga[nr];
+ fetched[nr] = (uae_u16)fetched_aga[nr];
break;
#endif
}
hsyncstartpos = maxhpos_short + 13;
hsyncendpos = 24;
}
+ hpos_offset = 0;
eventtab[ev_hsync].oldcycles = get_cycles ();
eventtab[ev_hsync].evtime = get_cycles () + HSYNCTIME;
events_schedule ();
if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS))
v &= 1;
vpos |= v << 8;
+ if (vpos != oldvpos)
+ vposw_change++;
if (vpos < oldvpos)
vpos = oldvpos;
}
static void VHPOSW (uae_u16 v)
{
int oldvpos = vpos;
+ bool changed = false;
#if 0
if (M68K_GETPC < 0xf00000 || 1)
write_log (_T("VHPOSW %04X PC=%08x\n"), v, M68K_GETPC);
#endif
+
#if 0
- int hp = v & 0xff;
- int oldhp = current_hpos ();
- if (hp != oldhp) {
- if (hp >= maxhpos)
- hp = maxhpos - 1;
- eventtab[ev_hsync].oldcycles = get_cycles () - hp * CYCLE_UNIT;
- eventtab[ev_hsync].evtime = eventtab[ev_hsync].oldcycles + HSYNCTIME;
- events_schedule ();
+ /* This is not that easy, need to decouple denise and paula hpos counters
+ * from master counter.
+ * All this just to fix Upfront-CoolFridge Smooth Copper part..
+ */
+ if (oldhpos != newhpos) {
+ oldhpos = current_hpos();
+ int newhpos = v & 0xff;
+ if (newhpos >= maxhpos)
+ newhpos = maxhpos - 1;
+ hpos_offset = newhpos - oldhpos;
+ eventtab[ev_hsync].evtime = get_cycles() + HSYNCTIME - (newhpos * CYCLE_UNIT);
+ eventtab[ev_hsync].oldcycles = get_cycles() - newhpos * CYCLE_UNIT;
+ events_schedule();
+ newhpos2 = current_hpos();
+#ifdef CPUEMU_13
+ if (currprefs.cpu_cycle_exact || currprefs.blitter_cycle_exact) {
+ memset(cycle_line + newhpos, 0, maxhpos - newhpos);
+ int hp = maxhpos - 1, i;
+ for (i = 0; i < 4; i++) {
+ alloc_cycle (hp, i == 0 ? CYCLE_STROBE : CYCLE_REFRESH);
+ hp += 2;
+ if (hp >= maxhpos)
+ hp -= maxhpos;
+ }
}
#endif
- v >>= 8; // lets ignore hpos for now
+ vposw_change++;
+ changed = true;
+ }
+#endif
+
+ v >>= 8;
vpos &= 0xff00;
vpos |= v;
+ if (vpos != oldvpos && !changed)
+ vposw_change++;
if (vpos < oldvpos) {
vpos = oldvpos;
} else if (vpos < minfirstline && oldvpos < minfirstline) {
{
int v;
- value = debug_wputpeekdma_chipset (0xdff000 + addr, value, 0x08c);
+ value = debug_wputpeekdma_chipset (0xdff000 + addr, value, MW_MASK_COPPER, 0x08c);
copper_access = 1;
v = custom_wput_1 (hpos, addr, value, noget);
copper_access = 0;
#ifdef DEBUGGER
if (debug_dma)
record_dma (0x8c, chipmem_wget_indirect (cop_state.ip), cop_state.ip, old_hpos, vpos, DMARECORD_COPPER);
+ if (memwatch_enabled)
+ debug_wgetpeekdma_chipram(cop_state.ip, chipmem_wget_indirect (cop_state.ip), MW_MASK_COPPER, 0x8c);
#endif
if (old_hpos == maxhpos - 2) {
// if COP_strobe_delay2 would cross scanlines (positioned immediately
#ifdef DEBUGGER
if (debug_dma)
record_dma (0x1fe, chipmem_wget_indirect (cop_state.ip), cop_state.ip, old_hpos, vpos, DMARECORD_COPPER);
+ if (memwatch_enabled)
+ debug_wgetpeekdma_chipram(cop_state.ip, chipmem_wget_indirect (cop_state.ip), MW_MASK_COPPER, 0x1fe);
#endif
}
cop_state.state = COP_read1;
#ifdef DEBUGGER
if (debug_dma)
record_dma (0x1fe, chipmem_wget_indirect (cop_state.ip), cop_state.ip, old_hpos, vpos, DMARECORD_COPPER);
+ if (memwatch_enabled)
+ debug_wgetpeekdma_chipram(cop_state.ip, chipmem_wget_indirect (cop_state.ip), MW_MASK_COPPER, 0x1fe);
#endif
cop_state.state = COP_read1;
// Next cycle finally reads from new pointer
#ifdef DEBUGGER
if (debug_dma)
record_dma (0x1fe, cop_state.i1, cop_state.ip, old_hpos, vpos, DMARECORD_COPPER);
+ if (memwatch_enabled)
+ debug_wgetpeekdma_chipram(cop_state.ip, cop_state.i1, MW_MASK_COPPER, 0x1fe);
#endif
cop_state.ip = cop1lc;
break;
#ifdef DEBUGGER
if (debug_dma)
record_dma (0x8c, cop_state.i1, cop_state.ip, old_hpos, vpos, DMARECORD_COPPER);
+ if (memwatch_enabled)
+ debug_wgetpeekdma_chipram(cop_state.ip, cop_state.i1, MW_MASK_COPPER, 0x8c);
#endif
cop_state.ip += 2;
cop_state.state = COP_read2;
#ifdef DEBUGGER
if (debug_dma)
record_dma (0x8c, cop_state.i2, cop_state.ip - 2, old_hpos, vpos, DMARECORD_COPPER);
+ if (memwatch_enabled)
+ debug_wgetpeekdma_chipram(cop_state.ip - 2, cop_state.i2, MW_MASK_COPPER, 0x8c);
#endif
} else { // MOVE
#ifdef DEBUGGER
#ifdef DEBUGGER
if (debug_dma)
record_dma (reg, data, cop_state.ip - 2, old_hpos, vpos, DMARECORD_COPPER);
+ if (memwatch_enabled)
+ debug_wgetpeekdma_chipram(cop_state.ip - 2, data, MW_MASK_COPPER, reg);
#endif
test_copper_dangerous (reg);
if (! copper_enabled_thisline)
#ifdef DEBUGGER
if (debug_dma)
record_dma ((s - &spr[0]) * 8 + 0x140 + mode * 4 + cycle * 2, data, s->pt, hpos, vpos, DMARECORD_SPRITE);
+ if (memwatch_enabled)
+ debug_wgetpeekdma_chipram(s->pt, data, MW_MASK_SPR_0 << (s - &spr[0]), (s - &spr[0]) * 8 + 0x140 + mode * 4 + cycle * 2);
#endif
}
s->pt += 2;
if (varsync_changed || (beamcon0 & (0x20 | 0x80)) != (new_beamcon0 & (0x20 | 0x80))) {
init_hz ();
- } else if (vpos_count > 0 && abs (vpos_count - vpos_count_diff) > 1) {
+ } else if (vpos_count > 0 && abs (vpos_count - vpos_count_diff) > 1 && vposw_change < 4) {
init_hz ();
} else if (interlace_changed || changed_chipset_refresh () || lof_changed) {
compute_framesync ();
}
lof_changed = 0;
+ vposw_change = 0;
bplcon0_interlace_seen = false;
COPJMP (1, 1);
#ifdef DEBUGGER
if (debug_dma)
record_dma (0xaa + nr * 16, dat, pt, hpos, vpos, DMARECORD_AUDIO);
+ if (memwatch_enabled)
+ debug_wgetpeekdma_chipram(pt, dat, MW_MASK_AUDIO_0 << nr, 0xaa + nr * 16);
#endif
last_custom_value1 = dat;
AUDxDAT (nr, dat, pt);
#ifdef DEBUGGER
if (debug_dma)
record_dma (w ? 0x26 : 0x08, dat, pt, hpos, vpos, DMARECORD_DISK);
+ if (memwatch_enabled)
+ debug_wgetpeekdma_chipram(pt, dat, MW_MASK_DISK, w ? 0x26 : 0x08);
#endif
}
}
static void set_hpos (void)
{
maxhpos = maxhpos_short + lol;
+ hpos_offset = 0;
eventtab[ev_hsync].evtime = get_cycles () + HSYNCTIME;
eventtab[ev_hsync].oldcycles = get_cycles ();
}
* OCS-only special case: DFF000 (BLTDDAT) will always return whatever was left in bus
*
* AGA:
- * only writes to custom registers change last value, read returns
- * last value which then changes to all ones (following read will return
- * all ones)
+ * Can also return last CPU accessed value
+ * Remembers old last_custom_value1
*/
v = last_custom_value1;
line_cyclebased = vpos;
int r, c, bmdma;
uae_u16 l;
- // last chip bus value (read or write) is written to register
- if (currprefs.cpu_compatible && currprefs.cpu_model == 68000) {
- if (isbyte)
- l = (regs.chipset_latch_rw << 8) | (regs.chipset_latch_rw & 0xff);
- else
- l = regs.chipset_latch_rw;
+ if (currprefs.chipset_mask & CSMASK_AGA) {
+ l = 0;
} else {
- l = regs.chipset_latch_rw;
+ // last chip bus value (read or write) is written to register
+ if (currprefs.cpu_compatible && currprefs.cpu_model == 68000) {
+ if (isbyte)
+ l = (regs.chipset_latch_rw << 8) | (regs.chipset_latch_rw & 0xff);
+ else
+ l = regs.chipset_latch_rw;
+ } else {
+ l = regs.chipset_latch_rw;
+ }
}
decide_line (hpos);
decide_fetch_safe (hpos);
debug_wputpeek (0xdff000 + addr, l);
r = custom_wput_1 (hpos, addr, l, 1);
- // cpu gets back
+ // CPU gets back (OCS/ECS only):
// - if last cycle was DMA cycle: DMA cycle data
// - if last cycle was not DMA cycle: FFFF or some ANDed old data.
//
c = cycle_line[hpos] & CYCLE_MASK;
bmdma = is_bitplane_dma(hpos);
- if (bmdma || (c > CYCLE_REFRESH && c < CYCLE_CPU)) {
- v = last_custom_value1;
+ if (currprefs.chipset_mask & CSMASK_AGA) {
+ if (bmdma || (c > CYCLE_REFRESH && c < CYCLE_CPU)) {
+ v = last_custom_value1;
+ } else if (c == CYCLE_CPU) {
+ v = regs.db;
+ } else {
+ v = last_custom_value1 >> ((addr & 2) ? 0 : 16);
+ }
} else {
- // refresh checked because refresh cycles do not always
- // set last_custom_value1 for performance reasons.
- v = 0xffff;
+ if (bmdma || (c > CYCLE_REFRESH && c < CYCLE_CPU)) {
+ v = last_custom_value1;
+ } else {
+ // refresh checked because refresh cycles do not always
+ // set last_custom_value1 for performance reasons.
+ v = 0xffff;
+ }
}
#if CUSTOM_DEBUG > 0
write_log (_T("%08X read = %04X. Value written=%04X PC=%08x\n"), 0xdff000 | addr, v, l, M68K_GETPC);
static uae_u32 skipins;
static int do_skip;
static int debug_rewind;
-static int memwatch_enabled, memwatch_triggered;
+static int memwatch_triggered;
+int memwatch_enabled;
static uae_u16 sr_bpmask, sr_bpvalue;
int debugging;
int exception_debugging;
for (i = 0; i < cols && h < maxh; i++, h++, dr++) {
int cl = i * col, cl2;
int r = dr->reg;
+ bool longsize = false;
TCHAR *sr;
sr = _T(" ");
_tcscpy (l2 + cl, _T(" CPU-R "));
else if ((r & 0x0100) == 0x0100)
_tcscpy (l2 + cl, _T(" CPU-W "));
- if ((r & 0xff) == 4)
+ if ((r & 0xff) == 4) {
l2[cl + 7] = 'L';
+ longsize = true;
+ }
if ((r & 0xff) == 2)
l2[cl + 7] = 'W';
if ((r & 0xff) == 1)
} else {
_stprintf (l2 + cl, _T("%4s %03X"), sr, r);
}
- _stprintf (l3 + cl, _T(" %04X"), dr->dat);
+ _stprintf (l3 + cl, longsize ? _T("%08X") : _T(" %04X"), dr->dat);
if (dr->addr != 0xffffffff)
_stprintf (l4 + cl, _T("%08X"), dr->addr & 0x00ffffff);
} else {
save_u32 (m->val_size);
save_u32 (m->val);
save_u32 (m->pc);
+ save_u32 (m->access_mask);
+ save_u32 (m->reg);
save_store_size ();
}
*len = dst - dstbak;
m->val_size = restore_u32 ();
m->val = restore_u32 ();
m->pc = restore_u32 ();
+ m->access_mask = restore_u32();
+ m->reg = restore_u32();
restore_store_size ();
}
return src;
}
}
-static int memwatch_func (uaecptr addr, int rwi, int size, uae_u32 *valp)
+static int memwatch_func (uaecptr addr, int rwi, int size, uae_u32 *valp, uae_u32 accessmask, uae_u32 reg)
{
int i, brk;
uae_u32 val = *valp;
continue;
if (!(rwi & rwi2))
continue;
+ if (!(m->access_mask & accessmask))
+ continue;
+
if (addr >= addr2 && addr < addr3)
brk = 1;
if (!brk && size == 2 && (addr + 1 >= addr2 && addr + 1 < addr3))
mwhit.rwi = rwi;
mwhit.size = size;
mwhit.val = 0;
+ mwhit.access_mask = accessmask;
+ mwhit.reg = reg;
if (mwhit.rwi & 2)
mwhit.val = val;
memwatch_triggered = i + 1;
uae_u32 off = debug_mem_off (&addr);
uae_u32 v;
v = debug_mem_banks[off]->lget (addr);
- memwatch_func (addr, 1, 4, &v);
+ memwatch_func (addr, 1, 4, &v, MW_MASK_CPU, 0);
return v;
}
static uae_u32 REGPARAM2 mmu_lgeti (uaecptr addr)
int off = debug_mem_off (&addr);
uae_u32 v;
v = debug_mem_banks[off]->wget (addr);
- memwatch_func (addr, 1, 2, &v);
+ memwatch_func (addr, 1, 2, &v, MW_MASK_CPU, 0);
return v;
}
static uae_u32 REGPARAM2 debug_bget (uaecptr addr)
int off = debug_mem_off (&addr);
uae_u32 v;
v = debug_mem_banks[off]->bget (addr);
- memwatch_func (addr, 1, 1, &v);
+ memwatch_func (addr, 1, 1, &v, MW_MASK_CPU, 0);
return v;
}
static uae_u32 REGPARAM2 debug_lgeti (uaecptr addr)
int off = debug_mem_off (&addr);
uae_u32 v;
v = debug_mem_banks[off]->lgeti (addr);
- memwatch_func (addr, 4, 4, &v);
+ memwatch_func (addr, 4, 4, &v, MW_MASK_CPU, 0);
return v;
}
static uae_u32 REGPARAM2 debug_wgeti (uaecptr addr)
int off = debug_mem_off (&addr);
uae_u32 v;
v = debug_mem_banks[off]->wgeti (addr);
- memwatch_func (addr, 4, 2, &v);
+ memwatch_func (addr, 4, 2, &v, MW_MASK_CPU, 0);
return v;
}
static void REGPARAM2 debug_lput (uaecptr addr, uae_u32 v)
{
int off = debug_mem_off (&addr);
- if (memwatch_func (addr, 2, 4, &v))
+ if (memwatch_func (addr, 2, 4, &v, MW_MASK_CPU, 0))
debug_mem_banks[off]->lput (addr, v);
}
static void REGPARAM2 debug_wput (uaecptr addr, uae_u32 v)
{
int off = debug_mem_off (&addr);
- if (memwatch_func (addr, 2, 2, &v))
+ if (memwatch_func (addr, 2, 2, &v, MW_MASK_CPU, 0))
debug_mem_banks[off]->wput (addr, v);
}
static void REGPARAM2 debug_bput (uaecptr addr, uae_u32 v)
{
int off = debug_mem_off (&addr);
- if (memwatch_func (addr, 2, 1, &v))
+ if (memwatch_func (addr, 2, 1, &v, MW_MASK_CPU, 0))
debug_mem_banks[off]->bput (addr, v);
}
static int REGPARAM2 debug_check (uaecptr addr, uae_u32 size)
return debug_mem_banks[munge24 (addr) >> 16]->xlateaddr (addr);
}
-uae_u16 debug_wputpeekdma_chipset (uaecptr addr, uae_u32 v, int reg)
+uae_u16 debug_wputpeekdma_chipset (uaecptr addr, uae_u32 v, uae_u32 mask, int reg)
{
if (!memwatch_enabled)
return v;
addr &= 0x1fe;
addr += 0xdff000;
- memwatch_func (addr, 2, 2, &v);
+ memwatch_func (addr, 2, 2, &v, mask, reg);
return v;
}
-uae_u16 debug_wputpeekdma_chipram (uaecptr addr, uae_u32 v, int reg)
+uae_u16 debug_wputpeekdma_chipram (uaecptr addr, uae_u32 v, uae_u32 mask, int reg)
{
if (!memwatch_enabled)
return v;
return v;
if (!currprefs.z3chipmem_size)
addr &= chipmem_bank.mask;
- memwatch_func (addr & chipmem_bank.mask, 2, 2, &v);
+ memwatch_func (addr & chipmem_bank.mask, 2, 2, &v, mask, reg);
return v;
}
-uae_u16 debug_wgetpeekdma_chipram (uaecptr addr, uae_u32 v, int reg)
+uae_u16 debug_wgetpeekdma_chipram (uaecptr addr, uae_u32 v, uae_u32 mask, int reg)
{
uae_u32 vv = v;
if (!memwatch_enabled)
return v;
if (!currprefs.z3chipmem_size)
addr &= chipmem_bank.mask;
- memwatch_func (addr, 1, 2, &vv);
+ memwatch_func (addr, 1, 2, &vv, mask, reg);
return vv;
}
{
if (!memwatch_enabled)
return;
- memwatch_func (addr, 2, 4, &v);
+ memwatch_func (addr, 2, 4, &v, MW_MASK_CPU, 0);
}
void debug_wputpeek (uaecptr addr, uae_u32 v)
{
if (!memwatch_enabled)
return;
- memwatch_func (addr, 2, 2, &v);
+ memwatch_func (addr, 2, 2, &v, MW_MASK_CPU, 0);
}
void debug_bputpeek (uaecptr addr, uae_u32 v)
{
if (!memwatch_enabled)
return;
- memwatch_func (addr, 2, 1, &v);
+ memwatch_func (addr, 2, 1, &v, MW_MASK_CPU, 0);
}
void debug_bgetpeek (uaecptr addr, uae_u32 v)
{
uae_u32 vv = v;
if (!memwatch_enabled)
return;
- memwatch_func (addr, 1, 1, &vv);
+ memwatch_func (addr, 1, 1, &vv, MW_MASK_CPU, 0);
}
void debug_wgetpeek (uaecptr addr, uae_u32 v)
{
uae_u32 vv = v;
if (!memwatch_enabled)
return;
- memwatch_func (addr, 1, 2, &vv);
+ memwatch_func (addr, 1, 2, &vv, MW_MASK_CPU, 0);
}
void debug_lgetpeek (uaecptr addr, uae_u32 v)
{
uae_u32 vv = v;
if (!memwatch_enabled)
return;
- memwatch_func (addr, 1, 4, &vv);
+ memwatch_func (addr, 1, 4, &vv, MW_MASK_CPU, 0);
}
struct membank_store
return -1;
}
+struct mw_acc
+{
+ uae_u32 mask;
+ const TCHAR *name;
+};
+
+static const struct mw_acc memwatch_access_masks[] =
+{
+ { MW_MASK_ALL, _T("ALL") },
+ { MW_MASK_ALL & ~MW_MASK_CPU, _T("DMA") },
+ { MW_MASK_BLITTER_A | MW_MASK_BLITTER_B | MW_MASK_BLITTER_C | MW_MASK_BLITTER_D, _T("BLT") },
+ { MW_MASK_AUDIO_0 | MW_MASK_AUDIO_1 | MW_MASK_AUDIO_2 | MW_MASK_AUDIO_3, _T("AUD") },
+ { MW_MASK_BPL_0 | MW_MASK_BPL_1 | MW_MASK_BPL_2 | MW_MASK_BPL_3 |
+ MW_MASK_BPL_4 | MW_MASK_BPL_5 | MW_MASK_BPL_6 | MW_MASK_BPL_7 , _T("BPL") },
+ { MW_MASK_SPR_0 | MW_MASK_SPR_1 | MW_MASK_SPR_2 | MW_MASK_SPR_3 |
+ MW_MASK_SPR_4 | MW_MASK_SPR_5 | MW_MASK_SPR_6 | MW_MASK_SPR_7, _T("SPR") },
+
+ { MW_MASK_CPU, _T("CPU") },
+ { MW_MASK_COPPER, _T("COP") },
+ { MW_MASK_BLITTER_A, _T("BLTA") },
+ { MW_MASK_BLITTER_B, _T("BLTB") },
+ { MW_MASK_BLITTER_C, _T("BLTC") },
+ { MW_MASK_BLITTER_D, _T("BLTD") },
+ { MW_MASK_DISK, _T("DSK") },
+ { MW_MASK_AUDIO_0, _T("AUD0") },
+ { MW_MASK_AUDIO_1, _T("AUD1") },
+ { MW_MASK_AUDIO_2, _T("AUD2") },
+ { MW_MASK_AUDIO_3, _T("AUD3") },
+ { MW_MASK_BPL_0, _T("BPL0") },
+ { MW_MASK_BPL_1, _T("BPL1") },
+ { MW_MASK_BPL_2, _T("BPL2") },
+ { MW_MASK_BPL_3, _T("BPL3") },
+ { MW_MASK_BPL_4, _T("BPL4") },
+ { MW_MASK_BPL_5, _T("BPL5") },
+ { MW_MASK_BPL_6, _T("BPL6") },
+ { MW_MASK_BPL_7, _T("BPL7") },
+ { MW_MASK_SPR_0, _T("SPR0") },
+ { MW_MASK_SPR_1, _T("SPR1") },
+ { MW_MASK_SPR_2, _T("SPR2") },
+ { MW_MASK_SPR_3, _T("SPR3") },
+ { MW_MASK_SPR_4, _T("SPR4") },
+ { MW_MASK_SPR_5, _T("SPR5") },
+ { MW_MASK_SPR_6, _T("SPR6") },
+ { MW_MASK_SPR_7, _T("SPR7") },
+ NULL
+};
+
static TCHAR *getsizechar (int size)
{
if (size == 4)
memset (buf, 0, bufsize * sizeof (TCHAR));
for (i = 0; i < MEMWATCH_TOTAL; i++) {
if ((num >= 0 && num == i) || (num < 0)) {
+ uae_u32 usedmask = 0;
mwn = &mwnodes[i];
if (mwn->size == 0)
continue;
i, mwn->addr, mwn->addr + (mwn->size - 1), mwn->size,
(mwn->rwi & 1) ? 'R' : ' ', (mwn->rwi & 2) ? 'W' : ' ', (mwn->rwi & 4) ? 'I' : ' ');
if (mwn->frozen)
- buf = buf_out (buf, &bufsize, _T("F"));
+ buf = buf_out (buf, &bufsize, _T(" F"));
if (mwn->val_enabled)
buf = buf_out (buf, &bufsize, _T(" =%X%s"), mwn->val, getsizechar (mwn->val_size));
if (mwn->modval_written)
buf = buf_out (buf, &bufsize, _T(" =M"));
if (mwn->mustchange)
buf = buf_out (buf, &bufsize, _T(" C"));
+ for (int j = 0; memwatch_access_masks[j].mask; j++) {
+ uae_u32 mask = memwatch_access_masks[j].mask;
+ if ((mwn->access_mask & mask) == mask && (usedmask & mask) == 0) {
+ buf = buf_out(buf, &bufsize, _T(" "));
+ buf = buf_out(buf, &bufsize, memwatch_access_masks[j].name);
+ usedmask |= mask;
+ }
+ }
buf = buf_out (buf, &bufsize, _T("\n"));
}
}
mwn->rwi = 7;
mwn->val_enabled = 0;
mwn->val_mask = 0xffffffff;
+ mwn->val = 0;
+ mwn->access_mask = 0;
+ mwn->reg = 0xffffffff;
mwn->frozen = 0;
mwn->modval_written = 0;
ignore_ws (c);
mwn->size = readhex (c);
ignore_ws (c);
if (more_params (c)) {
- for (;;) {
- TCHAR ncc = peek_next_char(c);
- TCHAR nc = _totupper (next_char (c));
- if (mwn->rwi == 7)
- mwn->rwi = 0;
- if (nc == 'F')
- mwn->frozen = 1;
- if (nc == 'W')
- mwn->rwi |= 2;
- if (nc == 'I')
- mwn->rwi |= 4;
- if (nc == 'R')
- mwn->rwi |= 1;
- if (ncc == ' ')
- break;
- if (!more_params(c))
- break;
+ TCHAR *cs = *c;
+ while (*cs) {
+ for (int i = 0; memwatch_access_masks[i].mask; i++) {
+ const TCHAR *n = memwatch_access_masks[i].name;
+ int len = _tcslen(n);
+ if (!_tcsnicmp(cs, n, len)) {
+ if (cs[len] == 0 || cs[len] == 10 || cs[len] == 13) {
+ mwn->access_mask |= memwatch_access_masks[i].mask;
+ while (len > 0) {
+ len--;
+ cs[len] = ' ';
+ }
+ }
+ }
+ }
+ cs++;
}
ignore_ws (c);
+ if (more_params(c)) {
+ for (;;) {
+ TCHAR ncc = peek_next_char(c);
+ TCHAR nc = _totupper (next_char (c));
+ if (mwn->rwi == 7)
+ mwn->rwi = 0;
+ if (nc == 'F')
+ mwn->frozen = 1;
+ if (nc == 'W')
+ mwn->rwi |= 2;
+ if (nc == 'I')
+ mwn->rwi |= 4;
+ if (nc == 'R')
+ mwn->rwi |= 1;
+ if (ncc == ' ')
+ break;
+ if (!more_params(c))
+ break;
+ }
+ ignore_ws (c);
+ }
if (more_params (c)) {
if (_totupper (**c) == 'M') {
mwn->modval_written = 1;
}
}
}
+ if (!mwn->access_mask)
+ mwn->access_mask = MW_MASK_CPU;
if (mwn->frozen && mwn->rwi == 0)
mwn->rwi = 3;
memwatch_setup ();
}
}
} else {
- console_out_f (_T("Memwatch %d: break at %08X.%c %c%c%c %08X PC=%08X\n"), memwatch_triggered - 1, mwhit.addr,
+ console_out_f (_T("Memwatch %d: break at %08X.%c %c%c%c %08X PC=%08X "), memwatch_triggered - 1, mwhit.addr,
mwhit.size == 1 ? 'B' : (mwhit.size == 2 ? 'W' : 'L'),
(mwhit.rwi & 1) ? 'R' : ' ', (mwhit.rwi & 2) ? 'W' : ' ', (mwhit.rwi & 4) ? 'I' : ' ',
mwhit.val, mwhit.pc);
+ for (i = 0; memwatch_access_masks[i].mask; i++) {
+ if (mwhit.access_mask == memwatch_access_masks[i].mask)
+ console_out_f (_T("%s (%03x)\n"), memwatch_access_masks[i].name, mwhit.reg);
+ }
memwatch_triggered = 0;
}
if (skipaddr_doskip > 0) {
return 0;
}
- if (!fake)
+ if (!fake) {
inprec_recorddiskchange (dnum, fname, drv->wrprot);
-
- _tcsncpy (currprefs.floppyslots[dnum].df, fname, 255);
- currprefs.floppyslots[dnum].df[255] = 0;
- currprefs.floppyslots[dnum].forcedwriteprotect = forcedwriteprotect;
- _tcsncpy (changed_prefs.floppyslots[dnum].df, fname, 255);
- changed_prefs.floppyslots[dnum].df[255] = 0;
- changed_prefs.floppyslots[dnum].forcedwriteprotect = forcedwriteprotect;
- _tcscpy (drv->newname, fname);
- drv->newnamewriteprotected = forcedwriteprotect;
- gui_filename (dnum, fname);
+ _tcsncpy (currprefs.floppyslots[dnum].df, fname, 255);
+ currprefs.floppyslots[dnum].df[255] = 0;
+ currprefs.floppyslots[dnum].forcedwriteprotect = forcedwriteprotect;
+ _tcsncpy (changed_prefs.floppyslots[dnum].df, fname, 255);
+ changed_prefs.floppyslots[dnum].df[255] = 0;
+ changed_prefs.floppyslots[dnum].forcedwriteprotect = forcedwriteprotect;
+ _tcscpy (drv->newname, fname);
+ drv->newnamewriteprotected = forcedwriteprotect;
+ gui_filename (dnum, fname);
+ }
memset (buffer, 0, sizeof buffer);
size = 0;
drv->mfmpos |= (uaerand () << 16);
drv->mfmpos %= drv->tracklen;
drv->prevtracklen = 0;
+ if (!fake) {
#ifdef DRIVESOUND
- if (isfloppysound (drv))
- driveclick_insert (drv - floppy, 0);
+ if (isfloppysound (drv))
+ driveclick_insert (drv - floppy, 0);
#endif
- update_drive_gui (drv - floppy, false);
+ update_drive_gui (drv - floppy, false);
+ }
return 1;
}
if (drv->catweasel)
return 1;
#endif
+ //write_log(_T("df%d: %d %d %d %x %s\n"), drv-&floppy[0],currprefs.floppy_read_only, drv->wrprot, drv->forcedwrprot, drv->diskfile, drv->diskfile ? zfile_getname(drv->diskfile) : _T("none"));
return currprefs.floppy_read_only || drv->wrprot || drv->forcedwrprot || drv->diskfile == NULL;
}
struct mystat st;
int mode, oldmode;
- if (!my_stat (name, &st))
+ if (!my_stat (name, &st)) {
+ write_log (_T("failed to access '%s'\n"), name);
return;
+ }
+ write_log(_T("'%s': old mode = %x\n"), name, st.mode);
oldmode = mode = st.mode;
mode &= ~FILEFLAG_WRITE;
if (!readonly)
mode |= FILEFLAG_WRITE;
- if (mode != oldmode)
- my_chmod (name, mode);
+ if (mode != oldmode) {
+ if (!my_chmod (name, mode))
+ write_log(_T("chmod failed!\n"));
+ }
+ write_log(_T("'%s': new mode = %x\n"), name, mode);
}
static void setdskchangetime (drive *drv, int dsktime)
TCHAR *name2;
drive_type drvtype;
+ write_log(_T("disk_setwriteprotect %d '%s' %d\n"), num, name, writeprotected);
+
oldprotect = diskfile_iswriteprotect (p, name, &needwritefile, &drvtype);
DISK_validate_filename (p, name, 1, &wrprot1, NULL, &zf1);
if (!zf1)
return 0;
+
+ write_log(_T("old = %d writeprot = %d master = %d\n"), oldprotect, wrprot1, p->floppy_read_only);
+
if (wrprot1 && p->floppy_read_only)
return 0;
if (zfile_iscompressed (zf1))
MISC_handler ();
}
+int current_hpos (void)
+{
+ int hp = current_hpos_safe ();
+ if (hp < 0 || hp >= 256) {
+ gui_message(_T("hpos = %d!?\n"), hp);
+ hp = 0;
+ }
+ return hp;
+}
+
#define ACTION_READ_LINK 1024
+/* OS4 64-bit filesize packets */
#define ACTION_CHANGE_FILE_POSITION64 8001
#define ACTION_GET_FILE_POSITION64 8002
#define ACTION_CHANGE_FILE_SIZE64 8003
#define ACTION_GET_FILE_SIZE64 8004
+/* MOS 64-bit filesize packets */
+#define ACTION_SEEK64 26400
+#define ACTION_SET_FILE_SIZE64 26401
+#define ACTION_LOCK_RECORD64 26402
+#define ACTION_FREE_RECORD64 26403
+#define ACTION_QUERY_ATTR 26407
+#define ACTION_EXAMINE_OBJECT64 26408
+#define ACTION_EXAMINE_NEXT64 26409
+#define ACTION_EXAMINE_FH64 26410
+
+
/* not supported */
#define ACTION_MAKE_LINK 1021
{
struct lockrecord *next;
uae_u32 packet;
- uae_u32 pos;
- uae_u32 len;
+ uae_u64 pos;
+ uae_u64 len;
uae_u32 mode;
uae_u32 timeout;
uae_u32 msg;
static uae_u32 a_uniq, key_uniq;
+static void set_quadp(uaecptr p, uae_s64 v)
+{
+ if (!valid_address(p, 8))
+ return;
+ put_long(p, v >> 32);
+ put_long(p + 4, (uae_u64)v);
+}
+static uae_u64 get_quadp(uaecptr p)
+{
+ if (!valid_address(p, 8))
+ return 0;
+ return ((uae_u64)get_long(p) << 32) | get_long(p + 4);
+}
+
typedef uaecptr dpacket;
#define PUT_PCK_RES1(p,v) do { put_long ((p) + dp_Res1, (v)); } while (0)
#define PUT_PCK_RES2(p,v) do { put_long ((p) + dp_Res2, (v)); } while (0)
from->locked_children = 0;
}
+static bool get_statinfo(Unit *unit, a_inode *aino, struct mystat *statbuf)
+{
+ bool ok = true;
+ memset (statbuf, 0, sizeof statbuf);
+ /* No error checks - this had better work. */
+ if (unit->volflags & MYVOLUMEINFO_ARCHIVE)
+ ok = zfile_stat_archive (aino->nname, statbuf) != 0;
+ else if (unit->volflags & MYVOLUMEINFO_CDFS)
+ ok = isofs_stat (unit->ui.cdfs_superblock, aino->uniq_external, statbuf);
+ else
+ my_stat (aino->nname, statbuf);
+ return ok;
+}
+
static void
- get_fileinfo (Unit *unit, dpacket packet, uaecptr info, a_inode *aino)
+ get_fileinfo (Unit *unit, dpacket packet, uaecptr info, a_inode *aino, bool longfilesize)
{
struct mystat statbuf;
int days, mins, ticks;
int i, n, entrytype, blocksize;
+ uae_s64 numblocks;
int fsdb_can = fsdb_cando (unit);
TCHAR *xs;
char *x, *x2;
- bool ok = true;
-
- memset (&statbuf, 0, sizeof statbuf);
- /* No error checks - this had better work. */
- if (unit->volflags & MYVOLUMEINFO_ARCHIVE)
- ok = zfile_stat_archive (aino->nname, &statbuf) != 0;
- else if (unit->volflags & MYVOLUMEINFO_CDFS)
- ok = isofs_stat (unit->ui.cdfs_superblock, aino->uniq_external, &statbuf);
- else
- my_stat (aino->nname, &statbuf);
- if (!ok) {
+ if (!get_statinfo(unit, aino, &statbuf)) {
PUT_PCK_RES1 (packet, DOS_FALSE);
PUT_PCK_RES2 (packet, ERROR_NOT_A_DOS_DISK);
return;
xfree (x2);
put_long (info + 116, fsdb_can ? aino->amigaos_mode : fsdb_mode_supported (aino));
- put_long (info + 124, statbuf.size > MAXFILESIZE32 ? MAXFILESIZE32 : (uae_u32)statbuf.size);
-#ifdef HAVE_ST_BLOCKS
- put_long (info + 128, statbuf.st_blocks);
-#else
+
+ if (kickstart_version >= 36) {
+ put_word (info + 224, 0); // OwnerUID
+ put_word (info + 226, 0); // OwnerGID
+ }
+
blocksize = (unit->volflags & MYVOLUMEINFO_CDFS) ? 2048 : 512;
- put_long (info + 128, (statbuf.size + blocksize - 1) / blocksize);
-#endif
+ numblocks = (statbuf.size + blocksize - 1) / blocksize;
+ put_long (info + 128, numblocks > MAXFILESIZE32 ? MAXFILESIZE32 : numblocks);
+
+ if (longfilesize) {
+ /* MorphOS 64-bit file length support */
+ put_long (info + 124, statbuf.size > MAXFILESIZE32 ? 0 : (uae_u32)statbuf.size);
+ put_long (info + 228, statbuf.size >> 32);
+ put_long (info + 232, (uae_u32)statbuf.size);
+ put_long (info + 236, numblocks >> 32);
+ put_long (info + 240, (uae_u32)numblocks);
+ } else {
+ put_long (info + 124, statbuf.size > MAXFILESIZE32 ? MAXFILESIZE32 : (uae_u32)statbuf.size);
+ }
+
timeval_to_amiga (&statbuf.mtime, &days, &mins, &ticks);
put_long (info + 132, days);
put_long (info + 136, mins);
return -1;
}
-
#define REC_EXCLUSIVE 0
#define REC_EXCLUSIVE_IMMED 1
#define REC_SHARED 2
#define REC_SHARED_IMMED 3
-static struct lockrecord *new_record (uae_u32 packet, uae_u32 pos, uae_u32 len, uae_u32 mode, uae_u32 timeout, uae_u32 msg)
+static struct lockrecord *new_record (uae_u32 packet, uae_u64 pos, uae_u64 len, uae_u32 mode, uae_u32 timeout, uae_u32 msg)
{
struct lockrecord *lr = xcalloc (struct lockrecord, 1);
lr->packet = packet;
return lr;
}
-static bool record_hit (Unit *unit, Key *k, uae_u32 pos, uae_u32 len, uae_u32 mode)
+static bool record_hit (Unit *unit, Key *k, uae_u64 pos, uae_u64 len, uae_u32 mode)
{
bool exclusive = mode == REC_EXCLUSIVE || mode == REC_EXCLUSIVE_IMMED;
for (Key *k2 = unit->keys; k2; k2 = k2->next) {
for (struct lockrecord *lr = k2->record; lr; lr = lr->next) {
bool exclusive2 = lr->mode == REC_EXCLUSIVE || lr->mode == REC_EXCLUSIVE_IMMED;
if (exclusive || exclusive2) {
- uae_u32 a1 = pos;
- uae_u32 a2 = pos + len;
- uae_u32 b1 = lr->pos;
- uae_u32 b2 = lr->pos + lr->len;
+ uae_u64 a1 = pos;
+ uae_u64 a2 = pos + len;
+ uae_u64 b1 = lr->pos;
+ uae_u64 b2 = lr->pos + lr->len;
if (len && lr->len) {
bool hit = (a1 >= b1 && a1 < b2) || (a2 > b1 && a2 < b2) || (b1 >= a1 && b1 < a2) || (b2 > a1 && b2 < a2);
if (hit)
prev->next = lr->next;
else
unit->waitingrecords = lr->next;
- write_log (_T("queued record timed out '%s',%d,%d,%d,%d\n"), k ? k->aino->nname : _T("NULL"), lr->pos, lr->len, lr->mode, lr->timeout);
+ write_log (_T("queued record timed out '%s',%lld,%lld,%d,%d\n"), k ? k->aino->nname : _T("NULL"), lr->pos, lr->len, lr->mode, lr->timeout);
xfree (lr);
retry = true;
break;
uid = 0;
gid = 0;
}
+ if (type >= 8) {
+ size2 += 8;
+ }
i = get_long (control + 0);
while (i > 0) {
put_word (exp + 36, uid);
put_word (exp + 38, gid);
}
+ if (type >= 8) {
+ put_long (exp + 40, statbuf.size >> 32);
+ put_long (exp + 44, (uae_u32)statbuf.size);
+ }
+
put_long (control + 0, get_long (control + 0) + 1);
ret = 1;
end:
if (kickstart_version < 36)
return 0;
- if (type == 0 || type > 7) {
+ if (type == 0 || type > 8) {
doserr = ERROR_BAD_NUMBER;
goto fail;
}
if (aino == 0)
aino = &unit->rootnode;
- get_fileinfo (unit, packet, info, aino);
+ get_fileinfo (unit, packet, info, aino, false);
if (aino->dir) {
put_long (info, 0xFFFFFFFF);
} else
fs_closedir (d);
}
-static void do_examine (Unit *unit, dpacket packet, ExamineKey *ek, uaecptr info)
+static void do_examine (Unit *unit, dpacket packet, ExamineKey *ek, uaecptr info, bool longfilesize)
{
for (;;) {
TCHAR *name;
if (ek->curr_file == 0)
break;
name = ek->curr_file->nname;
- get_fileinfo (unit, packet, info, ek->curr_file);
+ get_fileinfo (unit, packet, info, ek->curr_file, longfilesize);
ek->curr_file = ek->curr_file->sibling;
if (!(unit->volflags & (MYVOLUMEINFO_ARCHIVE | MYVOLUMEINFO_CDFS)) && !fsdb_exists(name)) {
TRACE ((_T("%s orphaned"), name));
PUT_PCK_RES2 (packet, ERROR_NO_MORE_ENTRIES);
}
-static void action_examine_next (Unit *unit, dpacket packet)
+static void action_examine_next (Unit *unit, dpacket packet, bool largefilesize)
{
uaecptr lock = GET_PCK_ARG1 (packet) << 2;
uaecptr info = GET_PCK_ARG2 (packet) << 2;
ExamineKey *ek;
uae_u32 uniq;
- TRACE((_T("ACTION_EXAMINE_NEXT(0x%lx,0x%lx)\n"), lock, info));
+ TRACE((_T("ACTION_EXAMINE_NEXT(0x%lx,0x%lx,%d)\n"), lock, info, largefilesize));
gui_flicker_led (UNIT_LED(unit), unit->unit, 1);
DUMPLOCK(unit, lock);
if (!ek->curr_file)
goto no_more_entries;
}
- do_examine (unit, packet, ek, info);
+ do_examine (unit, packet, ek, info, largefilesize);
return;
no_more_entries:
temppos = pos;
if (whence == SEEK_END)
temppos = filesize + pos;
- if (filesize < temppos) {
+ if (filesize < temppos || temppos < 0) {
PUT_PCK_RES1 (packet, -1);
PUT_PCK_RES2 (packet, ERROR_SEEK_ERROR);
return;
}
static void
- action_examine_fh (Unit *unit, dpacket packet)
+ action_examine_fh (Unit *unit, dpacket packet, bool largefilesize)
{
Key *k;
a_inode *aino = 0;
uaecptr info = GET_PCK_ARG2 (packet) << 2;
- TRACE((_T("ACTION_EXAMINE_FH(0x%lx,0x%lx)\n"),
- GET_PCK_ARG1 (packet), GET_PCK_ARG2 (packet) ));
+ TRACE((_T("ACTION_EXAMINE_FH(0x%lx,0x%lx,%d)\n"),
+ GET_PCK_ARG1 (packet), GET_PCK_ARG2 (packet), largefilesize ));
k = lookup_key (unit, GET_PCK_ARG1 (packet));
if (k != 0)
if (aino == 0)
aino = &unit->rootnode;
- get_fileinfo (unit, packet, info, aino);
+ get_fileinfo (unit, packet, info, aino, largefilesize);
if (aino->dir)
put_long (info, 0xFFFFFFFF);
else
return;
}
+ /* Fail if file is >=2G, it is not safe operation. */
+ if (fs_fsize64 (k->fd) > MAXFILESIZE32) {
+ PUT_PCK_RES1 (packet, DOS_TRUE);
+ PUT_PCK_RES2 (packet, ERROR_BAD_NUMBER); /* ? */
+ return;
+ }
+
gui_flicker_led (UNIT_LED(unit), unit->unit, 1);
k->notifyactive = 1;
/* If any open files have file pointers beyond this size, truncate only
* the requested size, the truncate guarantees that it can't be larger.
* If we were to write one byte earlier we'd clobber file data. */
if (my_truncate (k->aino->nname, offset) == -1) {
- PUT_PCK_RES1 (packet, DOS_FALSE);
+ PUT_PCK_RES1 (packet, DOS_TRUE);
PUT_PCK_RES2 (packet, dos_errno ());
return;
}
}
}
+/* OS4 */
+
static void action_change_file_position64 (Unit *unit, dpacket packet)
{
Key *k = lookup_key (unit, GET_PCK64_ARG1 (packet));
k->file_pos = fs_lseek64 (k->fd, 0, SEEK_CUR);
}
TRACE((_T("= oldpos %lld newpos %lld\n"), cur, k->file_pos));
-
}
static void action_get_file_position64 (Unit *unit, dpacket packet)
PUT_PCK64_RES2 (packet, 0);
}
-
static void action_get_file_size64 (Unit *unit, dpacket packet)
{
Key *k = lookup_key (unit, GET_PCK64_ARG1 (packet));
PUT_PCK64_RES2 (packet, ERROR_SEEK_ERROR);
}
+/* MOS */
+
+static void action_examine_object64(Unit *unit, dpacket packet)
+{
+ uaecptr lock = GET_PCK_ARG1 (packet) << 2;
+ uaecptr info = GET_PCK_ARG2 (packet) << 2;
+ a_inode *aino = 0;
+
+ TRACE((_T("ACTION_EXAMINE_OBJECT(0x%lx,0x%lx)\n"), lock, info));
+ DUMPLOCK(unit, lock);
+
+ if (lock != 0)
+ aino = aino_from_lock (unit, lock);
+ if (aino == 0)
+ aino = &unit->rootnode;
+
+ get_fileinfo (unit, packet, info, aino, true);
+ if (aino->dir) {
+ put_long (info, 0xFFFFFFFF);
+ } else
+ put_long (info, 0);
+}
+
+static void action_set_file_size64(Unit *unit, dpacket packet)
+{
+ Key *k, *k1;
+ uae_s64 offset = get_quadp(GET_PCK_ARG2 (packet));
+ long mode = (uae_s32)GET_PCK_ARG3 (packet);
+ int whence = SEEK_CUR;
+
+ if (mode > 0)
+ whence = SEEK_END;
+ if (mode < 0)
+ whence = SEEK_SET;
+
+ TRACE((_T("ACTION_SET_FILE_SIZE64(0x%lx, %lld, 0x%x)\n"), GET_PCK_ARG1 (packet), offset, mode));
+
+ k = lookup_key (unit, GET_PCK_ARG1 (packet));
+ if (k == 0) {
+ PUT_PCK_RES1 (packet, DOS_FALSE);
+ PUT_PCK_RES2 (packet, ERROR_OBJECT_NOT_AROUND);
+ return;
+ }
+
+ gui_flicker_led (UNIT_LED(unit), unit->unit, 1);
+ k->notifyactive = 1;
+ /* If any open files have file pointers beyond this size, truncate only
+ * so far that these pointers do not become invalid. */
+ for (k1 = unit->keys; k1; k1 = k1->next) {
+ if (k != k1 && k->aino == k1->aino) {
+ if (k1->file_pos > offset)
+ offset = k1->file_pos;
+ }
+ }
+
+ /* Write one then truncate: that should give the right size in all cases. */
+ fs_lseek (k->fd, offset, whence);
+ offset = fs_lseek64 (k->fd, offset, whence);
+ fs_write (k->fd, /* whatever */(uae_u8*)&k1, 1);
+ if (k->file_pos > offset)
+ k->file_pos = offset;
+ fs_lseek64 (k->fd, k->file_pos, SEEK_SET);
+
+ if (my_truncate (k->aino->nname, offset) == -1) {
+ PUT_PCK_RES1 (packet, DOS_FALSE);
+ PUT_PCK_RES2 (packet, dos_errno ());
+ return;
+ }
+
+ PUT_PCK_RES1 (packet, DOS_TRUE);
+ set_quadp(GET_PCK_ARG4(packet), offset);
+}
+
+static void action_seek64(Unit *unit, dpacket packet)
+{
+ Key *k = lookup_key(unit, GET_PCK_ARG1(packet));
+ uae_s64 pos = get_quadp(GET_PCK64_ARG2(packet));
+ long mode = GET_PCK_ARG3(packet);
+ long whence = SEEK_CUR;
+ uae_s64 res, cur;
+
+ if (k == 0) {
+ PUT_PCK_RES1 (packet, DOS_FALSE);
+ PUT_PCK_RES2 (packet, ERROR_INVALID_LOCK);
+ return;
+ }
+
+ if (mode > 0)
+ whence = SEEK_END;
+ if (mode < 0)
+ whence = SEEK_SET;
+
+ TRACE((_T("ACTION_SEEK64(%s,%lld,%d)\n"), k->aino->nname, pos, mode));
+ gui_flicker_led (UNIT_LED(unit), unit->unit, 1);
+
+ cur = k->file_pos;
+ {
+ uae_s64 temppos;
+ uae_s64 filesize = fs_fsize64 (k->fd);
+
+ if (whence == SEEK_CUR)
+ temppos = cur + pos;
+ if (whence == SEEK_SET)
+ temppos = pos;
+ if (whence == SEEK_END)
+ temppos = filesize + pos;
+ if (filesize < temppos) {
+ res = -1;
+ PUT_PCK_RES1 (packet, res);
+ PUT_PCK_RES2 (packet, ERROR_SEEK_ERROR);
+ return;
+ }
+ }
+ res = fs_lseek64 (k->fd, pos, whence);
+
+ if (-1 == res) {
+ PUT_PCK_RES1 (packet, DOS_FALSE);
+ PUT_PCK_RES2 (packet, ERROR_SEEK_ERROR);
+ } else {
+ PUT_PCK_RES1 (packet, TRUE);
+ set_quadp(GET_PCK_ARG3(packet), cur);
+ k->file_pos = fs_lseek64 (k->fd, 0, SEEK_CUR);
+ }
+ TRACE((_T("= oldpos %lld newpos %lld\n"), cur, k->file_pos));
+}
+
+static int action_lock_record64(Unit *unit, dpacket packet, uae_u32 msg)
+{
+ Key *k = lookup_key(unit, GET_PCK_ARG1(packet));
+ uae_u64 pos = get_quadp(GET_PCK_ARG2(packet));
+ uae_u64 len = get_quadp(GET_PCK_ARG3(packet));
+ uae_u32 mode = GET_PCK_ARG4(packet);
+ uae_u32 timeout = GET_PCK_ARG5(packet);
+
+ bool exclusive = mode == REC_EXCLUSIVE || mode == REC_EXCLUSIVE_IMMED;
+
+ write_log (_T("action_lock_record64('%s',%lld,%lld,%d,%d)\n"), k ? k->aino->nname : _T("null"), pos, len, mode, timeout);
+
+ if (!k || mode > REC_SHARED_IMMED) {
+ PUT_PCK_RES1 (packet, DOS_FALSE);
+ PUT_PCK_RES2 (packet, ERROR_OBJECT_WRONG_TYPE);
+ return 1;
+ }
+
+ if (mode == REC_EXCLUSIVE_IMMED || mode == REC_SHARED_IMMED)
+ timeout = 0;
+
+ if (record_hit (unit, k, pos, len, mode)) {
+ if (timeout && msg) {
+ // queue it and do not reply
+ struct lockrecord *lr = new_record (packet, pos, len, mode, timeout, msg);
+ if (unit->waitingrecords) {
+ lr->next = unit->waitingrecords;
+ unit->waitingrecords = lr;
+ } else {
+ unit->waitingrecords = lr;
+ }
+ write_log (_T("-> collision, timeout queued\n"));
+ return -1;
+ }
+ PUT_PCK_RES1 (packet, DOS_FALSE);
+ PUT_PCK_RES2 (packet, ERROR_LOCK_COLLISION);
+ write_log (_T("-> ERROR_LOCK_COLLISION\n"));
+ return 1;
+ }
+
+ struct lockrecord *lr = new_record (GET_PCK_ARG1(packet), pos, len, mode, timeout, 0);
+ if (k->record) {
+ lr->next = k->record;
+ k->record = lr;
+ } else {
+ k->record = lr;
+ }
+ PUT_PCK_RES1 (packet, DOS_TRUE);
+ write_log (_T("-> OK\n"));
+ return 1;
+}
+
+static void action_free_record64(Unit *unit, dpacket packet)
+{
+ Key *k = lookup_key(unit, GET_PCK_ARG1(packet));
+ uae_u64 pos = get_quadp(GET_PCK_ARG2(packet));
+ uae_u64 len = get_quadp(GET_PCK_ARG3 (packet));
+
+ write_log (_T("action_free_record('%s',%lld,%lld)\n"), k ? k->aino->nname : _T("null"), pos, len);
+
+ if (!k) {
+ PUT_PCK_RES1 (packet, DOS_FALSE);
+ PUT_PCK_RES2 (packet, ERROR_OBJECT_WRONG_TYPE);
+ return;
+ }
+
+ struct lockrecord *prev = NULL;
+ for (struct lockrecord *lr = k->record; lr; lr = lr->next) {
+ if (lr->pos == pos && lr->len == len) {
+ if (prev)
+ prev->next = lr->next;
+ else
+ k->record = lr->next;
+ xfree (lr);
+ write_log (_T("->OK\n"));
+ record_check_waiting (unit);
+ PUT_PCK_RES1 (packet, DOS_TRUE);
+ return;
+ }
+ }
+ write_log (_T("-> ERROR_RECORD_NOT_LOCKED\n"));
+ PUT_PCK_RES1 (packet, DOS_FALSE);
+ PUT_PCK_RES2 (packet, ERROR_RECORD_NOT_LOCKED);
+}
+
/* We don't want multiple interrupts to be active at the same time. I don't
* know whether AmigaOS takes care of that, but this does. */
static uae_sem_t singlethread_int_sem;
case ACTION_DISK_INFO: action_disk_info (unit, pck); break;
case ACTION_INFO: action_info (unit, pck); break;
case ACTION_EXAMINE_OBJECT: action_examine_object (unit, pck); break;
- case ACTION_EXAMINE_NEXT: action_examine_next (unit, pck); break;
+ case ACTION_EXAMINE_NEXT: action_examine_next (unit, pck, false); break;
case ACTION_FIND_INPUT: action_find_input (unit, pck); break;
case ACTION_FIND_WRITE: action_find_write (unit, pck); break;
case ACTION_FIND_OUTPUT: action_find_output (unit, pck); break;
/* 2.0+ packet types */
case ACTION_SET_FILE_SIZE: action_set_file_size (unit, pck); break;
- case ACTION_EXAMINE_FH: action_examine_fh (unit, pck); break;
+ case ACTION_EXAMINE_FH: action_examine_fh (unit, pck, false); break;
case ACTION_FH_FROM_LOCK: action_fh_from_lock (unit, pck); break;
case ACTION_COPY_DIR_FH: action_lock_from_fh (unit, pck); break;
case ACTION_CHANGE_MODE: action_change_mode (unit, pck); break;
case ACTION_READ_LINK: action_read_link (unit, pck); break;
case ACTION_MAKE_LINK: action_make_link (unit, pck); break;
- /* OS4+ packet types */
+ /* OS4 packet types */
case ACTION_CHANGE_FILE_POSITION64: action_change_file_position64 (unit, pck); break;
case ACTION_GET_FILE_POSITION64: action_get_file_position64 (unit, pck); break;
case ACTION_CHANGE_FILE_SIZE64: action_change_file_size64 (unit, pck); break;
case ACTION_GET_FILE_SIZE64: action_get_file_size64 (unit, pck); break;
+ /* MOS packet types */
+ case ACTION_SEEK64: action_seek64(unit, pck); break;
+ case ACTION_SET_FILE_SIZE64: action_set_file_size64(unit, pck); break;
+ case ACTION_EXAMINE_OBJECT64: action_examine_object64(unit, pck); break;
+ case ACTION_EXAMINE_NEXT64: action_examine_next(unit, pck, true); break;
+ case ACTION_EXAMINE_FH64: action_examine_fh(unit, pck, true); break;
+ case ACTION_LOCK_RECORD64: return action_lock_record64(unit, pck, msg); break;
+ case ACTION_FREE_RECORD64: action_free_record64(unit, pck); break;
+
/* unsupported packets */
case ACTION_FORMAT:
write_log (_T("FILESYS: UNSUPPORTED PACKET %x\n"), type);
static const char *mmu_postfix;
static int memory_cycle_cnt;
static int did_prefetch;
+static int ipl_fetched;
static int optimized_flags;
static void check_ipl (void)
{
+ if (ipl_fetched)
+ return;
if (using_ce || using_ce020)
printf ("\tipl_fetch ();\n");
+ ipl_fetched = true;
}
static void irc2ir (bool dozero)
fill_prefetch_finish ();
sync_m68k_pc ();
did_prefetch = 0;
+ ipl_fetched = 0;
}
static void generate_includes (FILE * f, int id)
#define MAX_LINEWIDTH 100
extern int debugging;
+extern int memwatch_enabled;
extern int exception_debugging;
extern int debug_copper;
extern int debug_dma;
};
extern struct breakpoint_node bpnodes[BREAKPOINT_TOTAL];
+#define MW_MASK_CPU 0x00000001
+#define MW_MASK_BLITTER_A 0x00000002
+#define MW_MASK_BLITTER_B 0x00000004
+#define MW_MASK_BLITTER_C 0x00000008
+#define MW_MASK_BLITTER_D 0x00000010
+#define MW_MASK_COPPER 0x00000020
+#define MW_MASK_DISK 0x00000040
+#define MW_MASK_AUDIO_0 0x00000080
+#define MW_MASK_AUDIO_1 0x00000100
+#define MW_MASK_AUDIO_2 0x00000200
+#define MW_MASK_AUDIO_3 0x00000400
+#define MW_MASK_BPL_0 0x00000800
+#define MW_MASK_BPL_1 0x00001000
+#define MW_MASK_BPL_2 0x00002000
+#define MW_MASK_BPL_3 0x00004000
+#define MW_MASK_BPL_4 0x00008000
+#define MW_MASK_BPL_5 0x00010000
+#define MW_MASK_BPL_6 0x00020000
+#define MW_MASK_BPL_7 0x00040000
+#define MW_MASK_SPR_0 0x00080000
+#define MW_MASK_SPR_1 0x00100000
+#define MW_MASK_SPR_2 0x00200000
+#define MW_MASK_SPR_3 0x00400000
+#define MW_MASK_SPR_4 0x00800000
+#define MW_MASK_SPR_5 0x01000000
+#define MW_MASK_SPR_6 0x02000000
+#define MW_MASK_SPR_7 0x04000000
+#define MW_MASK_ALL (0x08000000 - 1)
+
#define MEMWATCH_TOTAL 20
struct memwatch_node {
uaecptr addr;
int size;
int rwi;
- uae_u32 val, val_mask;
+ uae_u32 val, val_mask, access_mask;
int val_size, val_enabled;
int mustchange;
uae_u32 modval;
int modval_written;
int frozen;
+ uae_u32 reg;
uaecptr pc;
};
extern struct memwatch_node mwnodes[MEMWATCH_TOTAL];
extern void memwatch_dump2 (TCHAR *buf, int bufsize, int num);
-uae_u16 debug_wgetpeekdma_chipram (uaecptr addr, uae_u32 v, int reg);
-uae_u16 debug_wputpeekdma_chipram (uaecptr addr, uae_u32 v, int reg);
-uae_u16 debug_wputpeekdma_chipset (uaecptr addr, uae_u32 v, int reg);
+uae_u16 debug_wgetpeekdma_chipram (uaecptr addr, uae_u32 v, uae_u32 mask, int reg);
+uae_u16 debug_wputpeekdma_chipram (uaecptr addr, uae_u32 v, uae_u32 mask, int reg);
+uae_u16 debug_wputpeekdma_chipset (uaecptr addr, uae_u32 v, uae_u32 mask, int reg);
void debug_lgetpeek (uaecptr addr, uae_u32 v);
void debug_wgetpeek (uaecptr addr, uae_u32 v);
void debug_bgetpeek (uaecptr addr, uae_u32 v);
struct dma_rec
{
uae_u16 reg;
- uae_u16 dat;
+ uae_u32 dat;
uae_u32 addr;
uae_u16 evt;
int type;
extern volatile bool vblank_found_chipset;
extern volatile bool vblank_found_rtg;
+extern int hpos_offset;
+extern int maxhpos;
STATIC_INLINE void cycles_do_special (void)
{
return hp;
}
-STATIC_INLINE int current_hpos (void)
-{
- int hp = current_hpos_safe ();
- if (hp < 0 || hp >= 256) {
- gui_message(_T("hpos = %d!?\n"), hp);
- hp = 0;
- }
- return hp;
-}
+extern int current_hpos(void);
STATIC_INLINE bool cycles_in_range (unsigned long endcycles)
{
/* AmigaOS errors */
#define ERROR_NO_FREE_STORE 103
#define ERROR_BAD_NUMBER 115
+#define ERROR_LINE_TOO_LONG 120
#define ERROR_OBJECT_IN_USE 202
#define ERROR_OBJECT_EXISTS 203
#define ERROR_DIR_NOT_FOUND 204
extern void reset_inputdevice_config (struct uae_prefs *pr);
extern void store_inputdevice_config (struct uae_prefs *pr);
extern void restore_inputdevice_config (struct uae_prefs *p, int portnum);
-extern int inputdevice_joyport_config (struct uae_prefs *p, const TCHAR *value, int portnum, int mode, int type);
+extern int inputdevice_joyport_config (struct uae_prefs *p, const TCHAR *value, int portnum, int mode, int type, bool validate);
extern int inputdevice_getjoyportdevice (int port, int val);
extern void inputdevice_validate_jports (struct uae_prefs *p, int changedport);
extern void expamem_reset (void);
extern void expamem_next (void);
-extern uae_u16 last_custom_value1;
+extern uae_u32 last_custom_value1;
/* Default memory access functions */
#define UAEMAJOR 2
#define UAEMINOR 8
-#define UAESUBREV 0
+#define UAESUBREV 1
typedef enum { KBD_LANG_US, KBD_LANG_DK, KBD_LANG_DE, KBD_LANG_SE, KBD_LANG_FR, KBD_LANG_IT, KBD_LANG_ES } KbdLang;
return -1;
}
+#define SWITCHDEBUG_DEBUG 0
+
static int switchdevice (struct uae_input_device *id, int num, bool buttonmode)
{
int i, j;
int otherbuttonpressed = 0;
int acc = input_acquired;
- //write_log (_T("switchdevice '%s' %d %d\n"), id->name, num, buttonmode);
+#if SWITCHDEBUG_DEBUG
+ write_log (_T("switchdevice '%s' %d %d\n"), id->name, num, buttonmode);
+#endif
if (num >= 4)
return 0;
flags = idev[IDTYPE_MOUSE].get_flags (i);
}
}
- if (!name)
+ if (!name) {
+#if SWITCHDEBUG_DEBUG
+ write_log(_T("device not found!?\n"));
+#endif
return 0;
+ }
if (buttonmode) {
if (num == 0 && otherbuttonpressed)
newport = newport ? 0 : 1;
} else {
newport = num ? 1 : 0;
}
- //write_log (_T("newport = %d\n"), newport);
+#if SWITCHDEBUG_DEBUG
+ write_log (_T("newport = %d ismouse=%d flags=%d name=%s\n"), newport, ismouse, flags, name);
+#endif
/* "GamePorts" switch if in GamePorts mode or Input mode and GamePorts port was not NONE */
if (currprefs.input_selected_setting == GAMEPORT_INPUT_SETTINGS || currprefs.jports[newport].id != JPORT_NONE) {
- //write_log (_T("GAMEPORTS MODE\n"));
+#if SWITCHDEBUG_DEBUG
+ write_log (_T("GAMEPORTS MODE %d %d\n"), currprefs.input_selected_setting, currprefs.jports[newport].id);
+#endif
if ((num == 0 || num == 1) && currprefs.jports[newport].id != JPORT_CUSTOM) {
- //write_log (_T("Port supported\n"));
+#if SWITCHDEBUG_DEBUG
+ write_log (_T("Port supported\n"));
+#endif
+ bool issupermouse = false;
int om = jsem_ismouse (num, &currprefs);
int om1 = jsem_ismouse (0, &currprefs);
int om2 = jsem_ismouse (1, &currprefs);
if ((om1 >= 0 || om2 >= 0) && ismouse) {
- //write_log (_T("END3\n"));
+#if SWITCHDEBUG_DEBUG
+ write_log (_T("END3\n"));
+#endif
return 0;
}
if (flags) {
- //write_log (_T("END2\n"));
+#if SWITCHDEBUG_DEBUG
+ write_log (_T("END2\n"));
+#endif
return 0;
}
- if (name) {
#if 1
- if (ismouse) {
- int nummouse = 0; // count number of non-supermouse mice
- int supermouse = -1;
- for (i = 0; i < idev[IDTYPE_MOUSE].get_num (); i++) {
- if (!idev[IDTYPE_MOUSE].get_flags (i))
- nummouse++;
- else
- supermouse = i;
+ if (ismouse) {
+ int nummouse = 0; // count number of non-supermouse mice
+ int supermouse = -1;
+ for (i = 0; i < idev[IDTYPE_MOUSE].get_num (); i++) {
+ if (!idev[IDTYPE_MOUSE].get_flags (i))
+ nummouse++;
+ else
+ supermouse = i;
+ }
+#if SWITCHDEBUG_DEBUG
+ write_log (_T("inputdevice gameports change supermouse=%d num=%d\n"), supermouse, nummouse);
+#endif
+ if (supermouse >= 0 && nummouse == 1) {
+ TCHAR *oldname = name;
+ name = idev[IDTYPE_MOUSE].get_uniquename (supermouse);
+ issupermouse = true;
+#if SWITCHDEBUG_DEBUG
+ write_log (_T("inputdevice gameports change '%s' -> '%s'\n"), oldname, name);
+#endif
+ }
+ }
+#endif
+#if SWITCHDEBUG_DEBUG
+ write_log (_T("inputdevice gameports change '%s':%d->%d %d,%d\n"), name, num, newport, currprefs.input_selected_setting, currprefs.jports[newport].id);
+#endif
+ inputdevice_unacquire ();
+
+ if (currprefs.input_selected_setting != GAMEPORT_INPUT_SETTINGS && currprefs.jports[newport].id > JPORT_NONE) {
+ // disable old device
+ int devnum;
+ devnum = jsem_ismouse(newport, &currprefs);
+#if SWITCHDEBUG_DEBUG
+ write_log(_T("ismouse num = %d supermouse=%d\n"), devnum, issupermouse);
+#endif
+ if (devnum >= 0) {
+ if (changed_prefs.mouse_settings[currprefs.input_selected_setting][devnum].enabled) {
+ changed_prefs.mouse_settings[currprefs.input_selected_setting][devnum].enabled = false;
+#if SWITCHDEBUG_DEBUG
+ write_log(_T("input panel mouse device '%s' disabled\n"), changed_prefs.mouse_settings[currprefs.input_selected_setting][devnum].name);
+#endif
+ }
+ }
+ for (int l = 0; l < idev[IDTYPE_MOUSE].get_num(); l++) {
+ if (changed_prefs.mouse_settings[currprefs.input_selected_setting][l].enabled) {
+ if (idev[IDTYPE_MOUSE].get_flags(l)) {
+#if SWITCHDEBUG_DEBUG
+ write_log (_T("enabled supermouse %d detected\n"), l);
+#endif
+ issupermouse = true;
+ }
}
- if (supermouse >= 0 && nummouse == 1) {
- name = idev[IDTYPE_MOUSE].get_uniquename (supermouse);
+ }
+ if (issupermouse) {
+ // new mouse is supermouse, disable all other mouse devices
+ for (int l = 0; l < MAX_INPUT_DEVICES; l++) {
+ changed_prefs.mouse_settings[currprefs.input_selected_setting][l].enabled = false;
}
}
+
+ devnum = jsem_isjoy(newport, &currprefs);
+#if SWITCHDEBUG_DEBUG
+ write_log(_T("isjoy num = %d\n"), devnum);
#endif
- write_log (_T("inputdevice change '%s':%d->%d\n"), name, num, newport);
- inputdevice_unacquire ();
- inputdevice_joyport_config (&changed_prefs, name, newport, -1, 2);
- inputdevice_validate_jports (&changed_prefs, -1);
- inputdevice_copyconfig (&changed_prefs, &currprefs);
- if (acc)
- inputdevice_acquire (TRUE);
- return 1;
+ if (devnum >= 0) {
+ if (changed_prefs.joystick_settings[currprefs.input_selected_setting][devnum].enabled) {
+ changed_prefs.joystick_settings[currprefs.input_selected_setting][devnum].enabled = false;
+#if SWITCHDEBUG_DEBUG
+ write_log(_T("input panel joystick device '%s' disabled\n"), changed_prefs.joystick_settings[currprefs.input_selected_setting][devnum].name);
+#endif
+ }
+ }
}
+
+ inputdevice_joyport_config (&changed_prefs, name, newport, -1, 2, false);
+ inputdevice_validate_jports (&changed_prefs, -1);
+ inputdevice_copyconfig (&changed_prefs, &currprefs);
+ if (acc)
+ inputdevice_acquire (TRUE);
+ return 1;
}
- //write_log (_T("END1\n"));
+#if SWITCHDEBUG_DEBUG
+ write_log (_T("END1\n"));
+#endif
return 0;
} else {
- //write_log (_T("INPUTPANEL MODE\n"));
+#if SWITCHDEBUG_DEBUG
+ write_log (_T("INPUTPANEL MODE %d\n"), flags);
+#endif
int oldport = getoldport (id);
int k, evt;
- struct inputevent *ie, *ie2;
+ struct inputevent *ie, *ie2;
if (flags)
return 0;
- if (oldport <= 0)
+ if (oldport <= 0) {
+#if SWITCHDEBUG_DEBUG
+ write_log(_T("OLDPORT %d\n"), oldport);
+#endif
return 0;
+ }
newport++;
/* do not switch if switching mouse and any "supermouse" mouse enabled */
if (ismouse) {
for (i = 0; i < MAX_INPUT_SETTINGS; i++) {
- if (mice[i].enabled && idev[IDTYPE_MOUSE].get_flags (i))
+ if (mice[i].enabled && idev[IDTYPE_MOUSE].get_flags (i)) {
+#if SWITCHDEBUG_DEBUG
+ write_log(_T("SUPERMOUSE %d enabled\n"), i);
+#endif
return 0;
+ }
}
}
for (i = 0; i < MAX_INPUT_SETTINGS; i++) {
- if (getoldport (&joysticks[i]) == newport)
+ if (getoldport (&joysticks[i]) == newport) {
joysticks[i].enabled = 0;
- if (getoldport (&mice[i]) == newport)
+#if SWITCHDEBUG_DEBUG
+ write_log(_T("Joystick %d disabled\n"), i);
+#endif
+ }
+ if (getoldport (&mice[i]) == newport) {
mice[i].enabled = 0;
+#if SWITCHDEBUG_DEBUG
+ write_log(_T("Mouse %d disabled\n"), i);
+#endif
+ }
}
id->enabled = 1;
for (i = 0; i < MAX_INPUT_DEVICE_EVENTS; i++) {
}
}
}
- write_log (_T("inputdevice change '%s':%d->%d\n"), name, num, newport);
+ write_log (_T("inputdevice input change '%s':%d->%d\n"), name, num, newport);
inputdevice_unacquire ();
inputdevice_copyconfig (&currprefs, &changed_prefs);
inputdevice_validate_jports (&changed_prefs, -1);
for (i = 0; i < MAX_JPORTS; i++) {
freejport (prefs, i);
if (jportid[i] == JPORT_CUSTOM) {
- inputdevice_joyport_config (prefs, _T("custom"), i, jportsmode[i], 0);
+ inputdevice_joyport_config (prefs, _T("custom"), i, jportsmode[i], 0, true);
} else if (jports[i]) {
- inputdevice_joyport_config (prefs, jports[i], i, jportsmode[i], 2);
+ inputdevice_joyport_config (prefs, jports[i], i, jportsmode[i], 2, true);
} else if (jportskb[i] >= 0) {
TCHAR tmp[10];
_stprintf (tmp, _T("kbd%d"), jportskb[i]);
- inputdevice_joyport_config (prefs, tmp, i, jportsmode[i], 0);
+ inputdevice_joyport_config (prefs, tmp, i, jportsmode[i], 0, true);
}
prefs->jports[i].autofire = jportaf[i];
xfree (jports[i]);
vv = 0;
vv += JSEM_KBDLAYOUT;
}
+#if 0
+ if (port->id != vv)
+ write_log(_T("fixjport %d %d %d\n"), port->id, vv, add);
+#endif
port->id = vv;
}
continue;
if (p->jports[i].id == p->jports[j].id) {
if (i == changedport) {
+ //write_log(_T("inputdevice_validate_jports restore i %d %d\n"), i, j);
restore_inputdevice_config (p, j);
} else if (j == changedport) {
+ //write_log(_T("inputdevice_validate_jports restore j %d %d\n"), i, j);
restore_inputdevice_config (p, i);
}
int cnt = 0;
}
}
-static void inputdevice_inserted (struct uae_prefs *p, int portnum, int id, int mode, int type)
+static void inputdevice_inserted (struct uae_prefs *p, int portnum, int id, int type)
{
for (int k = 0; k < MAX_JPORTS; k++) {
if (p->jports[k].id == id && k != portnum) {
memcpy (&p->jports[portnum], &stored_ports[portnum], sizeof (struct jport));
}
-int inputdevice_joyport_config (struct uae_prefs *p, const TCHAR *value, int portnum, int mode, int type)
+int inputdevice_joyport_config (struct uae_prefs *p, const TCHAR *value, int portnum, int mode, int type, bool validate)
{
switch (type)
{
for (i = 0; i < idf->get_num (); i++) {
TCHAR *name2 = idf->get_uniquename (i);
if (name2 && !_tcscmp (name2, value)) {
- inputdevice_inserted (p, portnum, idnum + i, mode, type);
+ if (validate)
+ inputdevice_inserted (p, portnum, idnum + i, type);
p->jports[portnum].id = idnum + i;
if (mode >= 0)
p->jports[portnum].mode = mode;
for (i = 0; i < idf->get_num (); i++) {
TCHAR *name1 = idf->get_friendlyname (i);
if (name1 && !_tcscmp (name1, value)) {
- inputdevice_inserted (p, portnum, idnum + i, mode, type);
+ if (validate)
+ inputdevice_inserted (p, portnum, idnum + i, type);
p->jports[portnum].id = idnum + i;
if (mode >= 0)
p->jports[portnum].mode = mode;
}
}
if (got == 2) {
- inputdevice_inserted (p, portnum, start, mode, type);
+ if (validate)
+ inputdevice_inserted (p, portnum, start, type);
p->jports[portnum].id = start;
if (mode >= 0)
p->jports[portnum].mode = mode;
int cpu_cycles;
static int baseclock;
bool m68k_pc_indirect;
+static int cpu_prefs_changed_flag;
int cpucycleunit;
int cpu_tracer;
|| currprefs.fpu_no_unimplemented != changed_prefs.fpu_no_unimplemented
|| currprefs.cpu_compatible != changed_prefs.cpu_compatible
|| currprefs.cpu_cycle_exact != changed_prefs.cpu_cycle_exact) {
- changed |= 1;
+ cpu_prefs_changed_flag |= 1;
}
if (changed
|| currprefs.m68k_speed != changed_prefs.m68k_speed
|| currprefs.m68k_speed_throttle != changed_prefs.m68k_speed_throttle
|| currprefs.cpu_clock_multiplier != changed_prefs.cpu_clock_multiplier
|| currprefs.cpu_frequency != changed_prefs.cpu_frequency) {
- changed |= 2;
+ cpu_prefs_changed_flag |= 2;
}
- return changed;
+ return cpu_prefs_changed_flag;
}
set_cpu_tracer (false);
+ cpu_prefs_changed_flag = 0;
in_m68k_go++;
for (;;) {
void (*run_func)(void);
}
if (regs.spcflags & SPCFLAG_MODE_CHANGE) {
- int v = check_prefs_changed_cpu2();
- if (v & 1) {
+ if (cpu_prefs_changed_flag & 1) {
uaecptr pc = m68k_getpc();
prefs_changed_cpu();
build_cpufunctbl();
m68k_setpc_normal(pc);
fill_prefetch();
}
- if (v & 2) {
+ if (cpu_prefs_changed_flag & 2) {
fixup_cpu(&changed_prefs);
currprefs.m68k_speed = changed_prefs.m68k_speed;
currprefs.m68k_speed_throttle = changed_prefs.m68k_speed_throttle;
update_68k_cycles();
}
+ cpu_prefs_changed_flag = 0;
}
set_x_funcs();
regs.db = regs.prefetch020[0] >> 16;
} else {
v = regs.prefetch020[0] >> 16;
- regs.db = regs.prefetch020[0];
+ regs.db = regs.prefetch020[1] >> 16;
}
do_cycles_ce020 (2);
return v;
// recognized image types
enum {
- citError=0, // error preventing the type identification
- citUnknown, // unknown image type
- citIPF, // IPF image
- citCTRaw, // CT Raw image
- citKFStream, // KryoFlux stream files
- citDraft // Draft image
+ citError=0, // error preventing the type identification
+ citUnknown, // unknown image type
+ citIPF, // IPF image
+ citCTRaw, // CT Raw image
+ citKFStream, // KryoFlux stream files
+ citKFStreamCue, // KryoFlux stream cue file
+ citDraft // Draft image
};
// image error status
static int get_mouse_flags (int num)
{
+ if (!rawinput_enabled_mouse && !num)
+ return 1;
if (di_mouse[num].rawinput || !rawinput_enabled_mouse)
return 0;
if (di_mouse[num].catweasel)
}
}
-uae_u8 *D3D_locktexture (int *pitch, bool fullupdate)
+uae_u8 *D3D_locktexture (int *pitch, int *height, bool fullupdate)
{
D3DLOCKED_RECT lock;
HRESULT hr;
locked = 1;
fulllocked = fullupdate;
*pitch = lock.Pitch;
+ if (height)
+ *height = tin_h;
return (uae_u8*)lock.pBits;
}
extern bool D3D_renderframe (bool);
extern void D3D_showframe (void);
extern void D3D_showframe_special (int);
-extern uae_u8 *D3D_locktexture(int*, bool);
+extern uae_u8 *D3D_locktexture(int*, int*, bool);
extern void D3D_unlocktexture(void);
extern void D3D_flushtexture (int miny, int maxy);
extern void D3D_guimode (bool);
del *.zip
copy d:\amiga\winuae.exe c:\projects\winuae\distribution
-# "c:\program files (x86)\NSIS\makensis.exe" winuae_install
+;# "c:\program files (x86)\NSIS\makensis.exe" winuae_install
cd c:\projects\winuae\distribution
copy docs\windows\translation.txt d:\amiga
zip -9 -r c:\projects\winuae\src\od-win32\winuae.zip *
zip -9 WinUAE%1_translation WinUAE_default.dll translation.txt
del translation.txt
cdd c:\projects\winuae\src\od-win32
-zip -9 winuaedebug%1 winuae_msvc10\release\winuae.pdb winuae_msvc10\fullrelease\winuae.pdb
+;zip -9 winuaedebug%1 winuae_msvc11\fullrelease\winuae.pdb winuae_msvc11\x64\fullrelease\winuae.pdb
copy winuaedebug%1.zip d:\amiga\winuaepackets
del *.zip
#define IDD_DISKINFO 390
#define IDS_SELECTTAPE 391
#define IDS_TAPE 392
+#define IDS_SCREEN_NATIVE 392
+#define IDS_STRING393 393
+#define IDS_SCREEN_RTG 393
+#define IDS_DISPLAYMODE_NATIVE 394
+#define IDS_CURRENT_CONFIGURATION 395
+#define IDS_SELECT_MENU 396
+#define IDS_SCSI_EMULATION 397
+#define IDS_SLIRP 398
+#define IDS_SLIRP_INBOUND 399
+#define IDS_FILTER_PAL_EXTRA 400
+#define IDS_FILTER_3D_EXTRA 401
#define IDS_QS_MODELS 1000
#define IDS_QS_MODEL_A500 1001
#define IDS_QS_MODEL_A500P 1002
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NO_MFC 1
#define _APS_3D_CONTROLS 1
-#define _APS_NEXT_RESOURCE_VALUE 391
+#define _APS_NEXT_RESOURCE_VALUE 398
#define _APS_NEXT_COMMAND_VALUE 40050
#define _APS_NEXT_CONTROL_VALUE 1840
#define _APS_NEXT_SYMED_VALUE 101
RTEXT "RTG:",IDC_STATIC,8,115,49,15,SS_CENTERIMAGE
COMBOBOX IDC_SCREENMODE_RTG,61,118,71,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_SCREENMODE_RTG2,142,118,127,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- CONTROL "Blacker than black [] Borderblanked black is blacker than display area black.",IDC_BLACKER_THAN_BLACK,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,11,140,139,10
- CONTROL "Filtered low resolution [] When scaling hires to lores or superhires to hires, show average color of pixel instead of dropping every other pixel.",IDC_LORES_SMOOTHED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,155,140,123,10
- CONTROL "Remove interlace artifacts [] Emulates interlace mode internally as progressive, removing all interlace artifacts. Not compatible with all software.",IDC_FLICKERFIXER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,154,139,10
+ CONTROL "Blacker than black [] Borderblanked black is blacker than display area black.",IDC_BLACKER_THAN_BLACK,
+ "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,11,140,139,10
+ CONTROL "Filtered low resolution [] When scaling hires to lores or superhires to hires, show average color of pixel instead of dropping every other pixel.",IDC_LORES_SMOOTHED,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,155,140,123,10
+ CONTROL "Remove interlace artifacts [] Emulates interlace mode internally as progressive, removing all interlace artifacts. Not compatible with all software.",IDC_FLICKERFIXER,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,154,139,10
RTEXT "Resolution:",IDC_STATIC,24,170,110,8,SS_CENTERIMAGE
COMBOBOX IDC_LORES,142,169,127,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
RTEXT "Resolution autoswitch:",IDC_STATIC,92,190,110,8,SS_CENTERIMAGE
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 2,8,0,0
- PRODUCTVERSION 2,8,0,0
+ FILEVERSION 2,8,1,0
+ PRODUCTVERSION 2,8,1,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
BLOCK "040904b0"
BEGIN
VALUE "FileDescription", "WinUAE"
- VALUE "FileVersion", "2.8.0.0"
+ VALUE "FileVersion", "2.8.1.0"
VALUE "InternalName", "WinUAE"
- VALUE "LegalCopyright", "© 1996-2013 under the GNU Public License (GPL)"
+ VALUE "LegalCopyright", "© 1996-2014 under the GNU Public License (GPL)"
VALUE "OriginalFilename", "WinUAE.exe"
VALUE "ProductName", "WinUAE"
- VALUE "ProductVersion", "2.8.0.0"
+ VALUE "ProductVersion", "2.8.1.0"
END
END
BLOCK "VarFileInfo"
IDS_WSTYLE_EXTENDED "Extended"
IDS_MISCLISTITEMS1 "Untrap = middle button\nShow GUI on startup\nUse CTRL-F11 to quit\nDon't show taskbar button\nDon't show notification icon\n"
IDS_MISCLISTITEMS2 "Always on top\nDisable screensaver\nSynchronize clock\nFaster RTG\nClipboard sharing\nAllow native code\n"
- IDS_MISCLISTITEMS3 "Native on-screen display\nRTG on-screen display\nCreate winuaelog.txt log\nLog illegal memory accesses\nBlank unused displays\nStart mouse uncaptured\nStart minimized\nMinimize when focus is lost\n"
+ IDS_MISCLISTITEMS3 "Native on-screen display\nRTG on-screen display\nCreate winuaelog.txt log\nLog illegal memory accesses\nBlank unused displays\nStart mouse uncaptured\nStart minimized\nMinimize when focus is lost\n100/120Hz VSync black frame insertion\nMaster floppy write protection\nHide all UAE autoconfig boards\n"
IDS_JOYMODE_WHEELMOUSE "Wheel Mouse"
IDS_NUMSG_KS68030PLUS "The selected system ROM requires a 68030 or higher CPU."
IDS_SELECTTAPE "Select a Tape directory or archive file..."
+ IDS_SCREEN_NATIVE "Native"
+ IDS_SCREEN_RTG "RTG"
+ IDS_DISPLAYMODE_NATIVE "Native"
+ IDS_CURRENT_CONFIGURATION "Current Configuration"
+ IDS_SELECT_MENU "Select"
+ IDS_SCSI_EMULATION "SCSI Emulation *"
+ IDS_SLIRP "SLIRP User Mode NAT"
+ IDS_SLIRP_INBOUND "SLIRP + Open ports (21-23,80)"
+END
+
+STRINGTABLE
+BEGIN
+ IDS_FILTER_PAL_EXTRA "Brightness\nContrast\nSaturation\nGamma\nScanlines\nBlurriness\nNoise\n"
+ IDS_FILTER_3D_EXTRA "Point/Bilinear\nScanline opacity\nScanline level\n"
END
#endif // English resources
// Dialog
//
-IDD_KICKSTART DIALOGEX 0, 0, 396, 217
+IDD_KICKSTART DIALOGEX 0, 0, 396, 243
STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
EXSTYLE WS_EX_CONTEXTHELP
FONT 8, "MS Sans Serif", 0, 0, 0x1
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,87,77,104,12
CONTROL "ShapeShifter support [] Patches the system ROM for ShapeShifter compatibility.",IDC_KICKSHIFTER,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,195,77,106,13
- GROUPBOX "Miscellaneous",IDC_STATIC,1,98,394,116
+ GROUPBOX "Miscellaneous",IDC_STATIC,1,98,394,143
LTEXT "Cartridge ROM file:",IDC_FLASHTEXT2,12,112,265,10
COMBOBOX IDC_CARTFILE,12,125,361,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "...",IDC_CARTCHOOSER,376,124,10,15
LTEXT "Real Time Clock file",IDC_STATIC,12,174,313,15,SS_CENTERIMAGE
EDITTEXT IDC_RTCFILE,12,191,361,12,ES_AUTOHSCROLL
PUSHBUTTON "...",IDC_RTCCHOOSER,376,189,10,15
+ COMBOBOX IDC_A2091ROMFILE,12,222,171,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP
+ PUSHBUTTON "...",IDC_A2091ROMCHOOSER,187,221,10,15
+ LTEXT "A590/A2091 SCSI ROM file:",IDC_STATIC,12,207,170,15,SS_CENTERIMAGE
+ LTEXT "A4091 SCSI ROM file:",IDC_STATIC,203,207,170,15,SS_CENTERIMAGE
+ COMBOBOX IDC_A4091ROMFILE,202,222,171,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP
+ PUSHBUTTON "...",IDC_A4091ROMCHOOSER,376,221,10,15
END
-IDD_DISPLAY DIALOGEX 0, 0, 396, 279
+IDD_DISPLAY DIALOGEX 0, 0, 396, 298
STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
FONT 8, "MS Sans Serif", 0, 0, 0x1
BEGIN
EDITTEXT IDC_XSIZE,59,56,56,12,ES_NUMBER
EDITTEXT IDC_YSIZE,122,56,56,12,ES_NUMBER
COMBOBOX IDC_DISPLAY_BUFFERCNT,266,56,119,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- GROUPBOX "Settings",IDC_SETTINGSTEXT,1,86,283,144
+ GROUPBOX "Settings",IDC_SETTINGSTEXT,1,86,283,163
RTEXT "Native:",IDC_STATIC,9,98,48,15,SS_CENTERIMAGE
COMBOBOX IDC_SCREENMODE_NATIVE,61,98,71,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_SCREENMODE_NATIVE2,142,98,127,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
RTEXT "RTG:",IDC_STATIC,8,115,49,15,SS_CENTERIMAGE
COMBOBOX IDC_SCREENMODE_RTG,61,118,71,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_SCREENMODE_RTG2,142,118,127,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- CONTROL "Blacker than black",IDC_BLACKER_THAN_BLACK,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,11,140,142,10
- CONTROL "Filtered low resolution",IDC_LORES_SMOOTHED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,159,140,116,10
- CONTROL "Remove interlace artifacts",IDC_FLICKERFIXER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,154,142,10
- CONTROL "Resolution autoswitch",IDC_AUTORESOLUTION,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,159,154,116,10
- RTEXT "Resolution:",IDC_STATIC,27,170,110,8,SS_CENTERIMAGE
+ CONTROL "Blacker than black [] Borderblanked black is blacker than display area black.",IDC_BLACKER_THAN_BLACK,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,11,140,139,10
+ CONTROL "Filtered low resolution [] When scaling hires to lores or superhires to hires, show average color of pixel instead of dropping every other pixel.",IDC_LORES_SMOOTHED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,155,140,123,10
+ CONTROL "Remove interlace artifacts [] Emulates interlace mode internally as progressive, removing all interlace artifacts. Not compatible with all software.",IDC_FLICKERFIXER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,154,139,10
+ RTEXT "Resolution:",IDC_STATIC,24,170,110,8,SS_CENTERIMAGE
COMBOBOX IDC_LORES,142,169,127,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- RTEXT "Refresh:",IDC_REFRESHTEXT,11,190,57,8
- CONTROL "Slider1",IDC_FRAMERATE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,71,185,99,20
- COMBOBOX IDC_RATE2BOX,181,190,60,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- RTEXT "FPS adj.:",IDC_REFRESH2TEXT,9,211,61,8
- CONTROL "",IDC_FRAMERATE2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,71,206,99,20
- EDITTEXT IDC_RATE2TEXT,181,210,46,12,ES_AUTOHSCROLL
- CONTROL "",IDC_RATE2ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,232,211,8,10
+ RTEXT "Resolution autoswitch:",IDC_STATIC,92,190,110,8,SS_CENTERIMAGE
+ COMBOBOX IDC_AUTORESOLUTIONSELECT,210,189,59,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ RTEXT "Refresh:",IDC_REFRESHTEXT,11,209,57,8
+ CONTROL "Slider1",IDC_FRAMERATE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,71,204,99,20
+ COMBOBOX IDC_RATE2BOX,210,209,60,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ RTEXT "FPS adj.:",IDC_REFRESH2TEXT,9,230,61,8
+ CONTROL "",IDC_FRAMERATE2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,71,225,99,20
+ EDITTEXT IDC_RATE2TEXT,210,229,46,12,ES_AUTOHSCROLL
+ CONTROL "",IDC_RATE2ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,261,230,8,10
+ COMBOBOX IDC_DA_MODE,15,260,71,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ CONTROL "",IDC_DA_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,96,256,96,20
+ EDITTEXT IDC_DA_TEXT,205,260,56,12,ES_AUTOHSCROLL | ES_READONLY
+ PUSHBUTTON "Reset to defaults",IDC_DA_RESET,156,278,106,14
GROUPBOX "Centering",IDC_STATIC,289,86,105,46
CONTROL "Horizontal",IDC_XCENTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,300,100,90,10
CONTROL "Vertical",IDC_YCENTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,300,116,90,10
- GROUPBOX "Line mode",IDC_STATIC,290,134,104,63
- CONTROL "Single",IDC_LM_NORMAL,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_GROUP | WS_TABSTOP,299,150,90,10
- CONTROL "Double",IDC_LM_DOUBLED,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,299,166,90,10
- CONTROL "Scanlines",IDC_LM_SCANLINES,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,299,182,90,10
- GROUPBOX "Interlaced line mode",IDC_STATIC,290,199,104,70
- CONTROL "Single",IDC_LM_INORMAL,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_GROUP | WS_TABSTOP,299,214,90,10
- CONTROL "Double, frames",IDC_LM_IDOUBLED,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,299,228,90,10
- CONTROL "Double, fields",IDC_LM_IDOUBLED2,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,299,241,90,10
- CONTROL "Double, fields+",IDC_LM_IDOUBLED3,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,299,254,90,10
- COMBOBOX IDC_DA_MODE,15,245,71,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- CONTROL "",IDC_DA_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,96,241,96,20
- EDITTEXT IDC_DA_TEXT,205,245,56,12,ES_AUTOHSCROLL | ES_READONLY
- PUSHBUTTON "Reset to defaults",IDC_DA_RESET,156,263,106,14
+ GROUPBOX "Line mode",IDC_STATIC,290,134,104,81
+ CONTROL "Single",IDC_LM_NORMAL,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_GROUP | WS_TABSTOP,299,148,90,10
+ CONTROL "Double",IDC_LM_DOUBLED,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,299,161,90,10
+ CONTROL "Scanlines",IDC_LM_SCANLINES,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,299,174,90,10
+ CONTROL "Double, fields",IDC_LM_PDOUBLED2,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,299,187,90,10
+ CONTROL "Double, fields+",IDC_LM_PDOUBLED3,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,299,200,90,10
+ GROUPBOX "Interlaced line mode",IDC_STATIC,290,222,104,70
+ CONTROL "Single",IDC_LM_INORMAL,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_GROUP | WS_TABSTOP,299,238,90,10
+ CONTROL "Double, frames",IDC_LM_IDOUBLED,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,299,251,90,10
+ CONTROL "Double, fields",IDC_LM_IDOUBLED2,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,299,264,90,10
+ CONTROL "Double, fields+",IDC_LM_IDOUBLED3,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,299,277,90,10
+ CONTROL "VGA mode resolution autoswitch [] Automatically selects between hires and superhires in programmed display modes, keeping correct aspect ratio.",IDC_AUTORESOLUTIONVGA,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,155,154,124,10
END
IDD_MEMORY DIALOGEX 0, 0, 396, 206
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,128,120,11
CONTROL "MMU [] 68030, 68040 and 68060 MMU emulation. Not compatible with JIT.",IDC_MMUENABLE,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,142,120,11
+ CONTROL "Unimplemented CPU emu [] Emulate 68060 unimplemented integer instructions",IDC_CPU_UNIMPLEMENTED,
+ "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,156,118,10
GROUPBOX "CPU Emulation Speed",IDC_STATIC,136,3,258,111
CONTROL "Fastest possible",IDC_CS_HOST,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_GROUP | WS_TABSTOP,143,24,195,10
CONTROL "Approximate A500/A1200 or cycle-exact",IDC_CS_68000,
CONTROL "CPU internal",IDC_FPU3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,236,93,10
CONTROL "More compatible [] More compatible but slower FPU emulation.",IDC_COMPATIBLE_FPU,
"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,252,117,10
+ CONTROL "Unimplemented FPU emu [] Emulate FPU unimplemented instructions",IDC_FPU_UNIMPLEMENTED,
+ "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,265,116,10
GROUPBOX "Advanced JIT Settings",IDC_STATIC,136,181,258,99
RTEXT "Cache size:",IDC_STATIC,143,200,66,10,SS_CENTERIMAGE
CONTROL "Slider1",IDC_CACHE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,212,194,115,20
CONTROL "No flags",IDC_NOFLAGS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,243,227,68,11
CONTROL "Direct",IDC_TRUST0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,315,227,72,10
CONTROL "Indirect",IDC_TRUST1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,315,241,72,10
- CONTROL "Unimplemented FPU emu [] Emulate FPU unimplemented instructions",IDC_FPU_UNIMPLEMENTED,
- "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,265,116,10
- CONTROL "Unimplemented CPU emu [] Emulate 68060 unimplemented integer instructions",IDC_CPU_UNIMPLEMENTED,
- "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,156,118,10
END
IDD_FLOPPY DIALOGEX 0, 0, 396, 261
COMBOBOX IDC_DF0TYPE,152,14,65,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Write-protected",IDC_STATIC,221,17,74,10,SS_CENTERIMAGE
CONTROL "",IDC_DF0WP,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,300,13,10,15
+ PUSHBUTTON "?",IDC_INFO0,323,12,17,15
PUSHBUTTON "Eject",IDC_EJECT0,345,12,30,15
PUSHBUTTON "...",IDC_DF0,379,12,10,15
COMBOBOX IDC_DF0TEXT,6,31,384,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_DF1TYPE,152,51,65,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Write-protected",IDC_STATIC,221,53,74,10,SS_CENTERIMAGE
CONTROL "",IDC_DF1WP,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,300,50,10,15
+ PUSHBUTTON "?",IDC_INFO1,323,49,17,15
PUSHBUTTON "Eject",IDC_EJECT1,345,49,30,15
PUSHBUTTON "...",IDC_DF1,379,49,10,15
COMBOBOX IDC_DF1TEXT,6,68,383,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_DF2TYPE,152,87,65,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Write-protected",IDC_STATIC,222,88,73,10,SS_CENTERIMAGE
CONTROL "",IDC_DF2WP,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,300,86,9,15
+ PUSHBUTTON "?",IDC_INFO2,323,85,17,15
PUSHBUTTON "Eject",IDC_EJECT2,345,85,30,15
PUSHBUTTON "...",IDC_DF2,379,85,10,15
COMBOBOX IDC_DF2TEXT,6,104,384,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_DF3TYPE,152,123,65,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Write-protected",IDC_STATIC,222,125,73,10,SS_CENTERIMAGE
CONTROL "",IDC_DF3WP,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,300,123,9,15
+ PUSHBUTTON "?",IDC_INFO3,323,122,17,15
PUSHBUTTON "Eject",IDC_EJECT3,345,121,30,15
PUSHBUTTON "...",IDC_DF3,379,121,10,15
COMBOBOX IDC_DF3TEXT,6,140,383,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
EDITTEXT IDC_CREATE_NAME,130,243,97,13,ES_AUTOHSCROLL
CONTROL "Bootblock",IDC_FLOPPY_BOOTABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,235,242,59,15
CONTROL "FFS",IDC_FLOPPY_FFS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,300,242,34,15
- PUSHBUTTON "?",IDC_INFO0,323,12,17,15
- PUSHBUTTON "?",IDC_INFO1,323,49,17,15
- PUSHBUTTON "?",IDC_INFO2,323,85,17,15
- PUSHBUTTON "?",IDC_INFO3,323,122,17,15
END
IDD_HARDDISK DIALOGEX 0, 0, 396, 315
PUSHBUTTON "Add &Directory or Archive...",IDC_NEW_FS,1,157,128,15
PUSHBUTTON "Add &Hardfile...",IDC_NEW_HF,135,157,126,15
PUSHBUTTON "Add Ha&rd Drive...",IDC_NEW_HD,267,157,127,15
+ PUSHBUTTON "Add SCSI/IDE CD Drive",IDC_NEW_CD,1,176,128,15
+ PUSHBUTTON "Add SCSI Tape Drive",IDC_NEW_TAPE,135,176,126,15
PUSHBUTTON "&Properties",IDC_EDIT,267,176,60,15
PUSHBUTTON "Remove",IDC_REMOVE,334,176,60,15
GROUPBOX "Options",IDC_STATIC,1,191,393,72
COMBOBOX IDC_CD_TYPE,282,279,71,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Eject",IDC_CD_EJECT,360,278,30,15
COMBOBOX IDC_CD_TEXT,5,297,386,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
- PUSHBUTTON "Add SCSI/IDE CD Drive",IDC_NEW_CD,1,176,128,15
- PUSHBUTTON "Add SCSI Tape Drive",IDC_NEW_TAPE,135,176,126,15
END
IDD_SOUND DIALOGEX 0, 0, 396, 288
CONTROL "Enabled",IDC_SOUND2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,13,71,108,10
CONTROL "Automatic switching",IDC_SOUND_AUTO,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,13,89,108,10
GROUPBOX "Volume",IDC_STATIC,139,19,255,69
+ RTEXT "Paula Audio",IDC_STATIC,152,38,51,10,SS_CENTERIMAGE
CONTROL "",IDC_SOUNDVOLUME,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,207,32,105,20
EDITTEXT IDC_SOUNDVOLUME2,329,35,48,12,ES_CENTER | ES_READONLY
+ RTEXT "CD Audio",IDC_STATIC,152,67,51,10,SS_CENTERIMAGE
+ CONTROL "",IDC_SOUNDVOLUMECD,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,207,61,105,20
+ EDITTEXT IDC_SOUNDVOLUMECD2,329,64,48,12,ES_CENTER | ES_READONLY
GROUPBOX "Sound Buffer Size",IDC_STATIC,140,90,254,42
CONTROL "Slider1",IDC_SOUNDBUFFERRAM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,207,106,105,20
EDITTEXT IDC_SOUNDBUFFERMEM,329,109,48,12,ES_CENTER | ES_READONLY
CONTROL "WASAPI",IDC_SOUND_WASAPI,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,292,240,98,10
CONTROL "OpenAL",IDC_SOUND_OPENAL,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,292,253,98,10
CONTROL "PortAudio",IDC_SOUND_PORTAUDIO,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,292,266,98,10
- CONTROL "",IDC_SOUNDVOLUMECD,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,207,61,105,20
- EDITTEXT IDC_SOUNDVOLUMECD2,329,64,48,12,ES_CENTER | ES_READONLY
- RTEXT "CD Audio",IDC_STATIC,152,67,51,10,SS_CENTERIMAGE
- RTEXT "Paula Audio",IDC_STATIC,152,38,51,10,SS_CENTERIMAGE
END
IDD_LOADSAVE DIALOGEX 0, 0, 396, 318
CONTROL "Direct []Use when emulating serial-link games on two PCs running WinUAE",IDC_SER_DIRECT,
"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,181,171,83,12
CONTROL "uaeserial.device",IDC_UAESERIAL,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,275,171,108,12
+ GROUPBOX "MIDI",IDC_STATIC,1,191,393,54,BS_LEFT
RTEXT "Out:",IDC_MIDI,22,202,32,15,SS_CENTERIMAGE
COMBOBOX IDC_MIDIOUTLIST,58,204,145,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "In:",IDC_MIDI2,204,201,31,15,SS_CENTERIMAGE
COMBOBOX IDC_MIDIINLIST,239,203,145,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ CONTROL "Route MIDI In to MIDI Out",IDC_MIDIROUTER,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,41,227,170,12
GROUPBOX "Protection Dongle",IDC_STATIC,1,252,393,41,BS_LEFT
- GROUPBOX "MIDI",IDC_STATIC,1,191,393,54,BS_LEFT
COMBOBOX IDC_DONGLELIST,58,270,232,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- CONTROL "Route MIDI In to MIDI Out",IDC_MIDIROUTER,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,41,227,170,12
END
IDD_GAMEPORTS DIALOGEX 0, 0, 396, 288
CONTROL "Magic Mouse",IDC_PORT_MOUSETRICK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,195,235,160,11
RTEXT "Magic Mouse cursor mode:",IDC_STATIC,45,254,138,10,SS_CENTERIMAGE
COMBOBOX IDC_PORT_TABLET_CURSOR,195,251,119,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- CONTROL "Install virtual mouse driver",IDC_PORT_TABLET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,48,270,136,11
+ CONTROL "Install virtual mouse driver",IDC_PORT_TABLET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,270,116,11
CONTROL "Full tablet input emulation",IDC_PORT_TABLET_FULL,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,195,270,160,11
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,270,106,11
+ CONTROL "Tablet.library emulation",IDC_PORT_TABLET_LIBRARY,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,267,271,117,11
END
IDD_CONTRIBUTORS DIALOGEX 0, 0, 530, 345
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
DEFPUSHBUTTON "OK",IDOK,176,322,65,15
- CONTROL "",IDC_ERRORLOGMESSAGE,"RICHEDIT",TCS_HOTTRACK | TCS_VERTICAL | TCS_RAGGEDRIGHT | TCS_OWNERDRAWFIXED | TCS_MULTISELECT | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,4,5,521,309
PUSHBUTTON "Clear log",IDC_ERRORLOGCLEAR,288,322,65,15
+ CONTROL "",IDC_ERRORLOGMESSAGE,"RICHEDIT",TCS_HOTTRACK | TCS_VERTICAL | TCS_RAGGEDRIGHT | TCS_OWNERDRAWFIXED | TCS_MULTISELECT | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,4,5,521,309
END
IDD_ABOUT DIALOGEX 0, 0, 345, 258
CONTROL "Read/write",IDC_HDF_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,53,74,67,10
CONTROL "Bootable",IDC_HDF_AUTOBOOT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,136,74,67,10
CONTROL "Do not mount",IDC_HDF_DONOTMOUNT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,217,74,67,10
+ CONTROL "Global filesystem",IDC_HDF_ADDFSRES,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,298,74,82,10
RTEXT "Boot priority:",IDC_HARDFILE_BOOTPRI_TEXT,26,94,78,10
EDITTEXT IDC_HARDFILE_BOOTPRI,109,90,44,15
RTEXT "Surfaces:",IDC_SURFACES_TEXT,160,94,48,10
RTEXT "Block size:",IDC_BLOCKSIZE_TEXT,261,113,50,10
EDITTEXT IDC_BLOCKSIZE,317,111,40,15,ES_NUMBER
EDITTEXT IDC_HDFINFO,5,131,385,12,ES_CENTER | ES_READONLY
+ EDITTEXT IDC_HDFINFO2,5,147,385,12,ES_CENTER | ES_READONLY
GROUPBOX "New hard disk image file",IDC_STATIC,2,171,392,62
PUSHBUTTON "Create",IDC_HF_CREATE,58,187,80,14
COMBOBOX IDC_HF_TYPE,58,211,80,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
CONTROL "Dynamic HDF",IDC_HF_DYNAMIC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,280,208,87,10
PUSHBUTTON "OK",IDOK,147,242,50,14
PUSHBUTTON "Cancel",IDCANCEL,203,242,50,14
- EDITTEXT IDC_HDFINFO2,5,147,385,12,ES_CENTER | ES_READONLY
- CONTROL "Global filesystem",IDC_HDF_ADDFSRES,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,298,74,82,10
END
IDD_FILESYS DIALOGEX 15, 25, 396, 111
CONTROL "Vertical Sync",IDC_CS_CIAA_TOD1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,41,68,86,10
CONTROL "Power Supply 50Hz",IDC_CS_CIAA_TOD2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,133,68,109,10
CONTROL "Power Supply 60Hz",IDC_CS_CIAA_TOD3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,249,68,116,10
- GROUPBOX "Chipset Features",IDC_STATIC,1,88,393,158
+ GROUPBOX "Chipset Features",IDC_STATIC,0,88,393,110
CONTROL "CIA ROM Overlay",IDC_CS_CIAOVERLAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,102,104,11
CONTROL "CD32 CD",IDC_CS_CD32CD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,116,104,11
CONTROL "CDTV CD",IDC_CS_CDTVCD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,130,105,11
CONTROL "A600/A1200 IDE",IDC_CS_IDE1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,143,104,11
CONTROL "ROM Mirror (E0)",IDC_CS_KSMIRROR_E0,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,157,104,11
CONTROL "KB Reset Warning",IDC_CS_RESETWARNING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,171,104,11
- LTEXT "A4091/A4000T SCSI not yet implemented.",IDC_STATIC,17,202,247,8,SS_CENTERIMAGE
- CONTROL "A590/A2091 SCSI",IDC_CS_A2091,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,216,104,11
- CONTROL "A4091 SCSI",IDC_CS_A4091,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,229,104,11
+ CONTROL "CIA TOD bug",IDC_CS_CIATODBUG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,184,104,11
CONTROL "A1000 Boot RAM/ROM",IDC_CS_A1000RAM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,127,102,121,11
CONTROL "CD32 C2P",IDC_CS_CD32C2P,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,127,116,121,11
CONTROL "CDTV SRAM",IDC_CS_CDTVRAM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,127,129,121,11
CONTROL "A4000/A4000T IDE",IDC_CS_IDE2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,127,143,121,11
CONTROL "ROM Mirror (A8)",IDC_CS_KSMIRROR_A8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,127,157,121,11
CONTROL "No-EHB Denise",IDC_CS_NOEHB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,127,171,121,11
- CONTROL "A3000 SCSI",IDC_CS_DMAC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,127,216,121,11
- CONTROL "CDTV SCSI",IDC_CS_CDTVSCSI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,127,229,121,11
CONTROL "DF0: ID Hardware",IDC_CS_DF0IDHW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,102,125,11
CONTROL "CD32 NVRAM",IDC_CS_CD32NVRAM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,116,125,11
CONTROL "CDTV SRAM Expansion",IDC_CS_CDTVRAMEXP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,129,125,11
CONTROL "PCMCIA",IDC_CS_PCMCIA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,143,125,11
CONTROL "C00000 is Fast RAM",IDC_CS_SLOWISFAST,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,157,125,11
CONTROL "A1000 Agnus (8361/8367)",IDC_CS_DIPAGNUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,171,125,11
- CONTROL "A4000T SCSI",IDC_CS_DMAC2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,216,125,11
- CONTROL "Include host SCSI devices",IDC_CS_SCSIMODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,229,125,11
+ GROUPBOX "Internal SCSI Hardware",IDC_STATIC,0,201,393,45
+ CONTROL "A3000 WD33C93 SCSI",IDC_CS_DMAC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,34,216,121,11
+ CONTROL "CDTV WD33C93 SCSI",IDC_CS_CDTVSCSI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,34,229,121,11
+ CONTROL "A4000T NCR53C710 SCSI",IDC_CS_DMAC2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,171,216,125,11
GROUPBOX "Chipset Revision",IDC_STATIC,1,249,393,46
CONTROL "Ramsey revision:",IDC_CS_RAMSEY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,34,261,97,11
CONTROL "Fat Gary revision:",IDC_CS_FATGARY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,34,275,97,11
CONTROL "Denise/Lisa revision:",IDC_CS_DENISE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,200,275,107,11
EDITTEXT IDC_CS_AGNUSREV,311,260,45,13,ES_AUTOHSCROLL
EDITTEXT IDC_CS_DENISEREV,311,275,45,13,ES_AUTOHSCROLL
- CONTROL "CIA TOD bug",IDC_CS_CIATODBUG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,184,104,11
END
IDD_AVIOUTPUT DIALOGEX 0, 0, 396, 260
PUSHBUTTON "Swap 1<>2",IDC_INPUTSWAP,324,303,70,14
END
-IDD_FILTER DIALOGEX 0, 0, 396, 288
+IDD_FILTER DIALOGEX 0, 0, 396, 295
STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
FONT 8, "MS Sans Serif", 0, 0, 0x1
BEGIN
- GROUPBOX "Filter Settings",-1,1,1,393,146
- COMBOBOX IDC_FILTERMODE,9,15,167,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- COMBOBOX IDC_FILTERFILTER,215,15,63,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- PUSHBUTTON "Reset to defaults",IDC_FILTERDEFAULT,283,15,106,14
- COMBOBOX IDC_FILTEROVERLAYTYPE,9,36,118,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- COMBOBOX IDC_FILTEROVERLAY,134,36,145,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- COMBOBOX IDC_FILTERAUTOSCALE,284,36,104,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- RTEXT "Horiz. size:",-1,7,63,81,10,SS_CENTERIMAGE
- COMBOBOX IDC_FILTERHZMULT,92,62,35,150,CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- CONTROL "Slider1",IDC_FILTERHZ,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,147,56,152,19
- EDITTEXT IDC_FILTERHZV,316,58,42,12,ES_CENTER | ES_READONLY
- RTEXT "Vert. size:",-1,7,84,81,10,SS_CENTERIMAGE
- COMBOBOX IDC_FILTERVZMULT,92,83,35,150,CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- CONTROL "Slider1",IDC_FILTERVZ,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,147,77,152,19
- EDITTEXT IDC_FILTERVZV,316,79,42,12,ES_CENTER | ES_READONLY
- RTEXT "Horiz. position:",-1,5,105,81,10,SS_CENTERIMAGE
- CONTROL "Slider1",IDC_FILTERHO,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,147,98,151,19
- EDITTEXT IDC_FILTERHOV,316,100,42,12,ES_CENTER | ES_READONLY
- RTEXT "Vert. position:",-1,5,125,81,10,SS_CENTERIMAGE
- CONTROL "Slider1",IDC_FILTERVO,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,147,119,151,19
- EDITTEXT IDC_FILTERVOV,316,121,42,12,ES_CENTER | ES_READONLY
- GROUPBOX "Aspect Ratio Correction",-1,1,152,144,89
- COMBOBOX IDC_FILTERASPECT,14,169,99,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ GROUPBOX "Filter Settings",-1,1,1,393,160
+ COMBOBOX IDC_FILTERMODE,9,31,167,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_FILTERSTACK,182,31,27,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_FILTERFILTER,215,31,63,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ PUSHBUTTON "Reset to defaults",IDC_FILTERDEFAULT,283,31,106,14
+ COMBOBOX IDC_FILTEROVERLAYTYPE,9,52,118,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_FILTEROVERLAY,134,52,145,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_FILTERAUTOSCALE,284,52,104,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ RTEXT "Horiz. size:",-1,7,79,81,10,SS_CENTERIMAGE
+ COMBOBOX IDC_FILTERHZMULT,92,78,35,150,CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ RTEXT "Vert. size:",-1,7,100,81,10,SS_CENTERIMAGE
+ COMBOBOX IDC_FILTERVZMULT,92,99,35,150,CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ RTEXT "Horiz. position:",-1,5,121,81,10,SS_CENTERIMAGE
+ RTEXT "Vert. position:",-1,5,141,81,10,SS_CENTERIMAGE
+ CONTROL "Slider1",IDC_FILTERHZ,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,147,72,152,19
+ EDITTEXT IDC_FILTERHZV,316,74,42,12,ES_CENTER | ES_READONLY
+ CONTROL "Slider1",IDC_FILTERVZ,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,147,93,152,19
+ EDITTEXT IDC_FILTERVZV,316,95,42,12,ES_CENTER | ES_READONLY
+ CONTROL "Slider1",IDC_FILTERHO,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,147,114,151,19
+ EDITTEXT IDC_FILTERHOV,316,116,42,12,ES_CENTER | ES_READONLY
+ CONTROL "Slider1",IDC_FILTERVO,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,147,135,151,19
+ EDITTEXT IDC_FILTERVOV,316,137,42,12,ES_CENTER | ES_READONLY
+ GROUPBOX "Aspect Ratio Correction",-1,1,165,144,89
+ COMBOBOX IDC_FILTERASPECT,14,182,99,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
CONTROL "Keep autoscale aspect",IDC_FILTERKEEPAUTOSCALEASPECT,
- "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,14,189,126,11
- CONTROL "Keep aspect ratio",IDC_FILTERKEEPASPECT,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,14,204,126,11
- COMBOBOX IDC_FILTERASPECT2,14,220,99,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- GROUPBOX "Extra Settings",-1,154,152,240,89
- COMBOBOX IDC_FILTERXTRA,177,172,138,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- COMBOBOX IDC_FILTERSLR,327,172,41,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- CONTROL "Slider1",IDC_FILTERXL,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,195,141,19
- EDITTEXT IDC_FILTERXLV,327,197,41,12,ES_CENTER | ES_READONLY
- GROUPBOX "Presets",-1,1,245,393,36
- COMBOBOX IDC_FILTERPRESETS,13,260,183,150,CBS_DROPDOWN | CBS_SORT | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- PUSHBUTTON "Load",IDC_FILTERPRESETLOAD,205,259,55,14
- PUSHBUTTON "Save",IDC_FILTERPRESETSAVE,265,259,55,14
- PUSHBUTTON "Delete",IDC_FILTERPRESETDELETE,325,259,55,14
- COMBOBOX IDC_FILTERSTACK,182,15,27,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,14,202,126,11
+ CONTROL "Keep aspect ratio",IDC_FILTERKEEPASPECT,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,14,217,126,11
+ COMBOBOX IDC_FILTERASPECT2,14,233,99,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ GROUPBOX "Extra Settings",-1,154,165,240,89
+ COMBOBOX IDC_FILTERXTRA,177,185,138,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_FILTERSLR,327,185,41,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ CONTROL "Slider1",IDC_FILTERXL,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,208,141,19
+ EDITTEXT IDC_FILTERXLV,327,210,41,12,ES_CENTER | ES_READONLY
+ GROUPBOX "Presets",-1,1,258,393,36
+ COMBOBOX IDC_FILTERPRESETS,13,273,183,150,CBS_DROPDOWN | CBS_SORT | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ PUSHBUTTON "Load",IDC_FILTERPRESETLOAD,205,272,55,14
+ PUSHBUTTON "Save",IDC_FILTERPRESETSAVE,265,272,55,14
+ PUSHBUTTON "Delete",IDC_FILTERPRESETDELETE,325,272,55,14
+ COMBOBOX IDC_FILTER_NATIVERTG,284,12,104,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
END
IDD_HARDDRIVE DIALOGEX 0, 0, 396, 109
BEGIN
LTEXT "Hard drive:",IDC_STATIC,7,11,80,10
COMBOBOX IDC_HARDDRIVE,49,9,339,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ EDITTEXT IDC_HDFINFO,5,29,385,12,ES_CENTER | ES_READONLY
+ EDITTEXT IDC_HDFINFO2,5,46,385,12,ES_CENTER | ES_READONLY
DEFPUSHBUTTON "Create hard disk image file",IDC_HARDDRIVE_IMAGE,49,67,115,14
EDITTEXT IDC_PATH_NAME,183,67,97,15,ES_AUTOHSCROLL | NOT WS_VISIBLE
RTEXT "HD Controller:",IDC_STATIC,12,90,65,10,SS_CENTERIMAGE
CONTROL "Read/write",IDC_HDF_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,172,90,60,10
DEFPUSHBUTTON "Add hard drive",IDOK,236,87,73,14
PUSHBUTTON "Cancel",IDCANCEL,316,87,73,14
- EDITTEXT IDC_HDFINFO,5,29,385,12,ES_CENTER | ES_READONLY
- EDITTEXT IDC_HDFINFO2,5,46,385,12,ES_CENTER | ES_READONLY
END
IDD_MISC2 DIALOGEX 0, 0, 396, 263
PUSHBUTTON "Reset",IDC_RESETAMIGA,3,328,47,14
PUSHBUTTON "Quit",IDC_QUITEMU,55,328,47,14
PUSHBUTTON "Restart",IDC_RESTARTEMU,107,328,47,14,NOT WS_VISIBLE
+ PUSHBUTTON "Error log",IDC_ERRORLOG,322,328,47,14,NOT WS_VISIBLE
DEFPUSHBUTTON "OK",IDOK,375,328,47,14
PUSHBUTTON "Cancel",IDCANCEL,427,328,47,14
PUSHBUTTON "Help",IDHELP,479,328,47,14,WS_DISABLED
- PUSHBUTTON "Error log",IDC_ERRORLOG,322,328,47,14,NOT WS_VISIBLE
END
IDD_PATHS DIALOGEX 0, 0, 396, 303
PUSHBUTTON "Select image file",IDC_DF0QQ,93,148,98,15
RTEXT "Write-protected",IDC_DF0WPTEXTQ,196,151,69,10,SS_CENTERIMAGE
CONTROL "",IDC_DF0WPQ,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,270,149,10,15
+ PUSHBUTTON "?",IDC_INFO0Q,334,148,19,15
PUSHBUTTON "Eject",IDC_EJECT0Q,358,148,30,15
COMBOBOX IDC_DF0TEXTQ,9,167,379,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
CONTROL "Floppy drive DF1:",IDC_DF1QENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,186,77,15
PUSHBUTTON "Select image file",IDC_DF1QQ,93,186,98,15
RTEXT "Write-protected",IDC_DF1WPTEXTQ,195,189,69,10,SS_CENTERIMAGE
+ COMBOBOX IDC_CD0Q_TYPE,199,187,74,50,CBS_DROPDOWNLIST | NOT WS_VISIBLE | WS_VSCROLL | WS_TABSTOP
CONTROL "",IDC_DF1WPQ,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,270,185,10,15
+ PUSHBUTTON "?",IDC_INFO1Q,334,186,19,15
PUSHBUTTON "Eject",IDC_EJECT1Q,358,186,30,15
COMBOBOX IDC_DF1TEXTQ,9,204,379,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Set configuration",IDC_QUICKSTART_SETCONFIG,9,239,88,15,NOT WS_VISIBLE
GROUPBOX "Mode",IDC_STATIC,250,231,144,28,BS_LEFT
CONTROL "Start in Quickstart mode",IDC_QUICKSTARTMODE,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,259,242,131,12
- COMBOBOX IDC_CD0Q_TYPE,199,187,74,50,CBS_DROPDOWNLIST | NOT WS_VISIBLE | WS_VSCROLL | WS_TABSTOP
- PUSHBUTTON "?",IDC_INFO0Q,334,148,19,15
- PUSHBUTTON "?",IDC_INFO1Q,334,186,19,15
END
IDD_FRONTEND DIALOGEX 0, 0, 420, 242
CTEXT "Enter address",IDC_DBG_ADDRINPUTTXT,20,1,100,10,SS_CENTERIMAGE | WS_TABSTOP
END
-IDD_EXPANSION DIALOGEX 0, 0, 396, 278
+IDD_EXPANSION DIALOGEX 0, 0, 396, 289
STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
FONT 8, "MS Sans Serif", 0, 0, 0x1
BEGIN
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,67,212,10
CONTROL "Always scale in windowed mode",IDC_RTG_SCALE_ALLOW,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,80,212,10
+ CONTROL "Always center",IDC_RTG_CENTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,93,212,10
CONTROL "Hardware vertical blank interrupt",IDC_RTG_VBINTERRUPT,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,106,157,10
CONTROL "Hardware sprite emulation",IDC_RTG_HWSPRITE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,207,106,148,10
COMBOBOX IDC_RTG_BUFFERCNT,153,162,84,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
CTEXT "Aspect ratio:",IDC_STATIC,282,149,83,10,SS_CENTERIMAGE
COMBOBOX IDC_RTG_SCALE_ASPECTRATIO,282,162,84,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- GROUPBOX "Miscellaneous Expansions",IDC_STATIC,1,197,172,80
+ GROUPBOX "Miscellaneous Expansions",IDC_STATIC,1,197,172,87
CONTROL "Catweasel Z2 emulation [] Catweasel MK2 Zorro II card emulation. Physical Windows compatible Catweasel card and drivers required.",IDC_CATWEASEL,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,216,147,11
CONTROL "uaescsi.device",IDC_SCSIDEVICE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,229,147,11
- GROUPBOX "Network",IDC_STATIC,181,197,213,80
+ CONTROL "A590/A2091 WD33C93 SCSI",IDC_CS_A2091,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,242,147,11
+ CONTROL "A4091 NCR53C710 SCSI",IDC_CS_A4091,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,255,151,11
+ CONTROL "Include host SCSI devices",IDC_CS_SCSIMODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,268,147,11
+ GROUPBOX "Network",IDC_STATIC,181,197,213,86
CONTROL "bsdsocket.library [] bsdsocket network library emulation.",IDC_SOCKETS,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,202,216,187,11
CONTROL "uaenet.device [] Sana 2 compatible network device emulation.",IDC_SANA2,
CONTROL "A2065 Z2 [] A2065 Ethernet Zorro II card emulation.",IDC_A2065,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,202,242,187,11
COMBOBOX IDC_NETDEVICE,202,257,178,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- CONTROL "Always center",IDC_RTG_CENTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,93,212,10
END
IDD_INPUTMAP DIALOGEX 0, 0, 421, 341
CONTROL "",IDC_INPUTMAPLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,1,1,418,257
EDITTEXT IDC_INPUTMAPOUT,1,261,418,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED
EDITTEXT IDC_INPUTMAPOUTM,1,277,418,29,ES_MULTILINE | ES_READONLY | WS_DISABLED
- PUSHBUTTON "Remap",IDC_INPUTMAP_CAPTURE,86,324,80,14
+ COMBOBOX IDC_INPUTMAPADD,2,309,345,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Add",IDC_INPUTMAP_CUSTOM,351,308,66,14
+ PUSHBUTTON "Test",IDC_INPUTMAP_TEST,2,324,80,14
+ PUSHBUTTON "Remap",IDC_INPUTMAP_CAPTURE,86,324,80,14
PUSHBUTTON "Delete",IDC_INPUTMAP_DELETE,170,324,80,14
PUSHBUTTON "Delete all",IDC_INPUTMAP_DELETEALL,254,324,80,14
- PUSHBUTTON "Test",IDC_INPUTMAP_TEST,2,324,80,14
PUSHBUTTON "Exit",IDC_INPUTMAP_EXIT,338,324,80,14
- COMBOBOX IDC_INPUTMAPADD,2,309,345,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
END
IDD_INFOBOX DIALOGEX 0, 0, 420, 68
CAPTION "Tape Drive Settings"
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
- DEFPUSHBUTTON "Add Tape Drive",IDOK,201,58,88,14
- PUSHBUTTON "Cancel",IDCANCEL,300,58,87,14
- RTEXT "HD Controller:",IDC_STATIC,35,61,65,10,SS_CENTERIMAGE
- COMBOBOX IDC_HDF_CONTROLLER,115,59,61,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- EDITTEXT IDC_PATH_NAME,52,15,334,15,ES_AUTOHSCROLL
RTEXT "Path:",IDC_STATIC,4,18,43,10,SS_CENTERIMAGE
+ EDITTEXT IDC_PATH_NAME,52,15,334,15,ES_AUTOHSCROLL
PUSHBUTTON "Select Directory",IDC_TAPE_SELECT_DIR,19,36,123,15
PUSHBUTTON "Select Archive or Plain File",IDC_TAPE_SELECT_FILE,160,36,123,15
CONTROL "Read/write",IDC_TAPE_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,313,39,67,10
+ RTEXT "HD Controller:",IDC_STATIC,35,61,65,10,SS_CENTERIMAGE
+ COMBOBOX IDC_HDF_CONTROLLER,115,59,61,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ DEFPUSHBUTTON "Add Tape Drive",IDOK,201,58,88,14
+ PUSHBUTTON "Cancel",IDCANCEL,300,58,87,14
END
IDD_DISKINFO DIALOGEX 0, 0, 491, 323
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
DEFPUSHBUTTON "OK",IDOK,220,303,50,14
- EDITTEXT IDC_DISKINFOBOX,5,4,481,292,ES_MULTILINE | ES_READONLY | WS_VSCROLL
PUSHBUTTON "Save bootblock",IDC_SAVEBOOTBLOCK,397,303,89,14,NOT WS_VISIBLE
+ EDITTEXT IDC_DISKINFOBOX,5,4,481,292,ES_MULTILINE | ES_READONLY | WS_VSCROLL
END
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 2,7,0,0
- PRODUCTVERSION 2,7,0,0
+ FILEVERSION 2,8,0,0
+ PRODUCTVERSION 2,8,0,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
BLOCK "040904b0"
BEGIN
VALUE "FileDescription", "WinUAE"
- VALUE "FileVersion", "2.7.0.0"
+ VALUE "FileVersion", "2.8.0.0"
VALUE "InternalName", "WinUAE"
VALUE "LegalCopyright", "© 1996-2013 under the GNU Public License (GPL)"
VALUE "OriginalFilename", "WinUAE.exe"
VALUE "ProductName", "WinUAE"
- VALUE "ProductVersion", "2.7.0.0"
+ VALUE "ProductVersion", "2.8.0.0"
END
END
BLOCK "VarFileInfo"
END
END
-
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
BEGIN
IDD_KICKSTART, DIALOG
BEGIN
+ BOTTOMMARGIN, 217
END
IDD_DISPLAY, DIALOG
IDD_FILTER, DIALOG
BEGIN
+ BOTTOMMARGIN, 288
END
IDD_HARDDRIVE, DIALOG
IDS_INPUTQUALIFIER "Qualifiers"
IDS_GENERIC "Generic"
IDS_AUTODETECT "Autodetect"
+ IDS_OFF "off"
END
STRINGTABLE
inputdevice_compa_clear (&changed_prefs, inputmap_port);
if (_tcslen (name) == 0) {
- inputdevice_joyport_config (&changed_prefs, _T("none"), inputmap_port, 0, 0);
+ inputdevice_joyport_config (&changed_prefs, _T("none"), inputmap_port, 0, 0, true);
return TRUE;
}
devicetype2 = -1;
_stprintf (tmp2, _T("KeyboardLayout%d"), i);
if (!_tcscmp (tmp2, name)) {
_stprintf (tmp2, _T("kbd%d"), i + 1);
- return inputdevice_joyport_config (&changed_prefs, tmp2, inputmap_port, devicetype2, 0);
+ return inputdevice_joyport_config (&changed_prefs, tmp2, inputmap_port, devicetype2, 0, true);
}
}
- return inputdevice_joyport_config (&changed_prefs, name, inputmap_port, devicetype2, 1);
+ return inputdevice_joyport_config (&changed_prefs, name, inputmap_port, devicetype2, 1, true);
}
static int cd_insert (int num, const TCHAR *name)
copy winuaesrc.zip d:\amiga\winuaepackets\winuaesrc%1.zip
move winuaesrc.zip d:\amiga
cd c:\projects\winuae\src\od-win32
-zip -9 winuaedebug%1 winuae_msvc10\fullrelease\winuae.pdb winuae_msvc10\x64\fullrelease\winuae.pdb
+zip -9 winuaedebug%1 winuae_msvc11\fullrelease\winuae.pdb winuae_msvc11\x64\fullrelease\winuae.pdb
move winuaedebug%1.zip d:\amiga\winuaepackets\debug\
-copy winuae_msvc10\fullrelease\winuae.pdb d:\amiga\dump
+copy winuae_msvc11\fullrelease\winuae.pdb winuae_msvc11\x64\fullrelease\winuae.pdb d:\amiga\dump
copy d:\amiga\winuae.exe d:\amiga\dump
SystemInfo.wProcessorArchitecture, SystemInfo.wProcessorLevel, SystemInfo.wProcessorRevision,
SystemInfo.dwNumberOfProcessors, filedate);
write_log (_T("\n(c) 1995-2001 Bernd Schmidt - Core UAE concept and implementation.")
- _T("\n(c) 1998-2013 Toni Wilen - Win32 port, core code updates.")
+ _T("\n(c) 1998-2014 Toni Wilen - Win32 port, core code updates.")
_T("\n(c) 1996-2001 Brian King - Win32 port, Picasso96 RTG, and GUI.")
_T("\n(c) 1996-1999 Mathias Ortmann - Win32 port and bsdsocket support.")
_T("\n(c) 2000-2001 Bernd Meyer - JIT engine.")
#define GETBDM(x) (((x) - ((x / 10000) * 10000)) / 100)
#define GETBDD(x) ((x) % 100)
-#define WINUAEPUBLICBETA 0
+#define WINUAEPUBLICBETA 1
#define LANG_DLL 1
#if WINUAEPUBLICBETA
-#define WINUAEBETA _T("0")
+#define WINUAEBETA _T("1")
#else
#define WINUAEBETA _T("")
#endif
-#define WINUAEDATE MAKEBD(2014, 5, 5)
+#define WINUAEDATE MAKEBD(2014, 5, 14)
#define WINUAEEXTRA _T("")
//#define WINUAEEXTRA _T("AmiKit Preview")
//#define WINUAEEXTRA _T("Amiga Forever Edition")
int ok = 0;
RECT sr, dr, zr;
DDSURFACEDESC2 desc;
- int pitch;
+ int pitch, surf_height;
uae_u8 *surfstart;
aw = amiga_width;
bufmem_ptr = sptr;
if (d3d) {
- surfstart = D3D_locktexture (&pitch, true);
+ surfstart = D3D_locktexture (&pitch, &surf_height, true);
if (surfstart == NULL)
return;
} else {
return;
pitch = desc.lPitch;
surfstart = (uae_u8*)desc.lpSurface;
+ surf_height = desc.dwHeight;
}
dptr = surfstart;
- enddptr = dptr + pitch * temp_height;
+ enddptr = dptr + pitch * surf_height;
if (!d3d) {
dptr = getfilterrect1 (&sr, &dr, dst_width, dst_height, dst_depth, aw, ah, scale, temp_width, temp_height, dptr, pitch);
}
if (amiga_depth == dst_depth) {
int y;
- for (y = 0; y < ah; y++) {
- memcpy (dptr, sptr, aw * dst_depth / 8);
+ int w = aw * dst_depth / 8;
+ for (y = 0; y < ah && dptr + w <= enddptr; y++) {
+ memcpy (dptr, sptr, w);
sptr += vb->rowbytes;
dptr += pitch;
}
ret = 1;
} else {
ret = 0;
- vb->bufmem = D3D_locktexture (&vb->rowbytes, fullupdate);
+ vb->bufmem = D3D_locktexture (&vb->rowbytes, NULL, fullupdate);
if (vb->bufmem) {
init_row_map ();
ret = 1;
{
if (currprefs.gfx_api) {
int pitch;
- uae_u8 *p = D3D_locktexture (&pitch, fullupdate);
+ uae_u8 *p = D3D_locktexture (&pitch, NULL, fullupdate);
picasso_vidinfo.rowbytes = pitch;
return p;
} else {
SendDlgItemMessage (hDlg, IDC_LOGSELECT, CB_RESETCONTENT, 0, 0);
SendDlgItemMessage (hDlg, IDC_LOGSELECT, CB_ADDSTRING, 0, (LPARAM)_T("winuaebootlog.txt"));
SendDlgItemMessage (hDlg, IDC_LOGSELECT, CB_ADDSTRING, 0, (LPARAM)_T("winuaelog.txt"));
- SendDlgItemMessage (hDlg, IDC_LOGSELECT, CB_ADDSTRING, 0, (LPARAM)_T("Current configuration"));
+ WIN32GUI_LoadUIString (IDS_CURRENT_CONFIGURATION, tmp, sizeof tmp / sizeof (TCHAR));
+ SendDlgItemMessage (hDlg, IDC_LOGSELECT, CB_ADDSTRING, 0, (LPARAM)tmp);
SendDlgItemMessage (hDlg, IDC_LOGSELECT, CB_SETCURSEL, 0, 0);
CheckDlgButton (hDlg, IDC_LOGENABLE, winuaelog_temporary_enable || (full_property_sheet == 0 && currprefs.win32_logfile));
ew (hDlg, IDC_LOGENABLE, winuaelog_temporary_enable == false && full_property_sheet);
static void init_resolution_combo (HWND hDlg)
{
int i, idx;
- TCHAR tmp[64];
+ TCHAR tmp[MAX_DPATH];
struct MultiDisplay *md = getdisplay (&workprefs);
idx = -1;
idx = md->DisplayModes[i].residx;
}
}
- SendDlgItemMessage(hDlg, IDC_RESOLUTION, CB_ADDSTRING, 0, (LPARAM)_T("Native"));
+ WIN32GUI_LoadUIString (IDS_DISPLAYMODE_NATIVE, tmp, sizeof tmp / sizeof (TCHAR));
+ SendDlgItemMessage(hDlg, IDC_RESOLUTION, CB_ADDSTRING, 0, (LPARAM)tmp);
}
static void init_displays_combo (HWND hDlg, bool rtg)
if (!enumerated) {
ethernet_enumerate (ndd, NULL);
+ for (int i = 0; ndd[i]; i++) {
+ struct netdriverdata *n = ndd[i];
+ if (!n->active)
+ continue;
+ if (n->type == UAENET_SLIRP) {
+ WIN32GUI_LoadUIString (IDS_SLIRP, tmp, sizeof tmp / sizeof (TCHAR));
+ n->desc = my_strdup(tmp);
+ } else if (n->type == UAENET_SLIRP_INBOUND) {
+ WIN32GUI_LoadUIString (IDS_SLIRP_INBOUND, tmp, sizeof tmp / sizeof (TCHAR));
+ n->desc = my_strdup(tmp);
+ }
+ }
enumerated = 1;
}
expansion_net (hDlg);
static void misc_scsi (HWND hDlg)
{
+ TCHAR tmp[MAX_DPATH];
+
SendDlgItemMessage (hDlg, IDC_SCSIMODE, CB_RESETCONTENT, 0, 0);
- SendDlgItemMessage (hDlg, IDC_SCSIMODE, CB_ADDSTRING, 0, (LPARAM)_T("SCSI Emulation *"));
+ WIN32GUI_LoadUIString (IDS_SCSI_EMULATION, tmp, sizeof tmp / sizeof (TCHAR));
+ SendDlgItemMessage (hDlg, IDC_SCSIMODE, CB_ADDSTRING, 0, (LPARAM)tmp);
SendDlgItemMessage (hDlg, IDC_SCSIMODE, CB_ADDSTRING, 0, (LPARAM)_T("SPTI"));
SendDlgItemMessage (hDlg, IDC_SCSIMODE, CB_ADDSTRING, 0, (LPARAM)_T("SPTI + SCSI SCAN"));
SendDlgItemMessage (hDlg, IDC_SCSIMODE, CB_SETCURSEL, workprefs.win32_uaescsimode, 0);
SendDlgItemMessage (hDlg, IDC_LANGUAGE, CB_SETCURSEL, idx, 0);
SendDlgItemMessage (hDlg, IDC_GUI_SIZE, CB_RESETCONTENT, 0, 0);
- SendDlgItemMessage (hDlg, IDC_GUI_SIZE, CB_ADDSTRING, 0, (LPARAM)_T("Select"));
+ WIN32GUI_LoadUIString (IDS_SELECT_MENU, tmp, sizeof tmp / sizeof (TCHAR));
+ SendDlgItemMessage (hDlg, IDC_GUI_SIZE, CB_ADDSTRING, 0, (LPARAM)tmp);
SendDlgItemMessage (hDlg, IDC_GUI_SIZE, CB_ADDSTRING, 0, (LPARAM)_T("140%"));
SendDlgItemMessage (hDlg, IDC_GUI_SIZE, CB_ADDSTRING, 0, (LPARAM)_T("130%"));
SendDlgItemMessage (hDlg, IDC_GUI_SIZE, CB_ADDSTRING, 0, (LPARAM)_T("120%"));
{
static int recursive;
LRESULT item;
- TCHAR tmp[100];
+ TCHAR tmp[MAX_DPATH];
int i;
static int filteroverlaypos = -1;
+ static bool firstinit;
switch (msg)
{
case WM_INITDIALOG:
+ if (!firstinit) {
+ WIN32GUI_LoadUIString (IDS_FILTER_PAL_EXTRA, tmp, sizeof tmp / sizeof (TCHAR));
+ TCHAR *p1 = tmp;
+ for (i = 0; filter_pal_extra[i].label; i++) {
+ TCHAR *p2 = _tcschr (p1, '\n');
+ if (!p2 || *p2 == 0)
+ break;
+ *p2++ = 0;
+ filter_pal_extra[i].label = my_strdup(p1);
+ p1 = p2;
+ }
+ WIN32GUI_LoadUIString (IDS_FILTER_3D_EXTRA, tmp, sizeof tmp / sizeof (TCHAR));
+ p1 = tmp;
+ for (i = 0; filter_3d_extra[i].label; i++) {
+ TCHAR *p2 = _tcschr (p1, '\n');
+ if (!p2 || *p2 == 0)
+ break;
+ *p2++ = 0;
+ filter_3d_extra[i].label = my_strdup(p1);
+ p1 = p2;
+ }
+ firstinit = true;
+ }
+
pages[HW3D_ID] = hDlg;
currentpage = HW3D_ID;
SendDlgItemMessage (hDlg, IDC_FILTERASPECT, CB_RESETCONTENT, 0, 0);
SendDlgItemMessage (hDlg, IDC_FILTERASPECT2, CB_ADDSTRING, 0, (LPARAM)_T("TV"));
SendDlgItemMessage (hDlg, IDC_FILTER_NATIVERTG, CB_RESETCONTENT, 0, 0L);
- SendDlgItemMessage (hDlg, IDC_FILTER_NATIVERTG, CB_ADDSTRING, 0, (LPARAM)_T("Native"));
- SendDlgItemMessage (hDlg, IDC_FILTER_NATIVERTG, CB_ADDSTRING, 0, (LPARAM)_T("RTG"));
+ WIN32GUI_LoadUIString (IDS_SCREEN_NATIVE, tmp, sizeof tmp / sizeof (TCHAR));
+ SendDlgItemMessage (hDlg, IDC_FILTER_NATIVERTG, CB_ADDSTRING, 0, (LPARAM)tmp);
+ WIN32GUI_LoadUIString (IDS_SCREEN_RTG, tmp, sizeof tmp / sizeof (TCHAR));
+ SendDlgItemMessage (hDlg, IDC_FILTER_NATIVERTG, CB_ADDSTRING, 0, (LPARAM)tmp);
SendDlgItemMessage (hDlg, IDC_FILTERHZMULT, CB_RESETCONTENT, 0, 0L);
SendDlgItemMessage (hDlg, IDC_FILTERVZMULT, CB_RESETCONTENT, 0, 0L);
- restore only single input target to default.
+Beta 1:
+
+- Audio DMA CPU wait hack (that tries to prevent missing samples if program has CPU timed audio DMA wait)
+ improved, now compatible with programs that really need delay after DMA switch off (for example switches
+ DMA off, then clears interrupt request, and then finally waits for audio interrupt).
+- CPU on the fly mode changes were unreliable (2.8.0b15)
+- Fixed some GUI strings that didn't support translation.
+- .ccd CD images didn't automatically load from archive if file was not in archive root.
+- Disk insert after emulation has been started may have internally set disk as write protected even
+ if disk image is write enabled. (broken since GUI "?" button was added)
+- Added DMA channel support to memwatch points. Add DMA channel name (or more than one) at the end of
+ debugger w command line, for example COP, BLT (or BLTA if you only want A channel reads) and so on..
+ No parameter = CPU accesses only.
+- Null filter didn't check display bounds, fixes possible DirectDraw mode crash when display size changes.
+- Directory filesystem ACTION SET FILE SIZE will now fail if target file size is >= 2G. (Prevents accidental
+ truncation if program does not support large files)
+- Added directory filesystem MorphOS compatible 64-bit file size packets: ACTION_SEEK64, ACTION_SET_FILE_SIZE64,
+ ACTION_LOCK_RECORD64, ACTION_FREE_RECORD64, ACTION_EXAMINE_OBJECT64, ACTION_EXAMINE_NEXT64, ACTION_EXAMINE_FH64 and
+ ACTION_EXAMINE_ALL ED_SIZE64. (OS4 packets were implemented long time ago)
+- AGA and reading non-existing or write-only custom registers work differently than on A500, don't use new more
+ A500 compatible method added in 2.8.0 with AGA configurations. (This is far from accurate)
+- Mouse device autoswitching was unreliable if rawinput was not supported or was disabled.
+- If Quickstart mode and sound filter is set to A500 or A1200 emulated or always on: automatically match it with
+ selected config.
+- DMA debugger now shows CPU and DMA 32-bit chip ram accesses, previously data was truncated to 16-bits. 64-bit
+ DMA is stil truncated to 32-bit.
+
2.8.0
- Lowered floppy drive step limit again a bit more, fixes Elektrica / Cascade.
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
- <Product Id="*" Name="WinUAE" Language="1033" Version="2.8.0.0" Manufacturer="Arabuusimiehet" UpgradeCode="88C6D045-E416-4AEA-9EE9-0B7A53EE0F16">
+ <Product Id="*" Name="WinUAE" Language="1033" Version="2.8.1.0" Manufacturer="Arabuusimiehet" UpgradeCode="88C6D045-E416-4AEA-9EE9-0B7A53EE0F16">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<?define SRCDIST="$(var.winuae.ProjectDir)/../../../distribution/"?>