int alg_flag;
+int log_ld;
#define ALG_NVRAM_SIZE 4096
#define ALG_NVRAM_MASK (ALG_NVRAM_SIZE - 1)
sb(0x0a); // ACK
}
-void alg_serial_read(uae_u16 w)
+static void sony_serial_read(uae_u16 w)
{
w &= 0xff;
switch (w)
ld_direction = 0;
pausevideograb(0);
ack();
+ if (log_ld)
+ write_log(_T("LD: PLAY\n"));
break;
case 0x3b: // Fast foward play ';'
ld_mode = LD_MODE_PLAY;
ld_direction = 0;
ld_mode = LD_MODE_STOP;
ack();
+ if (log_ld)
+ write_log(_T("LD: STOP\n"));
break;
case 0x40: // '@'
if (ld_mode == LD_MODE_SEARCH) {
ld_direction = 0;
ack();
sb(0x01); // COMPLETION
+ if (log_ld)
+ write_log(_T("LD: SEARCH %d\n"), ld_value);
}
break;
case 0x4a: // R-PLAY 'J'
pausevideograb(1);
ld_direction = -1;
ack();
+ if (log_ld)
+ write_log(_T("LD: R-PLAY\n"));
break;
case 0x4b: // Fast reverse play 'K'
ld_mode = LD_MODE_PLAY;
pausevideograb(1);
ld_direction = -2;
ack();
+ if (log_ld)
+ write_log(_T("LD: FAST R-PLAY\n"));
break;
case 0x4f: // STILL 'O'
ld_mode = LD_MODE_STILL;
ld_direction = 0;
pausevideograb(1);
ack();
+ if (log_ld)
+ write_log(_T("LD: PAUSE\n"));
break;
case 0x43: // SEARCH 'C'
ack();
ld_direction = 0;
pausevideograb(1);
ld_value = 0;
+ if (log_ld)
+ write_log(_T("LD: SEARCH\n"));
break;
case 0x46: // CH-1 ON 'F'
ack();
ld_audio |= 1;
setvolumevideograb(100 - currprefs.sound_volume_genlock);
+ if (log_ld)
+ write_log(_T("LD: CH-1 ON\n"));
break;
case 0x48: // CH-2 ON 'H'
ack();
ld_audio |= 2;
setvolumevideograb(100 - currprefs.sound_volume_genlock);
+ if (log_ld)
+ write_log(_T("LD: CH-2 ON\n"));
break;
case 0x47: // CH-1 OFF 'G'
ack();
ld_audio &= ~1;
if (!ld_audio)
setvolumevideograb(0);
+ if (log_ld)
+ write_log(_T("LD: CH-1 OFF\n"));
break;
case 0x49: // CH-2 OFF 'I'
ack();
ld_audio &= ~2;
if (!ld_audio)
setvolumevideograb(0);
+ if (log_ld)
+ write_log(_T("LD: CH-2 OFF\n"));
break;
case 0x50: // INDEX ON 'P'
ack();
+ if (log_ld)
+ write_log(_T("LD: INDEX ON\n"));
break;
case 0x51: // INDEX OFF 'O'
ack();
+ if (log_ld)
+ write_log(_T("LD: INDEX OFF\n"));
break;
case 0x60: // ADDR INQ '`'
{
sb(vv);
m /= 10;
}
+ if (log_ld > 1)
+ write_log(_T("LD: ADDR INQ %d\n"), ld_address);
}
break;
case 0x67: // STATUS INQ 'g'
sb(0x40);
sb((ld_mode == LD_MODE_SEARCH ? 0x02 : 0x00));
sb((ld_mode == LD_MODE_PLAY ? 0x01 : 0x00) | (ld_mode == LD_MODE_STILL ? 0x20 : 0x00) | (ld_mode == LD_MODE_STOP ? 0x40 : 0x00) | (ld_direction < 0 ? 0x80 : 0x00));
+ if (log_ld > 1)
+ write_log(_T("LD: STATUS INQ\n"));
break;
}
}
}
}
-int alg_serial_write(void)
+static int sony_serial_write(void)
{
if (ser_buf_offset > 0) {
uae_u16 v = alg_ser_buf[0];
return -1;
}
+static void pioneer_serial_read(uae_u16 w)
+{
+ w &= 0xff;
+}
+static int pioneer_serial_write(void)
+{
+ return -1;
+}
+
+void ld_serial_read(uae_u16 w)
+{
+ if (alg_flag || currprefs.genlock_image == 7) {
+ sony_serial_read(w);
+ } else if (currprefs.genlock_image == 8) {
+ pioneer_serial_read(w);
+ }
+}
+
+int ld_serial_write(void)
+{
+ if (alg_flag || currprefs.genlock_image == 7) {
+ return sony_serial_write();
+ } else if (currprefs.genlock_image == 8) {
+ return pioneer_serial_write();
+ }
+ return -1;
+}
+
/*
Port 1:
return v;
}
-
void alg_map_banks(void)
{
alg_flag = 1;
static void get_extra_channels(int *data1, int *data2, int sample1, int sample2)
{
int d1 = *data1 + sample1;
- int d2 = *data2 + sample2;
+ int d2 = (data2 ? *data2 : 0) + sample2;
if (d1 < -32768)
d1 = -32768;
if (d1 > 32767)
int needswap = currprefs.sound_stereo_swap_paula ^ currprefs.sound_stereo_swap_ahi;
if (needswap) {
*data1 = d2;
- *data2 = d1;
+ if (data2)
+ *data2 = d1;
} else {
*data1 = d1;
- *data2 = d2;
+ if (data2)
+ *data2 = d2;
}
}
return INTREQR () & (0x80 << nr);
}
+static void audio_setirq_event(uae_u32 nr)
+{
+ INTREQ_0 (0x8000 | (0x80 << nr));
+}
+
static void setirq (int nr, int which)
{
#if DEBUG_AUDIO > 0
if (debugchannel (nr) && cdp->wlen > 1)
write_log (_T("SETIRQ%d (%d,%d) PC=%08X\n"), nr, which, isirq (nr) ? 1 : 0, M68K_GETPC);
#endif
- INTREQ_0 (0x8000 | (0x80 << nr));
+ // audio interrupts are delayed by 2 cycles
+ if (currprefs.cpu_memory_cycle_exact) {
+ event2_newevent_xx (-1, 2 * CYCLE_UNIT + CYCLE_UNIT / 2, nr, audio_setirq_event);
+ } else {
+ audio_setirq_event(nr);
+ }
}
static void newsample (int nr, sample8_t sample)
/* smaller values would cause extremely high cpu usage */
per = PERIOD_MIN * CYCLE_UNIT;
}
- if (per < PERIOD_MIN_NONCE * CYCLE_UNIT && !currprefs.cpu_cycle_exact && cdp->dmaenstore) {
+ if (per < PERIOD_MIN_NONCE * CYCLE_UNIT && !currprefs.cpu_memory_cycle_exact && cdp->dmaenstore) {
/* DMAL emulation and low period can cause very very high cpu usage on slow performance PCs
* Only do this hack if audio DMA is active.
*/
static const TCHAR *cdconmodes[] = { _T(""), _T("uae"), _T("ide"), _T("scsi"), _T("cdtv"), _T("cd32"), 0 };
static const TCHAR *specialmonitors[] = { _T("none"), _T("autodetect"), _T("a2024"), _T("graffiti"),
_T("ham_e"), _T("ham_e_plus"), _T("videodac18"), _T("avideo12"), _T("avideo24"), _T("firecracker24"), _T("dctv"), _T("opalvision"), _T("colorburst"), 0 };
-static const TCHAR *genlockmodes[] = { _T("none"), _T("noise"), _T("testcard"), _T("image"), _T("video"), _T("stream"), _T("ld"), NULL };
+static const TCHAR *genlockmodes[] = { _T("none"), _T("noise"), _T("testcard"), _T("image"), _T("video"), _T("stream"), _T("ld"), _T("sony_ld"), _T("pioneer_ld"), NULL };
static const TCHAR *ppc_implementations[] = {
_T("auto"),
_T("dummy"),
_tcscat(tmp, tmpx);
_tcscat(tmp3, tmpx);
}
+ if (ci->lock) {
+ _tcscat(tmp, _T(",lock"));
+ _tcscat(tmp3, _T(",lock"));
+ }
+
if (ci->type == UAEDEV_HDF)
cfgfile_write_str (f, _T("hardfile2"), tmp);
#if 0
getintval(&pflags, &uci.unit_special_flags, 0);
}
+ if (cfgfile_option_find(tmpp2, _T("lock")))
+ uci.lock = true;
+
if (cfgfile_option_find(tmpp2, _T("SCSI2")))
uci.unit_feature_level = HD_LEVEL_SCSI_2;
else if (cfgfile_option_find(tmpp2, _T("SCSI1")))
p->input_tablet = TABLET_OFF;
p->tablet_library = false;
- p->input_mouse_untrap = MOUSEUNTRAP_MIDDLEBUTTON;
+ p->input_mouse_untrap = MOUSEUNTRAP_NONE;
p->input_magic_mouse_cursor = 0;
inputdevice_default_prefs (p);
case 0:
p->blitter_cycle_exact = 1;
p->m68k_speed = 0;
- if (p->cpu_model == 68020 && p->cachesize == 0) {
+ if ((p->cpu_model == 68020 || p->cpu_model == 68030) && p->cachesize == 0) {
p->cpu_cycle_exact = 1;
p->cpu_memory_cycle_exact = 1;
- p->cpu_clock_multiplier = 4 << 8;
+ if (p->cpu_model == 68020)
+ p->cpu_clock_multiplier = 4 << 8;
+ else
+ p->cpu_clock_multiplier = 5 << 8;
}
break;
case 1:
+ p->blitter_cycle_exact = 1;
+ p->m68k_speed = 0;
+ if ((p->cpu_model == 68020 || p->cpu_model == 68030) && p->cachesize == 0) {
+ p->cpu_memory_cycle_exact = 1;
+ if (p->cpu_model == 68020)
+ p->cpu_clock_multiplier = 4 << 8;
+ else
+ p->cpu_clock_multiplier = 5 << 8;
+ }
+ break;
+ case 2:
p->cpu_compatible = true;
p->m68k_speed = 0;
break;
- case 2:
+ case 3:
p->cpu_compatible = 0;
p->m68k_speed = -1;
p->address_space_24 = 0;
break;
- case 3:
+ case 4:
p->cpu_compatible = 0;
p->address_space_24 = 0;
p->cachesize = MAX_JIT_CACHE;
break;
}
+ if (p->cpu_model >= 68030)
+ p->address_space_24 = 0;
}
/* 0: cycle-exact
{
ciaaicr |= 0x40;
#if 1
- if (currprefs.cpu_cycle_exact && !(ciaaicr & 0x20) && (cia_interrupt_disabled & 1)) {
+ if (currprefs.cpu_memory_cycle_exact && !(ciaaicr & 0x20) && (cia_interrupt_disabled & 1)) {
cia_interrupt_delay |= 1;
#if CIAB_DEBUG_IRQ
write_log(_T("ciab interrupt disabled ICR=%02X PC=%x\n"), ciabicr, M68K_GETPC);
{
ciabicr |= 0x40;
#if 1
- if (currprefs.cpu_cycle_exact && !(ciabicr & 0x20) && (cia_interrupt_disabled & 2)) {
+ if (currprefs.cpu_memory_cycle_exact && !(ciabicr & 0x20) && (cia_interrupt_disabled & 2)) {
cia_interrupt_delay |= 2;
#if CIAB_DEBUG_IRQ
write_log(_T("ciab interrupt disabled ICR=%02X PC=%x\n"), ciabicr, M68K_GETPC);
#endif
if (!(ciaaicr & 0x80)) {
ciaaicr |= 0x80;
- if (currprefs.cpu_cycle_exact) {
+ if (currprefs.cpu_memory_cycle_exact) {
event2_newevent_xx (-1, DIV10 + 2 * CYCLE_UNIT + CYCLE_UNIT / 2, 0, ICRA);
} else {
ICRA (0x0008);
#endif
if (!(ciabicr & 0x80)) {
ciabicr |= 0x80;
- if (currprefs.cpu_cycle_exact) {
+ if (currprefs.cpu_memory_cycle_exact) {
event2_newevent_xx (-1, DIV10 + 2 * CYCLE_UNIT + CYCLE_UNIT / 2, 0, ICRB);
} else {
ICRB (0);
return;
#endif
- if (currprefs.cpu_cycle_exact) {
+ if (currprefs.cpu_memory_cycle_exact) {
cia_interrupt_disabled |= cianummask;
}
}
if (cycles) {
- if (currprefs.cpu_cycle_exact)
+ if (currprefs.cpu_memory_cycle_exact)
x_do_cycles_pre (cycles);
else
do_cycles (cycles);
x_do_cycles_post (c, value);
else
do_cycles (c);
- if (currprefs.cpu_cycle_exact) {
+ if (currprefs.cpu_memory_cycle_exact) {
cia_interrupt_disabled &= ~cianummask;
if ((cia_interrupt_delay & cianummask) & 1) {
cia_interrupt_delay &= ~1;
}
}
}
- if (!currprefs.cpu_cycle_exact && cia_interrupt_delay) {
+ if (!currprefs.cpu_memory_cycle_exact && cia_interrupt_delay) {
int v = cia_interrupt_delay;
cia_interrupt_delay = 0;
if (v & 1)
// 1230 MK IV / 1240/60
f0rom_size = 65536;
earom_size = 131072;
- // 12xx = 1x32k
- for (int i = 0; i < 16384; i++) {
+ // 12xx = 1x32k but read full 64k.
+ for (int i = 0; i < 65536 / 2; i++) {
uae_u8 b = 0xff;
- zfile_fread(&b, 1, 1, autoconfig_rom);
+ if (!zfile_fread(&b, 1, 1, autoconfig_rom))
+ break;
blizzardf0_bank.baseaddr[i] = b;
- zfile_fread(&b, 1, 1, autoconfig_rom);
+ if (!zfile_fread(&b, 1, 1, autoconfig_rom))
+ break;
blizzardea_bank.baseaddr[i] = b;
}
zfile_fclose(autoconfig_rom);
{
if (currprefs.mmu_model != 68030)
return;
- if (currprefs.cpu_cycle_exact || currprefs.cpu_compatible) {
+ if (currprefs.cpu_memory_cycle_exact || currprefs.cpu_compatible) {
x_phys_get_iword = get_word_icache030;
x_phys_get_ilong = get_long_icache030;
} else {
}
}
-static void decide_sprites (int hpos, bool usepointx)
+static void decide_sprites(int spnr, int hpos, bool usepointx, bool quick)
{
int nrs[MAX_SPRITES * 2], posns[MAX_SPRITES * 2];
int count, i;
int width = sprite_width;
int sscanmask = 0x100 << sprite_buffer_res;
int gotdata = 0;
+ int startnr = 0, endnr = MAX_SPRITES - 1;
if (thisline_decision.plfleft < 0 && !(bplcon3 & 2))
return;
if (nodraw () || hpos < 0x14 || nr_armed == 0 || point == last_sprite_point)
return;
- decide_diw (hpos);
- decide_line (hpos);
- calcsprite ();
+ if (spnr >= 0) {
+ startnr = spnr;
+ endnr = spnr;
+ }
+ if (!quick) {
+ decide_diw (hpos);
+ decide_line (hpos);
+ calcsprite ();
+ }
count = 0;
- for (i = 0; i < MAX_SPRITES; i++) {
+ for (i = startnr; i <= endnr; i++) {
int xpos = spr[i].xpos;
int sprxp = (fmode & 0x8000) ? (xpos & ~sscanmask) : xpos;
int hw_xp = sprxp >> sprite_buffer_res;
}
#endif
}
-static void decide_sprites(int hpos)
+static void decide_sprites(int spnr, int hpos)
{
- decide_sprites(hpos, false);
+ decide_sprites(spnr, hpos, false, false);
+}
+static void maybe_decide_sprites(int spnr, int hpos)
+{
+ if (!spr[spnr].armed)
+ return;
+ if (!sprdata[spnr] && !sprdatb[spnr])
+ return;
+ decide_sprites(spnr, hpos, true, true);
}
static int sprites_differ (struct draw_info *dip, struct draw_info *dip_old)
if (thisline_decision.plfleft >= 0 && thisline_decision.nr_planes > 0)
record_diw_line (thisline_decision.plfleft, diwfirstword, diwlastword);
- decide_sprites (hpos + 1);
+ decide_sprites(-1, hpos + 1);
dip->last_sprite_entry = next_sprite_entry;
dip->last_color_change = next_color_change;
#endif
if (currprefs.chipset_mask & CSMASK_ECS_DENISE)
return 0xFFFC;
- if (currprefs.cpu_model == 68000 && (currprefs.cpu_compatible || currprefs.cpu_cycle_exact))
+ if (currprefs.cpu_model == 68000 && (currprefs.cpu_compatible || currprefs.cpu_memory_cycle_exact))
*missing = 1;
return 0xFFFF;
}
{
if (!currprefs.genlock)
return false;
- if (currprefs.cpu_cycle_exact || currprefs.m68k_speed >= 0)
+ if (currprefs.cpu_memory_cycle_exact || currprefs.m68k_speed >= 0)
return false;
if (bplcon0 == (0x0100 | 0x0002)) {
return true;
return false;
}
-#define CPU_ACCURATE (currprefs.cpu_model < 68020 || (currprefs.cpu_model == 68020 && currprefs.cpu_cycle_exact))
+#define CPU_ACCURATE (currprefs.cpu_model < 68020 || (currprefs.cpu_model == 68020 && currprefs.cpu_memory_cycle_exact))
// DFF006 = 0.W must be valid result but better do this only in 68000 modes (whdload black screen!)
// HPOS is shifted by 3 cycles and VPOS increases when shifted HPOS==1
write_log (_T("VHPOSW %04X PC=%08x\n"), v, M68K_GETPC);
#endif
- if (currprefs.cpu_cycle_exact && currprefs.cpu_model == 68000) {
+ if (currprefs.cpu_memory_cycle_exact && currprefs.cpu_model == 68000) {
/* Special hack for Smooth Copper in CoolFridge / Upfront demo */
int chp = current_hpos_safe();
int hp = v & 0xff;
#define INT_PROCESSING_DELAY (3 * CYCLE_UNIT)
STATIC_INLINE int use_eventmode (uae_u16 v)
{
- if (currprefs.cpu_cycle_exact && currprefs.cpu_model <= 68020)
+ if (currprefs.cpu_memory_cycle_exact && currprefs.cpu_model <= 68020)
return 1;
return 0;
}
#ifdef ECS_DENISE
if (currprefs.chipset_mask & CSMASK_ECS_DENISE) {
- decide_sprites (hpos);
+ decide_sprites(-1, hpos);
sprres = expand_sprres (v, bplcon3);
}
#endif
if (bplcon3 == v)
return;
decide_line (hpos);
- decide_sprites (hpos);
+ decide_sprites(-1, hpos);
bplcon3 = v;
sprres = expand_sprres (bplcon0, bplcon3);
record_register_change (hpos, 0x106, v);
static void BLTAPTH (int hpos, uae_u16 v)
{
maybe_blit (hpos, 0);
- if (bltstate != BLT_done && currprefs.blitter_cycle_exact && currprefs.cpu_cycle_exact) {
+ if (bltstate != BLT_done && currprefs.blitter_cycle_exact && currprefs.cpu_memory_cycle_exact) {
bltptx = (bltapt & 0xffff) | ((uae_u32)v << 16);
bltptxpos = hpos;
bltptxc = 1;
static void BLTAPTL (int hpos, uae_u16 v)
{
maybe_blit (hpos, 0);
- if (bltstate != BLT_done && currprefs.blitter_cycle_exact && currprefs.cpu_cycle_exact) {
+ if (bltstate != BLT_done && currprefs.blitter_cycle_exact && currprefs.cpu_memory_cycle_exact) {
bltptx = (bltapt & ~0xffff) | (v & 0xFFFE);
bltptxpos = hpos;
bltptxc = 1;
static void BLTBPTH (int hpos, uae_u16 v)
{
maybe_blit (hpos, 0);
- if (bltstate != BLT_done && currprefs.blitter_cycle_exact && currprefs.cpu_cycle_exact) {
+ if (bltstate != BLT_done && currprefs.blitter_cycle_exact && currprefs.cpu_memory_cycle_exact) {
bltptx = (bltbpt & 0xffff) | ((uae_u32)v << 16);
bltptxpos = hpos;
bltptxc = 2;
static void BLTBPTL (int hpos, uae_u16 v)
{
maybe_blit (hpos, 0);
- if (bltstate != BLT_done && currprefs.blitter_cycle_exact && currprefs.cpu_cycle_exact) {
+ if (bltstate != BLT_done && currprefs.blitter_cycle_exact && currprefs.cpu_memory_cycle_exact) {
bltptx = (bltbpt & ~0xffff) | (v & 0xFFFE);
bltptxpos = hpos;
bltptxc = 2;
static void BLTCPTH (int hpos, uae_u16 v)
{
maybe_blit (hpos, 0);
- if (bltstate != BLT_done && currprefs.blitter_cycle_exact && currprefs.cpu_cycle_exact) {
+ if (bltstate != BLT_done && currprefs.blitter_cycle_exact && currprefs.cpu_memory_cycle_exact) {
bltptx = (bltcpt & 0xffff) | ((uae_u32)v << 16);
bltptxpos = hpos;
bltptxc = 3;
static void BLTCPTL (int hpos, uae_u16 v)
{
maybe_blit (hpos, 0);
- if (bltstate != BLT_done && currprefs.blitter_cycle_exact && currprefs.cpu_cycle_exact) {
+ if (bltstate != BLT_done && currprefs.blitter_cycle_exact && currprefs.cpu_memory_cycle_exact) {
bltptx = (bltcpt & ~0xffff) | (v & 0xFFFE);
bltptxpos = hpos;
bltptxc = 3;
static void BLTDPTH (int hpos, uae_u16 v)
{
maybe_blit (hpos, 0);
- if (bltstate != BLT_done && currprefs.blitter_cycle_exact && currprefs.cpu_cycle_exact) {
+ if (bltstate != BLT_done && currprefs.blitter_cycle_exact && currprefs.cpu_memory_cycle_exact) {
bltptx = (bltdpt & 0xffff) | ((uae_u32)v << 16);
bltptxpos = hpos;
bltptxc = 4;
static void BLTDPTL (int hpos, uae_u16 v)
{
maybe_blit (hpos, 0);
- if (bltstate != BLT_done && currprefs.blitter_cycle_exact && currprefs.cpu_cycle_exact) {
+ if (bltstate != BLT_done && currprefs.blitter_cycle_exact && currprefs.cpu_memory_cycle_exact) {
bltptx = (bltdpt & ~0xffff) | (v & 0xFFFE);
bltptxpos = hpos;
bltptxc = 4;
static void SPRxDATA (int hpos, uae_u16 v, int num)
{
- decide_sprites(hpos, true);
+ decide_sprites(-1, hpos, true, false);
SPRxDATA_1(v, num, hpos);
}
static void SPRxDATB (int hpos, uae_u16 v, int num)
{
- decide_sprites(hpos, true);
+ decide_sprites(-1, hpos, true, false);
SPRxDATB_1(v, num, hpos);
}
}
#endif
- decide_sprites(hpos);
+ decide_sprites(-1, hpos);
SPRxCTL_1(v, num, hpos);
}
static void SPRxPOS (int hpos, uae_u16 v, int num)
write_log(_T("%d:%d:SPR%dPOSC %06X\n"), vpos, hpos, num, s->pt);
}
#endif
- decide_sprites(hpos);
+ decide_sprites(-1, hpos);
oldvpos = s->vstart;
SPRxPOS_1(v, num, hpos);
// Superfrog flashing intro bees fix.
static void SPRxPTH (int hpos, uae_u16 v, int num)
{
- decide_sprites (hpos);
+ decide_sprites(-1, hpos);
if (hpos - 1 != spr[num].ptxhpos) {
spr[num].pt &= 0xffff;
spr[num].pt |= (uae_u32)v << 16;
}
static void SPRxPTL (int hpos, uae_u16 v, int num)
{
- decide_sprites (hpos);
+ decide_sprites(-1, hpos);
if (hpos - 1 != spr[num].ptxhpos) {
spr[num].pt &= ~0xffff;
spr[num].pt |= v & ~1;
{
uae_u16 data = last_custom_value1;
if (dma) {
- if (cycle && currprefs.cpu_cycle_exact)
+ if (cycle && currprefs.cpu_memory_cycle_exact)
s->ptxhpos = hpos;
data = last_custom_value1 = chipmem_wget_indirect (s->pt);
alloc_cycle (hpos, CYCLE_SPRITE);
static void do_sprites_1(int num, int cycle, int hpos)
{
struct sprite *s = &spr[num];
- int dma, posctl = 0;
+ int posctl = 0;
uae_u16 data;
// fetch both sprite pairs even if DMA was switched off between sprites
int isdma = dmaen (DMA_SPRITE) || ((num & 1) && spr[num & ~1].dmacycle);
if (!isdma)
return;
- dma = hpos < plfstrt_sprite || diwstate != DIW_waiting_stop;
+ int dma = hpos < plfstrt_sprite || diwstate != DIW_waiting_stop;
+ int sprxp = s->xpos >> (sprite_buffer_res + 1);
+ bool start_before_dma = hpos >= sprxp && sprxp >= 16;
if (vpos == s->vstop || vpos == sprite_vblank_endline) {
s->dmastate = 0;
posctl = 1;
}
//write_log (_T("%d:%d: %04X=%04X\n"), vpos, hpos, 0x140 + cycle * 2 + num * 8, data);
if (cycle == 0) {
+ if (start_before_dma && s->armed) {
+ maybe_decide_sprites(num, hpos);
+ }
SPRxPOS_1 (data, num, hpos);
s->dmacycle = 1;
} else {
#endif
}
if (s->dmastate && !posctl && dma) {
- uae_u16 data;
-
- data = sprite_fetch (s, dma, hpos, cycle, 1);
+ uae_u16 data = sprite_fetch (s, dma, hpos, cycle, 1);
#if SPRITE_DEBUG >= 256
if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY && (SPRITE_DEBUG & (1 << num))) {
write_log (_T("%d:%d:dma:P=%06X "), vpos, hpos, s->pt);
}
#endif
if (cycle == 0) {
+ // if xpos is earlier than this cycle, decide it first.
+ if (start_before_dma) {
+ maybe_decide_sprites(num, hpos);
+ }
SPRxDATA_1 (data, num, hpos);
s->dmacycle = 1;
} else {
+ // This is needed if xpos is between DATA and DATB fetches
+ // Test does not need to be accurate, only purpose is to
+ // not lose performance when sprites have "normal" positioning.
+ if (start_before_dma) {
+ maybe_decide_sprites(num, hpos);
+ }
SPRxDATB_1 (data, num, hpos);
- spr_arm (num, 1);
}
#ifdef AGA
switch (sprite_width)
{
if (!dmal)
return;
- if (currprefs.cpu_cycle_exact) {
+ if (currprefs.cpu_memory_cycle_exact) {
while (dmal) {
if (dmal & 3)
break;
if (!dmal)
return;
dmal_hpos = 0;
- if (currprefs.cpu_cycle_exact) {
+ if (currprefs.cpu_memory_cycle_exact) {
for (int i = 0; i < 6 + 8; i += 2) {
if (dmal & (3 << i)) {
alloc_cycle_ext (i + 7, CYCLE_MISC);
if (debug_dma)
dr->dat = v;
#endif
- if (currprefs.cpu_model == 68020)
- x_do_cycles_post (CYCLE_UNIT / 2, v);
+
+ x_do_cycles_post (CYCLE_UNIT, v);
regs.chipset_latch_rw = regs.chipset_latch_read = v;
SETIFCHIP
else if (mode == 0)
put_byte (addr, v);
- if (currprefs.cpu_model == 68020)
- x_do_cycles_post (CYCLE_UNIT / 2, v);
+ x_do_cycles_post (CYCLE_UNIT, v);
regs.chipset_latch_rw = regs.chipset_latch_write = v;
SETIFCHIP
int tr = drv->cyl * 2 + side;
trackid *ti = drv->trackdata + tr;
+ if (drv->dskchange_time == -1) {
+ drv->dskchange_time = -2;
+ write_log(_T("Accessing state restored non-existing disk '%s'!\n"), drv->newname);
+ if (gui_ask_disk(dr, drv->newname)) {
+ if (drive_insert(drv, &currprefs, dr, drv->newname, false, false)) {
+ write_log(_T("Replacement disk '%s' inserted.\n"), drv->newname);
+ drv->dskready_up_time = 0;
+ drv->dskchange_time = 0;
+ }
+ }
+ }
+
if (dskdmaen == DSKDMA_WRITE) {
word = 0;
drv->tracklen = longwritemode ? FLOPPY_WRITE_MAXLEN : FLOPPY_WRITE_LEN * drv->ddhd * 8 * 2;
drv->dskchange = true;
} else {
drv->dskchange_time = -1;
+ _tcscpy(drv->newname, changed_prefs.floppyslots[num].df);
+ write_log(_T("Disk image not found, faking inserted disk.\n"));
}
}
}
if (framecnt == 0)
init_drawing_frame ();
- else if (currprefs.cpu_cycle_exact)
+ else if (currprefs.cpu_memory_cycle_exact)
init_hardware_for_drawing_frame ();
} else {
if (isvsync_chipset ())
false, 0, NULL,
{ 0x80, 2, 0x10, 0x00, 6502 >> 8, 6502 & 255, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
},
+#if 0
+ {
+ _T("pmx"), _T("pmx"), NULL,
+ pmx_init, NULL, NULL, ROMTYPE_PMX | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true,
+ NULL, 0,
+ false, EXPANSIONTYPE_SOUND,
+ 0, 0, 0, false, NULL,
+ false, 0, NULL,
+ { 0xc1, 0x30, 0x00, 0x00, 0x0e, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
+ },
+#endif
/* Network */
{
NULL
}
};
+
static const struct expansionboardsettings ivsvector_settings[] = {
{
// 0/1
}
};
+static const struct expansionboardsettings apollo_settings[] = {
+ {
+ _T("SCSI module installed"),
+ _T("scsi")
+ },
+ {
+ NULL
+ }
+};
+
static const struct cpuboardsubtype apollo_sub[] = {
{
_T("Apollo 1240/1260"),
BOARD_MEMORY_HIGHMEM,
128 * 1024 * 1024,
0,
- apollo_init_cpu, NULL, 2, 0
+ apollo_init_cpu, NULL, 2, 0,
+ apollo_settings
},
{
NULL
entry = FPP_CR_1E4096;
break;
default: // undefined, return 0.0
- write_log (_T("Undocumented FPU constant access (index %02x\n"), entry);
+ write_log (_T("Undocumented FPU constant access (index %02x)\n"), cr);
valid = false;
entry = FPP_CR_ZERO;
break;
static const char *dstblrmw, *dstwlrmw, *dstllrmw;
static const char *srcbrmw, *srcwrmw, *srclrmw;
static const char *dstbrmw, *dstwrmw, *dstlrmw;
-static const char *prefetch_long, *prefetch_word;
+static const char *prefetch_long, *prefetch_word, *prefetch_opcode;
static const char *srcli, *srcwi, *srcbi, *nextl, *nextw;
static const char *srcld, *dstld;
static const char *srcwd, *dstwd;
{
if (!isprefetch020() || no_prefetch_ce020)
return;
- printf ("\tregs.irc = %s (%d);\n", prefetch_word, m68k_pc_offset);
+ printf ("\tregs.irc = %s (%d);\n", prefetch_opcode, m68k_pc_offset);
}
static void get_prefetch_020_continue(void)
{
if (!isprefetch020())
return;
- if (using_ce020)
- printf("\tcontinue_ce020_prefetch();\n");
- else
- printf ("\tcontinue_020_prefetch();\n");
+ if (using_ce020) {
+ if (using_ce020 > 1)
+ printf("\tcontinue_ce030_prefetch();\n");
+ else
+ printf("\tcontinue_ce020_prefetch();\n");
+ } else {
+ if (using_prefetch_020 > 1)
+ printf ("\tcontinue_030_prefetch();\n");
+ else
+ printf ("\tcontinue_020_prefetch();\n");
+ }
}
static void returntail (bool iswrite)
if (total_ce020 > 0)
addcycles_ce020 (total_ce020);
- //printf ("\tregs.irc = %s;\n", prefetch_word);
+ //printf ("\tregs.irc = %s;\n", prefetch_opcode);
if (0 && total_ce020 >= 2) {
printf ("\top_cycles = get_cycles () - op_cycles;\n");
printf ("\top_cycles /= cpucycleunit;\n");
}
if (1) {
if (h > 0) {
- printf ("\tif (regs.ce020memcycles > %d * cpucycleunit)\n", h);
- printf ("\t\tregs.ce020memcycles = %d * cpucycleunit;\n", h);
+ printf ("\tlimit_cycles_ce020(%d);\n", h);
} else {
- printf ("\tregs.ce020memcycles = 0;\n");
+ printf ("\tlimit_all_cycles_ce020();\n");
}
}
}
if (h < 0)
h = 0;
- //c = 0;
+ c = 0; // HACK
// c = internal cycles needed after head cycles and before tail cycles. Not total cycles.
addcycles_ce020 ("op", h, t, c - h - t, -subhead);
c = c - h - t;
- //c = 0;
+ c = 0; // HACK
if (!oph) {
printf ("\t/* ea H:%d,T:%d,C:%d %s */\n", h, t, c, ea);
}
if (h) {
- printf ("\tif (regs.ce020memcycles > %d * cpucycleunit)\n", h);
- printf ("\t\tregs.ce020memcycles = %d * cpucycleunit;\n", h);
+ printf ("\tlimit_cycles_ce020(%d);\n", h);
} else {
- printf ("\tregs.ce020memcycles = 0;\n");
+ printf ("\tlimit_all_cycles_ce020();\n");
}
if (1 && c > 0) {
got_ea_ce020 = false;
prefetch_long = NULL;
+ prefetch_opcode = NULL;
srcli = NULL;
srcbi = NULL;
disp000 = "get_disp_ea_000";
disp020 = "x_get_disp_ea_ce020";
prefetch_word = "get_word_ce020_prefetch";
prefetch_long = "get_long_ce020_prefetch";
+ prefetch_opcode = "get_word_ce020_prefetch_opcode";
srcli = "x_get_ilong";
srcwi = "x_get_iword";
srcbi = "x_get_ibyte";
disp020 = "x_get_disp_ea_ce030";
prefetch_long = "get_long_ce030_prefetch";
prefetch_word = "get_word_ce030_prefetch";
+ prefetch_opcode = "get_word_ce030_prefetch_opcode";
srcli = "x_get_ilong";
srcwi = "x_get_iword";
srcbi = "x_get_ibyte";
dstwlrmw = dstw;
dstllrmw = dstl;
}
+ if (!prefetch_opcode)
+ prefetch_opcode = prefetch_word;
}
sync_m68k_pc ();
} else {
+
int prefetch_done = 0, flags;
int dualprefetch = curi->dmode == absl && (curi->smode != Dreg && curi->smode != Areg && curi->smode != imm);
+
genamode (curi, curi->smode, "srcreg", curi->size, "src", 1, 0, 0);
flags = GF_MOVE | GF_APDI;
//if (curi->size == sz_long && (curi->smode == Dreg || curi->smode == Areg))
v = board->rom[(addr - APOLLO_ROM_OFFSET) & board->rom_mask];
} else if (board->configured) {
if ((addr & 0xc000) == 0x4000) {
- v = apollo_scsi_bget(oaddr);
+ v = apollo_scsi_bget(oaddr, board->userdata);
} else if (addr < 0x4000) {
int regnum = get_apollo_reg(addr, board);
if (regnum >= 0) {
} else if (board->type == APOLLO_IDE) {
if ((addr & 0xc000) == 0x4000) {
- v = apollo_scsi_bget(addr);
+ v = apollo_scsi_bget(addr, board->userdata);
v <<= 8;
- v |= apollo_scsi_bget(addr + 1);
+ v |= apollo_scsi_bget(addr + 1, board->userdata);
} else if (addr < 0x4000) {
int regnum = get_apollo_reg(addr, board);
if (regnum == IDE_DATA) {
} else if (board->type == APOLLO_IDE) {
if ((addr & 0xc000) == 0x4000) {
- apollo_scsi_bput(oaddr, v);
+ apollo_scsi_bput(oaddr, v, board->userdata);
} else if (addr < 0x4000) {
int regnum = get_apollo_reg(addr, board);
if (regnum >= 0) {
} else if (board->type == APOLLO_IDE) {
if ((addr & 0xc000) == 0x4000) {
- apollo_scsi_bput(addr, v >> 8);
- apollo_scsi_bput(addr + 1, v);
+ apollo_scsi_bput(addr, v >> 8, board->userdata);
+ apollo_scsi_bput(addr + 1, v, board->userdata);
} else if (addr < 0x4000) {
int regnum = get_apollo_reg(addr, board);
if (regnum == IDE_DATA) {
if (!ide)
return false;
+ if (cpuboard) {
+ ide->userdata = currprefs.cpuboard_settings & 3;
+ } else {
+ ide->userdata = aci->rc->autoboot_disabled ? 2 : 0;
+ }
+
ide->configured = 0;
ide->bank = &ide_bank_generic;
ide->rom_size = 32768;
extern int alg_flag;
extern void alg_map_banks(void);
-extern void alg_serial_read(uae_u16 v);
-extern int alg_serial_write(void);
extern bool alg_ld_active(void);
extern uae_u16 alg_potgor(uae_u16);
extern uae_u16 alg_joydat(int, uae_u16);
extern uae_u8 alg_joystick_buttons(uae_u8, uae_u8, uae_u8);
+extern void ld_serial_read(uae_u16 v);
+extern int ld_serial_write(void);
+
#endif /* ARCADIA */
#endif /* UAE_ARCADIA_H */
#ifdef CPUEMU_21
-#define CE020_INITCYCLES() \
- int head = 0, tail = 0, cycles = 0; \
- unsigned int cu = get_cycles ();
-#define CE020_SAVECYCLES(h,t,c) \
- head = h; tail = t; cycles = c;
-#define CE020_COUNTCYCLES()
+STATIC_INLINE void limit_cycles_ce020(int clocks)
+{
+ int cycs = clocks * cpucycleunit;
+ int diff = regs.ce020endcycle - regs.ce020startcycle;
+ if (diff <= cycs)
+ return;
+ regs.ce020startcycle = regs.ce020endcycle - cycs;
+}
+
+STATIC_INLINE void limit_all_cycles_ce020(void)
+{
+ regs.ce020startcycle = regs.ce020endcycle;
+}
// only for CPU internal cycles
STATIC_INLINE void do_cycles_ce020_internal(int clocks)
return;
}
int cycs = clocks * cpucycleunit;
+ int diff = regs.ce020endcycle - regs.ce020startcycle;
+ if (diff > 0) {
+ if (diff >= cycs) {
+ regs.ce020startcycle += cycs;
+ return;
+ }
+ regs.ce020startcycle = regs.ce020endcycle;
+ cycs -= diff;
+ }
+#if 0
if (regs.ce020memcycles > 0) {
if (regs.ce020memcycles >= cycs) {
regs.ce020memcycles -= cycs;
cycs = cycs - regs.ce020memcycles;
}
regs.ce020memcycles = 0;
+#endif
x_do_cycles (cycs);
}
extern void continue_ce020_prefetch(void);
extern uae_u32 get_word_ce020_prefetch(int);
+extern uae_u32 get_word_ce020_prefetch_opcode(int);
STATIC_INLINE uae_u32 get_long_ce020_prefetch (int o)
{
#ifdef CPUEMU_22
+extern void continue_030_prefetch(void);
extern uae_u32 get_word_030_prefetch(int);
STATIC_INLINE void put_long_030(uaecptr addr, uae_u32 v)
#ifdef CPUEMU_23
+extern void continue_ce030_prefetch(void);
extern uae_u32 get_word_ce030_prefetch(int);
+extern uae_u32 get_word_ce030_prefetch_opcode(int);
STATIC_INLINE void put_long_ce030 (uaecptr addr, uae_u32 v)
{
extern int disk_prevnext (int drive, int dir);
extern int disk_prevnext_name (TCHAR *img, int dir);
+extern bool gui_ask_disk(int drv, TCHAR*);
+
extern void DSKLEN (uae_u16 v, int hpos);
extern uae_u16 DSKBYTR (int hpos);
extern void DSKSYNC (int, uae_u16);
extern void inputdevice_set_device_status (int devnum, int enabled);
extern int inputdevice_get_device_total (int type);
extern int inputdevice_get_widget_num (int devnum);
-extern int inputdevice_get_widget_type (int devnum, int num, TCHAR *name);
+extern int inputdevice_get_widget_type (int devnum, int num, TCHAR *name, bool inccode);
extern int send_input_event (int nr, int state, int max, int autofire);
extern int input_get_default_mouse (struct uae_input_device *uid, int num, int port, int af, bool gp, bool wheel, bool joymouseswap);
int pipeline_pos;
int pipeline_r8[2];
int pipeline_stop;
- int ce020memcycles;
+
+ int ce020endcycle;
+ int ce020startcycle;
+ int ce020prefetchendcycle;
+
int ce020extracycles;
bool ce020memcycle_data;
int ce020_tail;
#define UAEMAJOR 3
#define UAEMINOR 4
-#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;
TCHAR volname[MAX_DPATH];
TCHAR rootdir[MAX_DPATH];
bool readonly;
+ bool lock;
int bootpri;
TCHAR filesys[MAX_DPATH];
int lowcyl;
#define ROMTYPE_ARIADNE 0x0010005d
#define ROMTYPE_HARDFRAME 0x0010005e
#define ROMTYPE_ATEAM 0x0010005f
+#define ROMTYPE_PMX 0x00100060
#define ROMTYPE_NOT 0x00800000
#define ROMTYPE_QUAD 0x01000000
void ncr80_rethink(void);
-void apollo_scsi_bput(uaecptr addr, uae_u8 v);
-uae_u8 apollo_scsi_bget(uaecptr addr);
+void apollo_scsi_bput(uaecptr addr, uae_u8 v, uae_u32 config);
+uae_u8 apollo_scsi_bget(uaecptr addr, uae_u32 config);
void apollo_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc);
void ivsvector_scsi_bput(uaecptr addr, uae_u8 v);
void uaesndboard_free(void);
void uaesndboard_reset(void);
+bool pmx_init(struct autoconfig_info *aci);
+void pmx_free(void);
+void pmx_reset(void);
#endif /* UAE_SNDBOARD_H */
uae_u32 readonlysize;
bool maprom;
bool directsupport;
+ bool hasbarrier;
};
bool uae_mman_info(addrbank *ab, struct uae_mman_data *md);
#define INPUT_MATCH_CONFIG_NAME_ONLY 1
#define INPUT_MATCH_FRIENDLY_NAME_ONLY 2
#define INPUT_MATCH_BOTH 4
+#define INPUT_MATCH_ALL 7
static struct uae_input_device2 joysticks2[MAX_INPUT_DEVICES];
static struct uae_input_device2 mice2[MAX_INPUT_DEVICES];
if (outname[0] != 0)
_tcscat(outname, _T(", "));
const TCHAR *ps = ie->shortname ? ie->shortname : ie->name;
- if (inputdevice_get_widget_type(devnum, num, tmp)) {
+ if (inputdevice_get_widget_type(devnum, num, tmp, false)) {
if (tmp[0]) {
_tcscat(outname, tmp);
_tcscat(outname, _T("="));
prefs->internalevent_settings[0]->enabled = true;
}
-static void matchdevices(struct uae_prefs *p, struct inputdevice_functions *inf, struct uae_input_device *uid)
+static void matchdevices(struct uae_prefs *p, struct inputdevice_functions *inf, struct uae_input_device *uid, int match_mask)
{
int i, j;
if (fullmatch) {
if (!bname1 || aname1)
continue;
- if (!(p->input_device_match_mask & INPUT_MATCH_BOTH))
+ if (!(match_mask & INPUT_MATCH_BOTH))
continue;
} else {
- if (!(p->input_device_match_mask & INPUT_MATCH_CONFIG_NAME_ONLY))
+ if (!(match_mask & INPUT_MATCH_CONFIG_NAME_ONLY))
continue;
}
if (match == -2) {
for (j = 0; j < MAX_INPUT_DEVICES; j++) {
TCHAR *bname2 = uid[j].configname;
- if (aname2 && bname2 && (p->input_device_match_mask & INPUT_MATCH_CONFIG_NAME_ONLY) && !_tcscmp (aname2, bname2)) {
+ if (aname2 && bname2 && (match_mask & INPUT_MATCH_CONFIG_NAME_ONLY) && !_tcscmp (aname2, bname2)) {
match = j;
break;
}
// no match, try friendly names only
for (j = 0; j < MAX_INPUT_DEVICES; j++) {
TCHAR *bname1 = uid[j].name;
- if (aname1 && bname1 && (p->input_device_match_mask & INPUT_MATCH_FRIENDLY_NAME_ONLY) && !_tcscmp (aname1, bname1)) {
+ if (aname1 && bname1 && (match_mask & INPUT_MATCH_FRIENDLY_NAME_ONLY) && !_tcscmp (aname1, bname1)) {
match = j;
break;
}
{
int i;
for (i = 0; i < MAX_INPUT_SETTINGS; i++) {
- matchdevices(prefs, &idev[IDTYPE_MOUSE], prefs->mouse_settings[i]);
- matchdevices(prefs, &idev[IDTYPE_JOYSTICK], prefs->joystick_settings[i]);
- matchdevices(prefs, &idev[IDTYPE_KEYBOARD], prefs->keyboard_settings[i]);
+ matchdevices(prefs, &idev[IDTYPE_MOUSE], prefs->mouse_settings[i], prefs->input_device_match_mask);
+ matchdevices(prefs, &idev[IDTYPE_JOYSTICK], prefs->joystick_settings[i], prefs->input_device_match_mask);
+ matchdevices(prefs, &idev[IDTYPE_KEYBOARD], prefs->keyboard_settings[i], INPUT_MATCH_ALL);
}
}
keyboards = prefs->keyboard_settings[input_selected_setting];
sub = 0;
- if (inputdevice_get_widget_type (devnum, num, NULL) != IDEV_WIDGET_KEY) {
+ if (inputdevice_get_widget_type (devnum, num, NULL, false) != IDEV_WIDGET_KEY) {
for (sub = 0; sub < MAX_INPUT_SUB_EVENT; sub++) {
int port2 = 0;
int evt = inputdevice_get_mapping (devnum, num, NULL, &port2, NULL, NULL, sub);
idev[IDTYPE_JOYSTICK].init ();
idev[IDTYPE_MOUSE].init ();
idev[IDTYPE_KEYBOARD].init ();
- matchdevices (prefs, &idev[IDTYPE_MOUSE], mice);
- matchdevices (prefs, &idev[IDTYPE_JOYSTICK], joysticks);
- matchdevices (prefs, &idev[IDTYPE_KEYBOARD], keyboards);
+ matchdevices (prefs, &idev[IDTYPE_MOUSE], mice, prefs->input_device_match_mask);
+ matchdevices (prefs, &idev[IDTYPE_JOYSTICK], joysticks, prefs->input_device_match_mask);
+ matchdevices (prefs, &idev[IDTYPE_KEYBOARD], keyboards, INPUT_MATCH_ALL);
// find out which one was removed or inserted
for (int j = 0; j <= IDTYPE_KEYBOARD; j++) {
return 0;
}
-int inputdevice_get_widget_type (int devnum, int num, TCHAR *name)
+int inputdevice_get_widget_type (int devnum, int num, TCHAR *name, bool inccode)
{
+ uae_u32 code = 0;
const struct inputdevice_functions *idf = getidf (devnum);
- return idf->get_widget_type (inputdevice_get_device_index (devnum), num, name, 0);
+ int r = idf->get_widget_type (inputdevice_get_device_index (devnum), num, name, &code);
+ if (r && inccode && &idev[IDTYPE_KEYBOARD] == idf) {
+ TCHAR *p = name + _tcslen(name);
+ if (_tcsncmp(name, _T("KEY_"), 4))
+ _stprintf(p, _T(" [0x%02X]"), code);
+ }
+ return r;
}
static int config_change;
currprefs.turbo_emulation = fr;
}
if (currprefs.turbo_emulation) {
- if (!currprefs.cpu_cycle_exact && !currprefs.blitter_cycle_exact)
+ if (!currprefs.cpu_memory_cycle_exact && !currprefs.blitter_cycle_exact)
changed_prefs.gfx_framerate = currprefs.gfx_framerate = 10;
pause_sound ();
} else {
error_log (_T("JIT is not compatible with unimplemented CPU/FPU instruction emulation."));
p->fpu_no_unimplemented = p->int_no_unimplemented = false;
}
+ if (p->cachesize && p->compfpu && p->fpu_softfloat) {
+ error_log (_T("JIT FPU emulation is not compatible with softfloat FPU emulation."));
+ p->fpu_softfloat = false;
+ }
#if 0
if (p->cpu_cycle_exact && p->m68k_speed < 0 && currprefs.cpu_model <= 68020)
p->uaeserial = 0;
#endif
#if defined (CPUEMU_13)
- if (p->cpu_cycle_exact) {
+ if (p->cpu_memory_cycle_exact) {
if (p->gfx_framerate > 1) {
error_log (_T("Cycle-exact requires disabled frameskip."));
p->gfx_framerate = 1;
return true;
}
ab->baseaddr = xcalloc (uae_u8, ab->reserved_size + 4);
- if (ab->baseaddr)
+ if (ab->baseaddr) {
+ // fill end of ram with ILLEGAL to catch direct PC falling out of RAM.
+ put_long_host(ab->baseaddr + ab->reserved_size, 0x4afc4afc);
ab->allocated_size = ab->reserved_size;
+ }
#if MAPPED_MALLOC_DEBUG
write_log(_T("mapped_malloc nodirect %s %p\n"), ab->name, ab->baseaddr);
#endif
x->next->prev = x;
shm_start = x;
ab->baseaddr = x->native_address;
- if (ab->baseaddr)
+ if (ab->baseaddr) {
+ if (md.hasbarrier) {
+ // fill end of ram with ILLEGAL to catch direct PC falling out of RAM.
+ put_long_host(ab->baseaddr + ab->reserved_size, 0x4afc4afc);
+ }
ab->allocated_size = ab->reserved_size;
+ }
ab->flags |= ABFLAG_DIRECTMAP;
#if MAPPED_MALLOC_DEBUG
write_log(_T("mapped_malloc direct %s %p\n"), ab->name, ab->baseaddr);
map_banks (&chipmem_dummy_bank, start, dummy, 0);
}
} else {
- map_banks(cb, 0, 32, chipmem_bank.allocated_size);
+ int mapsize = 32;
+ if ((chipmem_bank.allocated_size >> 16) > mapsize)
+ mapsize = chipmem_bank.allocated_size >> 16;
+ map_banks(cb, 0, mapsize, chipmem_bank.allocated_size);
}
} else {
map_banks (cb, 0, chipmem_bank.allocated_size >> 16, 0);
#include "inputrecord.h"
#include "inputdevice.h"
#include "audio.h"
-#include "md-fpp.h"
+#include "fpp.h"
#include "statusline.h"
#include "uae/ppc.h"
#include "cpuboard.h"
cpucycleunit /= 2;
} else if (currprefs.cpu_frequency) {
cpucycleunit = CYCLE_UNIT * baseclock / currprefs.cpu_frequency;
- } else if (currprefs.cpu_cycle_exact && currprefs.cpu_clock_multiplier == 0) {
+ } else if (currprefs.cpu_memory_cycle_exact && currprefs.cpu_clock_multiplier == 0) {
if (currprefs.cpu_model >= 68040) {
cpucycleunit = CYCLE_UNIT / 16;
} if (currprefs.cpu_model == 68030) {
|| 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
- || currprefs.cpu_memory_cycle_exact != changed_prefs.cpu_memory_cycle_exact) {
+ || currprefs.cpu_memory_cycle_exact != changed_prefs.cpu_memory_cycle_exact
+ || currprefs.fpu_softfloat != changed_prefs.fpu_softfloat) {
cpu_prefs_changed_flag |= 1;
}
if (changed
case sz_single:
{
fpdata fp;
- to_single(&fp, get_ilong_debug(pc));
- _stprintf(buffer, _T("#%s"), fp_print(&fp));
+ fpp_to_single(&fp, get_ilong_debug(pc));
+ _stprintf(buffer, _T("#%s"), fpp_print(&fp));
pc += 4;
}
break;
case sz_double:
{
fpdata fp;
- to_double(&fp, get_ilong_debug(pc), get_ilong_debug(pc + 4));
- _stprintf(buffer, _T("#%s"), fp_print(&fp));
+ fpp_to_double(&fp, get_ilong_debug(pc), get_ilong_debug(pc + 4));
+ _stprintf(buffer, _T("#%s"), fpp_print(&fp));
pc += 8;
}
break;
case sz_extended:
{
fpdata fp;
- to_exten(&fp, get_ilong_debug(pc), get_ilong_debug(pc + 4), get_ilong_debug(pc + 8));
- _stprintf(buffer, _T("#%s"), fp_print(&fp));
+ fpp_to_exten(&fp, get_ilong_debug(pc), get_ilong_debug(pc + 4), get_ilong_debug(pc + 8));
+ _stprintf(buffer, _T("#%s"), fpp_print(&fp));
pc += 12;
break;
}
ExceptionX (nr, address);
}
+static void bus_error(void)
+{
+ TRY (prb2) {
+ Exception (2);
+ } CATCH (prb2) {
+ cpu_halt (CPU_HALT_BUS_ERROR_DOUBLE_FAULT);
+ } ENDTRY
+}
+
static void do_interrupt (int nr)
{
if (debug_dma)
if (kickstart_rom)
regs.pcr |= 2; /* disable FPU */
}
- regs.ce020memcycles = 0;
+// regs.ce020memcycles = 0;
+ regs.ce020startcycle = regs.ce020endcycle = 0;
fill_prefetch ();
}
int inrom = in_rom (pc);
int inrt = in_rtarea (pc);
+ if ((opcode == 0x4afc || opcode == 0xfc4a) && !valid_address(pc, 4) && valid_address(pc - 4, 4)) {
+ // PC fell off the end of RAM
+ bus_error();
+ return 4;
+ }
+
if (cloanto_rom && (opcode & 0xF100) == 0x7100) {
m68k_dreg (regs, (opcode >> 9) & 7) = (uae_s8)(opcode & 0xFF);
m68k_incpc_normal (2);
#endif
-static void bus_error(void)
-{
- TRY (prb2) {
- Exception (2);
- } CATCH (prb2) {
- cpu_halt (CPU_HALT_BUS_ERROR_DOUBLE_FAULT);
- } ENDTRY
-}
-
#ifndef CPUEMU_11
static void m68k_run_1 (void)
inprec_playdebug_cpu (1);
}
- x_do_cycles (cpu_cycles);
+ if (currprefs.cpu_memory_cycle_exact) {
- cpu_cycles = (*cpufunctbl[r->opcode])(r->opcode);
- cpu_cycles = adjust_cycles (cpu_cycles);
+ (*cpufunctbl[r->opcode])(r->opcode);
+ cpu_cycles = 0;
+
+ } else {
+
+ x_do_cycles (cpu_cycles);
+
+ cpu_cycles = (*cpufunctbl[r->opcode])(r->opcode);
+ cpu_cycles = adjust_cycles (cpu_cycles);
+
+ }
cont:
if (r->spcflags) {
if (do_specialties (cpu_cycles))
if (cpu_prefs_changed_flag & 1) {
uaecptr pc = m68k_getpc();
prefs_changed_cpu();
+ fpu_modechange();
build_cpufunctbl();
m68k_setpc_normal(pc);
fill_prefetch();
}
}
if (model >= 68020) {
- regs.ce020memcycles = restore_u32 ();
+ restore_u32 (); // regs.ce020memcycles
+ regs.ce020startcycle = regs.ce020endcycle = 0;
restore_u32 ();
}
}
save_u32(regs.prefetch020[i]);
}
if (currprefs.cpu_model >= 68020) {
- save_u32 (regs.ce020memcycles);
+ save_u32 (0); //save_u32 (regs.ce020memcycles);
save_u32 (0);
}
save_u32 (regs.chipset_latch_rw);
put_word (addr, v);
}
+static void start_020_cycle(void)
+{
+ regs.ce020startcycle = get_cycles();
+}
+
+static void start_020_cycle_prefetch(bool opcode)
+{
+ regs.ce020startcycle = get_cycles();
+ // back to back prefetch cycles require 2 extra cycles (maybe)
+ if (opcode && regs.ce020startcycle == regs.ce020prefetchendcycle && currprefs.cpu_cycle_exact) {
+ x_do_cycles(2 * cpucycleunit);
+ regs.ce020startcycle = get_cycles();
+ }
+}
+static void end_020_cycle(void)
+{
+ regs.ce020endcycle = get_cycles();
+}
+static void end_020_cycle_prefetch(bool opcode)
+{
+ regs.ce020endcycle = get_cycles();
+ if (opcode) {
+ regs.ce020prefetchendcycle = regs.ce020endcycle;
+ } else {
+ regs.ce020prefetchendcycle = regs.ce020startcycle;
+ }
+}
// this one is really simple and easy
-static void fill_icache020 (uae_u32 addr, uae_u32 (*fetch)(uaecptr))
+static void fill_icache020 (uae_u32 addr, uae_u32 (*fetch)(uaecptr), bool opcode)
{
int index;
uae_u32 tag;
return;
}
// cache miss
+#if 0
// Prefetch apparently can be queued by bus controller
// even if bus controller is currently processing
// previous data access.
// Other combinations are not possible.
- if (!regs.ce020memcycle_data)
+ if (!regs.ce020memcycle_data) {
+ if (regs.ce020memcycles > 0)
+ x_do_cycles (regs.ce020memcycles);
regs.ce020memcycles = 0;
- regs.ce020memcycle_data = false;
- unsigned long cycs = get_cycles ();
+ }
+#endif
+
+ start_020_cycle_prefetch(opcode);
data = fetch (addr);
- // add as available "free" internal CPU time.
- cycs = get_cycles () - cycs;
- regs.ce020memcycles += cycs;
+ end_020_cycle_prefetch(opcode);
+
if (!(regs.cacr & 2)) {
c->tag = tag;
c->valid = !!(regs.cacr & 1);
#endif
-uae_u32 get_word_ce020_prefetch (int o)
+static uae_u32 get_word_ce020_prefetch_2 (int o, bool opcode)
{
uae_u32 pc = m68k_getpc () + o;
uae_u32 v;
regs.prefetch020[0] = regs.prefetch020[1];
// branch instruction detected in pipeline: stop fetches until branch executed.
if (!MORE_ACCURATE_68020_PIPELINE || regs.pipeline_stop >= 0) {
- fill_icache020 (pc + 2 + 4, mem_access_delay_longi_read_ce020);
+ fill_icache020 (pc + 2 + 4, mem_access_delay_longi_read_ce020, opcode);
regs.prefetch020[1] = regs.cacheholdingdata020;
}
regs.db = regs.prefetch020[0] >> 16;
return v;
}
+uae_u32 get_word_ce020_prefetch (int o)
+{
+ return get_word_ce020_prefetch_2(o, false);
+}
+
+uae_u32 get_word_ce020_prefetch_opcode (int o)
+{
+ return get_word_ce020_prefetch_2(o, true);
+}
+
uae_u32 get_word_020_prefetch (int o)
{
uae_u32 pc = m68k_getpc () + o;
#endif
regs.prefetch020[0] = regs.prefetch020[1];
if (!MORE_ACCURATE_68020_PIPELINE || regs.pipeline_stop >= 0) {
- fill_icache020 (pc + 2 + 4, currprefs.cpu_memory_cycle_exact ? mem_access_delay_longi_read_ce020 : get_longi);
+ fill_icache020 (pc + 2 + 4, currprefs.cpu_memory_cycle_exact ? mem_access_delay_longi_read_ce020 : get_longi, false);
regs.prefetch020[1] = regs.cacheholdingdata020;
}
regs.db = regs.prefetch020[0] >> 16;
// these are also used by 68030.
+#if 0
#define RESET_CE020_CYCLES \
regs.ce020memcycles = 0; \
regs.ce020memcycle_data = true;
unsigned long cycs = get_cycles ()
#define ADD_CE020_CYCLES \
regs.ce020memcycles += get_cycles () - cycs
+#endif
uae_u32 mem_access_delay_long_read_ce020 (uaecptr addr)
{
uae_u32 v;
- RESET_CE020_CYCLES;
- STORE_CE020_CYCLES;
+ start_020_cycle();
switch (ce_banktype[addr >> 16])
{
case CE_MEMBANK_CHIP16:
v = get_long (addr);
break;
}
- ADD_CE020_CYCLES;
+ end_020_cycle();
return v;
}
uae_u32 mem_access_delay_word_read_ce020 (uaecptr addr)
{
uae_u32 v;
- RESET_CE020_CYCLES;
- STORE_CE020_CYCLES;
+ start_020_cycle();
switch (ce_banktype[addr >> 16])
{
case CE_MEMBANK_CHIP16:
v = get_word (addr);
break;
}
- ADD_CE020_CYCLES;
+ end_020_cycle();
return v;
}
uae_u32 mem_access_delay_byte_read_ce020 (uaecptr addr)
{
uae_u32 v;
- RESET_CE020_CYCLES;
- STORE_CE020_CYCLES;
+ start_020_cycle();
switch (ce_banktype[addr >> 16])
{
case CE_MEMBANK_CHIP16:
v = get_byte (addr);
break;
}
- ADD_CE020_CYCLES;
+ end_020_cycle();
return v;
}
void mem_access_delay_byte_write_ce020 (uaecptr addr, uae_u32 v)
{
- RESET_CE020_CYCLES;
- STORE_CE020_CYCLES;
+ start_020_cycle();
switch (ce_banktype[addr >> 16])
{
case CE_MEMBANK_CHIP16:
put_byte (addr, v);
break;
}
- ADD_CE020_CYCLES;
+ end_020_cycle();
}
void mem_access_delay_word_write_ce020 (uaecptr addr, uae_u32 v)
{
- RESET_CE020_CYCLES;
- STORE_CE020_CYCLES;
+ start_020_cycle();
switch (ce_banktype[addr >> 16])
{
case CE_MEMBANK_CHIP16:
put_word (addr, v);
break;
}
- ADD_CE020_CYCLES;
+ end_020_cycle();
}
void mem_access_delay_long_write_ce020 (uaecptr addr, uae_u32 v)
{
- RESET_CE020_CYCLES;
- STORE_CE020_CYCLES;
+ start_020_cycle();
switch (ce_banktype[addr >> 16])
{
case CE_MEMBANK_CHIP16:
put_long (addr, v);
break;
}
- ADD_CE020_CYCLES;
+ end_020_cycle();
}
// cache miss
if (currprefs.cpu_cycle_exact) {
- if (!regs.ce020memcycle_data)
- regs.ce020memcycles = 0;
regs.ce020memcycle_data = false;
- unsigned long cycs = get_cycles ();
+ start_020_cycle_prefetch(false);
data = mem_access_delay_longi_read_ce020 (addr);
- // add as available "free" internal CPU time.
- cycs = get_cycles () - cycs;
- regs.ce020memcycles += cycs;
+ end_020_cycle_prefetch(false);
} else if (currprefs.cpu_memory_cycle_exact) {
data = mem_access_delay_longi_read_ce020 (addr);
} else {
return 0;
}
-uae_u32 get_word_ce030_prefetch (int o)
+static uae_u32 get_word_ce030_prefetch_2 (int o)
{
uae_u32 pc = m68k_getpc () + o;
uae_u32 v;
return v;
}
+uae_u32 get_word_ce030_prefetch (int o)
+{
+ return get_word_ce030_prefetch_2(o);
+}
+uae_u32 get_word_ce030_prefetch_opcode (int o)
+{
+ return get_word_ce030_prefetch_2(o);
+}
+
uae_u32 get_word_030_prefetch(int o)
{
uae_u32 pc = m68k_getpc() + o;
#endif
if (currprefs.cpu_cycle_exact)
- regs.irc = get_word_ce030_prefetch (0);
+ regs.irc = get_word_ce030_prefetch_opcode (0);
else
regs.irc = get_word_030_prefetch(0);
}
regs.pipeline_stop = 0;
regs.pipeline_r8[0] = regs.pipeline_r8[1] = -1;
- fill_icache020 (pc, fetch);
+ fill_icache020 (pc, fetch, true);
if (currprefs.cpu_cycle_exact)
do_cycles_ce020_internal(2);
regs.prefetch020[0] = regs.cacheholdingdata020;
- fill_icache020 (pc + 4, fetch);
+ fill_icache020 (pc + 4, fetch, true);
if (currprefs.cpu_cycle_exact)
do_cycles_ce020_internal(2);
regs.prefetch020[1] = regs.cacheholdingdata020;
#endif
if (currprefs.cpu_cycle_exact)
- regs.irc = get_word_ce020_prefetch (0);
+ regs.irc = get_word_ce020_prefetch_opcode (0);
else
regs.irc = get_word_020_prefetch (0);
}
fill_prefetch_020_ntx();
}
+void continue_ce030_prefetch(void)
+{
+ fill_prefetch_030_ntx();
+}
+void continue_030_prefetch(void)
+{
+ fill_prefetch_030_ntx();
+}
+
void fill_prefetch_020(void)
{
fill_prefetch_020_ntx();
}
}
if (s->m_TargetDimsEffectHandle) {
- D3DXVECTOR4 fDims2;
- fDims2.x = s->targettex_width;
- fDims2.y = s->targettex_height;
- fDims2.z = 1;
- fDims2.w = 1;
- hr = s->pEffect->SetVector(s->m_TargetDimsEffectHandle, &fDims2);
+ D3DXVECTOR4 fDimsTarget;
+ fDimsTarget.x = s->targettex_width;
+ fDimsTarget.y = s->targettex_height;
+ fDimsTarget.z = 1;
+ fDimsTarget.w = 1;
+ hr = s->pEffect->SetVector(s->m_TargetDimsEffectHandle, &fDimsTarget);
if (FAILED(hr)) {
write_log(_T("%s: SetTextures:SetVector:Target %s\n"), D3DHEAD, D3D_ErrorString(hr));
return 0;
if (FAILED (hr = postEffect->SetTexture (postSourceTextureHandle, srctex)))
write_log (_T("%s: SetTexture(srctex) failed: %s\n"), D3DHEAD, D3D_ErrorString (hr));
+ if (s->m_SourceDimsEffectHandle) {
+ D3DXVECTOR4 fDimsSource;
+ fDimsSource.x = (FLOAT)Desc.Width;
+ fDimsSource.y = (FLOAT)Desc.Height;
+ fDimsSource.z = 1; fDimsSource.w = 1;
+ hr = postEffect->SetVector(s->m_SourceDimsEffectHandle, &fDimsSource);
+ if (FAILED(hr)) {
+ write_log(_T("%s: SetTextures:SetVector:Source %s\n"), D3DHEAD, D3D_ErrorString(hr));
+ }
+ }
+ if (s->m_TargetDimsEffectHandle) {
+ D3DXVECTOR4 fDimsTarget;
+ fDimsTarget.x = s->targettex_width;
+ fDimsTarget.y = s->targettex_height;
+ fDimsTarget.z = 1; fDimsTarget.w = 1;
+ hr = postEffect->SetVector(s->m_TargetDimsEffectHandle, &fDimsTarget);
+ if (FAILED(hr)) {
+ write_log(_T("%s: SetTextures:SetVector:Target %s\n"), D3DHEAD, D3D_ErrorString(hr));
+ }
+ }
+
if (after >= 0) {
if (FAILED (hr = d3ddev->GetRenderTarget (0, &lpRenderTarget)))
write_log (_T("%s: GetRenderTarget: %s\n"), D3DHEAD, D3D_ErrorString (hr));
static int num_drives;
static bool drives_enumerated;
+#define MAX_LOCKED_VOLUMES 8
+
struct hardfilehandle
{
int zfile;
struct zfile *zf;
HANDLE h;
BOOL firstwrite;
+ HANDLE locked_volumes[MAX_LOCKED_VOLUMES];
+ bool dismounted;
};
struct uae_driveinfo {
int do_rdbdump;
static struct uae_driveinfo uae_drives[MAX_FILESYSTEM_UNITS];
-#if 1
+#if 0
static void fixdrive (struct hardfiledata *hfd)
{
uae_u8 data[512];
return 0;
mounted = 0;
h = FindFirstVolume (volname, sizeof volname / sizeof (TCHAR));
- while (h && !mounted) {
+ while (h != INVALID_HANDLE_VALUE && !mounted) {
HANDLE d;
if (volname[_tcslen (volname) - 1] == '\\')
volname[_tcslen (volname) - 1] = 0;
}
CloseHandle (d);
} else {
- write_log (_T("'%s': %d\n"), volname, GetLastError ());
+ hdf_log2 (_T("'%s': %d\n"), volname, GetLastError ());
}
if (!FindNextVolume (h, volname, sizeof volname / sizeof (TCHAR)))
break;
return true;
}
+static void lock_drive(struct hardfiledata *hfd, const TCHAR *name, HANDLE drvhandle)
+{
+ DWORD written;
+ TCHAR volname[MAX_DPATH];
+ DWORD sign, pstyle;
+ bool ntfs_found = false;
+
+ if (!hfd->ci.lock)
+ return;
+
+ // single partition FAT drives seem to lock this way, without need for administrator privileges
+ if (DeviceIoControl(drvhandle, FSCTL_LOCK_VOLUME, NULL, 0, NULL, 0, &written, NULL)) {
+ if (DeviceIoControl(drvhandle, FSCTL_DISMOUNT_VOLUME, NULL, 0, NULL, 0, &written, NULL)) {
+ write_log(_T("'%s' locked and dismounted successfully.\n"), name);
+ hfd->handle->dismounted = true;
+ return;
+ }
+ }
+
+ if (!getsignfromhandle (drvhandle, &sign, &pstyle))
+ return;
+ HANDLE h = FindFirstVolume (volname, sizeof volname / sizeof (TCHAR));
+ while (h != INVALID_HANDLE_VALUE) {
+ bool isntfs = false;
+ if (volname[_tcslen (volname) - 1] == '\\')
+ volname[_tcslen (volname) - 1] = 0;
+ HANDLE d = CreateFile (volname, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
+ NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+ if (d != INVALID_HANDLE_VALUE) {
+ if (DeviceIoControl (d, FSCTL_IS_VOLUME_MOUNTED, NULL, 0, NULL, 0, &written, NULL)) {
+ VOLUME_DISK_EXTENTS *vde;
+ NTFS_VOLUME_DATA_BUFFER ntfs;
+ if (DeviceIoControl (d, FSCTL_GET_NTFS_VOLUME_DATA, NULL, 0, &ntfs, sizeof ntfs, &written, NULL)) {
+ isntfs = true;
+ }
+ DWORD outsize = sizeof (VOLUME_DISK_EXTENTS) + sizeof (DISK_EXTENT) * 32;
+ vde = (VOLUME_DISK_EXTENTS*)xmalloc (uae_u8, outsize);
+ if (DeviceIoControl (d, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, NULL, 0, vde, outsize, &written, NULL)) {
+ for (int i = 0; i < vde->NumberOfDiskExtents; i++) {
+ int mounted = 0;
+ TCHAR pdrv[MAX_DPATH];
+ _stprintf (pdrv, _T("\\\\.\\PhysicalDrive%d"), vde->Extents[i].DiskNumber);
+ HANDLE ph = CreateFile (pdrv, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+ if (ph != INVALID_HANDLE_VALUE) {
+ DWORD sign2, pstyle2;
+ if (getsignfromhandle (ph, &sign2, &pstyle2)) {
+ if (sign == sign2 && pstyle == PARTITION_STYLE_MBR) {
+ if (isntfs)
+ ntfs_found = true;
+ mounted = isntfs ? -1 : 1;
+ }
+ }
+ CloseHandle(ph);
+ if (mounted > 0) {
+ for (int j = 0; j < MAX_LOCKED_VOLUMES; j++) {
+ if (hfd->handle->locked_volumes[j] == INVALID_HANDLE_VALUE) {
+ write_log(_T("%d: Partition found: PhysicalDrive%d: Extent %d Start=%I64X Len=%I64X\n"), i,
+ j, vde->Extents[i].DiskNumber, vde->Extents[i].StartingOffset.QuadPart, vde->Extents[i].ExtentLength.QuadPart);
+ hfd->handle->locked_volumes[j] = d;
+ d = INVALID_HANDLE_VALUE;
+ break;
+ }
+ }
+ }
+ }
+ }
+ } else {
+ write_log (_T("IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS returned %08x\n"), GetLastError ());
+ }
+ }
+ if (d != INVALID_HANDLE_VALUE)
+ CloseHandle (d);
+ }
+ if (!FindNextVolume (h, volname, sizeof volname / sizeof (TCHAR)))
+ break;
+ }
+ FindVolumeClose(h);
+
+ if (ntfs_found) {
+ write_log(_T("Not locked: At least one NTFS partition detected.\n"));
+ }
+
+ for (int i = 0; i < MAX_LOCKED_VOLUMES; i++) {
+ HANDLE d = hfd->handle->locked_volumes[i];
+ if (d != INVALID_HANDLE_VALUE) {
+ if (ntfs_found) {
+ CloseHandle(d);
+ hfd->handle->locked_volumes[i] = INVALID_HANDLE_VALUE;
+ } else {
+ if (DeviceIoControl(d, FSCTL_LOCK_VOLUME, NULL, 0, NULL, 0, &written, NULL)) {
+ if (DeviceIoControl(d, FSCTL_DISMOUNT_VOLUME, NULL, 0, NULL, 0, &written, NULL)) {
+ write_log(_T("ID=%d locked and dismounted successfully.\n"), i, name);
+ } else {
+ write_log (_T("WARNING: ID=%d FSCTL_DISMOUNT_VOLUME returned %d\n"), i, GetLastError());
+ }
+ } else {
+ write_log (_T("WARNING: ID=%d FSCTL_LOCK_VOLUME returned %d\n"), i, GetLastError());
+ }
+ }
+ }
+ }
+}
+
int hdf_open_target (struct hardfiledata *hfd, const TCHAR *pname)
{
HANDLE h = INVALID_HANDLE_VALUE;
goto end;
}
hfd->handle = xcalloc (struct hardfilehandle, 1);
+ for(int i = 0; i < MAX_LOCKED_VOLUMES; i++) {
+ hfd->handle->locked_volumes[i] = INVALID_HANDLE_VALUE;
+ }
hfd->handle->h = INVALID_HANDLE_VALUE;
hfd_log (_T("hfd attempting to open: '%s'\n"), name);
if (name[0] == ':') {
TCHAR *p = _tcschr (name + 1, ':');
if (p) {
*p++ = 0;
- if (!drives_enumerated) {
- // do not scan for drives if open succeeds and it is a harddrive
- // to prevent spinup of sleeping drives
- h = CreateFile (p,
- GENERIC_READ,
- FILE_SHARE_READ,
- NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS, NULL);
- DWORD err = GetLastError ();
- if (h == INVALID_HANDLE_VALUE && err == ERROR_FILE_NOT_FOUND)
+ // do not scan for drives if open succeeds and it is a harddrive
+ // to prevent spinup of sleeping drives
+ h = CreateFile (p,
+ GENERIC_READ,
+ FILE_SHARE_READ,
+ NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS, NULL);
+ DWORD err = GetLastError ();
+ if (h == INVALID_HANDLE_VALUE && err == ERROR_FILE_NOT_FOUND) {
+ if (!drives_enumerated)
goto emptyreal;
}
}
udi = &uae_drives[drvnum];
}
if (udi != NULL) {
- DWORD r;
hfd->flags = HFD_FLAGS_REALDRIVE;
if (udi) {
if (udi->nomedia)
ret = -1;
goto end;
}
- if (!DeviceIoControl (h, FSCTL_ALLOW_EXTENDED_DASD_IO, NULL, 0, NULL, 0, &r, NULL))
- write_log (_T("WARNING: '%s' FSCTL_ALLOW_EXTENDED_DASD_IO returned %d\n"), name, GetLastError ());
//queryidentifydevice (hfd);
_tcsncpy (hfd->vendor_id, udi->vendor_id, 8);
hfd->handle->h = h;
if (h == INVALID_HANDLE_VALUE)
goto end;
- if (!DeviceIoControl(h, FSCTL_ALLOW_EXTENDED_DASD_IO, NULL, 0, NULL, 0, &r, NULL))
- write_log (_T("WARNING: '%s' FSCTL_ALLOW_EXTENDED_DASD_IO returned %d\n"), name, GetLastError ());
}
#if 0
hfd->warned = -1;
#endif
}
+ lock_drive(hfd, name, h);
+
hfd->handle_valid = HDF_HANDLE_WIN32;
hfd->emptyname = my_strdup (name);
{
if (!h)
return;
+ for (int i = 0; i < MAX_LOCKED_VOLUMES; i++) {
+ if (h->locked_volumes[i] != INVALID_HANDLE_VALUE) {
+ CloseHandle(h->locked_volumes[i]);
+ }
+ }
if (!h->zfile && h->h != INVALID_HANDLE_VALUE)
- CloseHandle (h->h);
+ CloseHandle(h->h);
if (h->zfile && h->zf)
zfile_fclose (h->zf);
h->zf = NULL;
h->zfile = 0;
}
+HANDLE hdf_get_real_handle(struct hardfilehandle *h)
+{
+ return h->h;
+}
+
void hdf_close_target (struct hardfiledata *hfd)
{
freehandle (hfd->handle);
write_log (_T("too short STORAGE_DEVICE_DESCRIPTOR only %d bytes\n"), size);
return -2;
}
- if (devDesc->DeviceType != INQ_DASD && devDesc->DeviceType != INQ_ROMD && devDesc->DeviceType != INQ_OPTD) {
+ if (devDesc->DeviceType != INQ_DASD && devDesc->DeviceType != INQ_ROMD && devDesc->DeviceType != INQ_OPTD && devDesc->DeviceType != INQ_OMEM) {
write_log (_T("not a direct access device, ignored (type=%d)\n"), devDesc->DeviceType);
return -2;
}
HWND hwnd, hwndprogress, hwndprogresstxt;
MSG msg;
int pct, cnt;
+ DWORD r;
cache = VirtualAlloc (NULL, COPY_CACHE_SIZE, MEM_COMMIT, PAGE_READWRITE);
if (!cache)
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN | FILE_FLAG_NO_BUFFERING, NULL);
if (hdst == INVALID_HANDLE_VALUE)
goto err;
+ if (!DeviceIoControl(h, FSCTL_ALLOW_EXTENDED_DASD_IO, NULL, 0, NULL, 0, &r, NULL)) {
+ write_log (_T("WARNING: '%s' FSCTL_ALLOW_EXTENDED_DASD_IO returned %d\n"), path, GetLastError ());
+ }
+ if (!DeviceIoControl(h, FSCTL_LOCK_VOLUME , NULL, 0, NULL, 0, &r, NULL)) {
+ write_log (_T("WARNING: '%s' FSCTL_LOCK_VOLUME returned %d\n"), path, GetLastError ());
+ }
li.QuadPart = size;
ret = SetFilePointer (hdst, li.LowPart, &li.HighPart, FILE_BEGIN);
if (ret == INVALID_SET_FILE_POINTER && GetLastError () != NO_ERROR)
SetFilePointer (h, 0, &li.HighPart, FILE_BEGIN);
progressdialogreturn = -1;
progressdialogactive = 1;
- hwnd = CreateDialog (hUIDLL ? hUIDLL : hInst, MAKEINTRESOURCE (IDD_PROGRESSBAR), hDlg, ProgressDialogProc);
+ hwnd = CustomCreateDialog(IDD_PROGRESSBAR, hDlg, ProgressDialogProc);
if (hwnd == NULL)
goto err;
hwndprogress = GetDlgItem (hwnd, IDC_PROGRESSBAR);
} else if (!_tcscmp(ab->label, _T("chip"))) {
start = 0;
got = true;
- if (!expansion_get_autoconfig_by_address(&currprefs, 0x00200000) || currprefs.chipmem_size < 2 * 1024 * 1024)
+ if (!expansion_get_autoconfig_by_address(&currprefs, 0x00200000) && currprefs.chipmem_size == 2 * 1024 * 1024)
+ barrier = true;
+ if (currprefs.chipmem_size > 2 * 1024 * 1024)
barrier = true;
} else if (!_tcscmp(ab->label, _T("kick"))) {
start = 0xf80000;
md->readonly = readonly;
md->readonlysize = readonlysize;
md->maprom = maprom;
+ md->hasbarrier = barrier;
if (start_rtg && end_rtg) {
if (start < start_rtg || start + size > end_rtg)
directsupport = false;
}
md->directsupport = directsupport;
- if (barrier) {
+ if (md->hasbarrier) {
md->size += BARRIER;
}
}
#define IDC_16BIT 1231
#define IDC_PPC_CPUIDLE 1231
#define IDC_11KHZ 1232
+#define IDC_FPU_SOFTFLOAT 1232
#define IDC_22KHZ 1233
#define IDC_SPEED_x86 1233
#define IDC_44KHZ 1234
#define IDC_HDFINFO 1779
#define IDC_DBG_AUTOSET 1780
#define IDC_HF_SPARSE 1780
+#define IDC_HDF_LOCK 1780
#define IDC_DBG_DASM2 1781
#define IDC_HF_DYNAMIC 1781
#define IDC_DBG_MEM2 1782
CONTROL "Direct",IDC_TRUST0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,143,299,72,10
CONTROL "Indirect",IDC_TRUST1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,221,299,72,10
CONTROL "No flags",IDC_NOFLAGS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,299,299,68,11
+ CONTROL "Softfloat FPU emulation",IDC_FPU_SOFTFLOAT,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,285,115,10
END
IDD_FLOPPY DIALOGEX 0, 0, 396, 261
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,5,67,158,14
- EDITTEXT IDC_PATH_NAME,178,67,97,15,ES_AUTOHSCROLL | NOT WS_VISIBLE
+ EDITTEXT IDC_PATH_NAME,178,67,41,15,ES_AUTOHSCROLL | NOT WS_VISIBLE
CONTROL "Read/write",IDC_HDF_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,315,71,60,10
COMBOBOX IDC_HDF_CONTROLLER_UNIT,65,90,97,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_HDF_CONTROLLER_TYPE,178,90,97,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_HDF_CONTROLLER,8,113,218,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
DEFPUSHBUTTON "Add hard drive",IDOK,236,113,73,14
PUSHBUTTON "Cancel",IDCANCEL,316,113,73,14
+ CONTROL "Lock",IDC_HDF_LOCK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,243,71,61,10
END
IDD_MISC2 DIALOGEX 0, 0, 396, 278
END
IDD_PROGRESSBAR DIALOGEX 0, 0, 396, 58
-STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Processing..."
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
CONTROL "",IDC_LISTDIALOG_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,7,302,171
END
-IDD_CDDRIVE DIALOGEX 0, 0, 395, 109
+IDD_CDDRIVE DIALOGEX 0, 0, 395, 125
STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "CD Settings"
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
RTEXT "HD Controller:",IDC_STATIC,7,90,65,10,SS_CENTERIMAGE
- COMBOBOX IDC_HDF_CONTROLLER,80,89,122,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- COMBOBOX IDC_HDF_CONTROLLER_UNIT,208,89,25,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- DEFPUSHBUTTON "Add CD Drive",IDOK,238,89,73,14
- PUSHBUTTON "Cancel",IDCANCEL,318,89,73,14
+ COMBOBOX IDC_HDF_CONTROLLER,80,89,154,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_HDF_CONTROLLER_UNIT,239,89,71,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ DEFPUSHBUTTON "Add CD Drive",IDOK,121,108,73,14
+ PUSHBUTTON "Cancel",IDCANCEL,201,108,73,14
CONTROL "",IDC_CDLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,4,4,387,77
END
PUSHBUTTON "Eject",IDC_TAPE_EJECT,278,36,105,15
RTEXT "HD Controller:",IDC_STATIC,7,60,65,10,SS_CENTERIMAGE
COMBOBOX IDC_HDF_CONTROLLER,79,58,148,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- COMBOBOX IDC_HDF_CONTROLLER_UNIT,235,58,31,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- CONTROL "Read/write",IDC_TAPE_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,277,58,67,10
+ COMBOBOX IDC_HDF_CONTROLLER_UNIT,235,58,52,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ CONTROL "Read/write",IDC_TAPE_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,299,58,84,10
DEFPUSHBUTTON "Add Tape Drive",IDOK,106,75,88,14
PUSHBUTTON "Cancel",IDCANCEL,200,76,88,14
END
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,4,0,0
- PRODUCTVERSION 3,4,0,0
+ FILEVERSION 3,4,1,0
+ PRODUCTVERSION 3,4,1,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
BLOCK "040904b0"
BEGIN
VALUE "FileDescription", "WinUAE"
- VALUE "FileVersion", "3.4.0.0"
+ VALUE "FileVersion", "3.4.1.0"
VALUE "InternalName", "WinUAE"
- VALUE "LegalCopyright", "© 1996-2016 under the GNU Public License (GPL)"
+ VALUE "LegalCopyright", "© 1996-2017 under the GNU Public License (GPL)"
VALUE "OriginalFilename", "WinUAE.exe"
VALUE "ProductName", "WinUAE"
- VALUE "ProductVersion", "3.4.0.0"
+ VALUE "ProductVersion", "3.4.1.0"
END
END
BLOCK "VarFileInfo"
// Dialog
//
+IDD_BOARDS DIALOGEX 0, 0, 396, 259
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
+EXSTYLE WS_EX_CONTEXTHELP
+FONT 8, "MS Sans Serif", 0, 0, 0x1
+BEGIN
+ CONTROL "",IDC_BOARDLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,2,18,390,220
+ CONTROL "Custom board order",IDC_AUTOCONFIGCUSTOMSORT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,2,242,99,12
+ PUSHBUTTON "Move up",IDC_BOARDS_UP,114,241,78,14
+ PUSHBUTTON "Move down",IDC_BOARDS_DOWN,203,241,78,14
+END
+
IDD_KICKSTART DIALOGEX 0, 0, 396, 259
STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
EXSTYLE WS_EX_CONTEXTHELP
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,154,139,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
+ CONTROL "Monochrome video out",IDC_GRAYSCALE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,167,139,10
RTEXT "Resolution:",IDC_STATIC,24,192,110,8,SS_CENTERIMAGE
COMBOBOX IDC_LORES,142,191,127,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
RTEXT "Resolution autoswitch:",IDC_STATIC,92,212,110,8,SS_CENTERIMAGE
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 "Monochrome video out",IDC_GRAYSCALE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,167,139,10
END
-IDD_MEMORY DIALOGEX 0, 0, 396, 246
+IDD_MEMORY DIALOGEX 0, 0, 396, 266
STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
EXSTYLE WS_EX_CONTEXTHELP
FONT 8, "MS Sans Serif", 0, 0, 0x1
CONTROL "",IDC_Z3CHIPMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,248,71,60,20
EDITTEXT IDC_Z3CHIPRAM,311,76,40,12,ES_CENTER | ES_READONLY
EDITTEXT IDC_MAX32RAM,14,99,366,12,ES_CENTER | ES_READONLY
- GROUPBOX "Advanced Memory Settings",IDC_STATIC,1,134,393,107
- RTEXT "Motherboard Fast:",IDC_STATIC,116,149,129,10,SS_CENTERIMAGE
- CONTROL "",IDC_MBMEM1,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,251,145,68,20
- EDITTEXT IDC_MBRAM1,326,148,40,12,ES_CENTER | ES_READONLY
- RTEXT "Processor Slot Fast:",IDC_STATIC,116,172,129,10,SS_CENTERIMAGE
- CONTROL "",IDC_MBMEM2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,251,168,68,20
- EDITTEXT IDC_MBRAM2,326,171,40,12,ES_CENTER | ES_READONLY
- RTEXT "Second Z2 Fast RAM board:",IDC_STATIC,129,194,116,15,SS_CENTERIMAGE
- CONTROL "",IDC_FASTMEM2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,251,193,68,20
- EDITTEXT IDC_FASTRAM2,326,196,40,12,ES_CENTER | ES_READONLY
- RTEXT "Z3 mapping mode:",IDC_STATIC,149,219,93,15,SS_CENTERIMAGE
- COMBOBOX IDC_Z3MAPPING,249,220,117,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- CONTROL "Autoconfig Z2 Fast RAM",IDC_FASTMEMAUTOCONFIG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,194,120,10
+ GROUPBOX "Advanced Memory Settings",IDC_STATIC,1,128,393,137
+ COMBOBOX IDC_MEMORYSELECT,14,151,228,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ CONTROL "",IDC_MEMORYMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,253,145,68,20
+ EDITTEXT IDC_MEMORYRAM,328,148,40,12,ES_CENTER | ES_READONLY
+ RTEXT "Manufacturer",IDC_STATIC,12,175,57,15,SS_CENTERIMAGE
+ EDITTEXT IDC_AUTOCONFIG_MANUFACTURER,78,175,45,13,ES_AUTOHSCROLL
+ RTEXT "Product",IDC_STATIC,133,175,55,15,SS_CENTERIMAGE
+ EDITTEXT IDC_AUTOCONFIG_PRODUCT,196,175,45,13,ES_AUTOHSCROLL
+ RTEXT "Autoconfig data",IDC_STATIC,11,195,57,15,SS_CENTERIMAGE
+ EDITTEXT IDC_AUTOCONFIG_DATA,78,194,164,13,ES_AUTOHSCROLL
+ CONTROL "Edit Autoconfig data",IDC_FASTMEMAUTOCONFIGUSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,261,177,103,8
+ CONTROL "Manual configuration",IDC_FASTMEMNOAUTOCONFIG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,261,195,103,8
+ RTEXT "Memory board",IDC_STATIC,15,216,53,15,SS_CENTERIMAGE
+ COMBOBOX IDC_MEMORYBOARDSELECT,77,216,165,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ LTEXT "Z3 mapping mode:",IDC_STATIC,263,215,115,15,SS_CENTERIMAGE
+ RTEXT "Address range",IDC_STATIC,10,237,57,15,SS_CENTERIMAGE
+ EDITTEXT IDC_RAM_ADDRESS,77,237,79,13,ES_AUTOHSCROLL
+ EDITTEXT IDC_RAM_ADDRESS2,164,237,79,13,ES_AUTOHSCROLL
+ COMBOBOX IDC_Z3MAPPING,262,237,117,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
END
IDD_CPU DIALOGEX 0, 0, 396, 317
BEGIN
GROUPBOX "CPU",IDC_STATIC,1,1,129,184,BS_LEFT
CONTROL "68000",IDC_CPU0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,8,19,63,10
- CONTROL "68010",IDC_CPU1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,33,63,10
- CONTROL "68020",IDC_CPU2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,46,63,10
- CONTROL "68030",IDC_CPU3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,60,63,10
- CONTROL "68040",IDC_CPU4,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,74,63,10
- CONTROL "68060",IDC_CPU5,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,88,63,10
- CONTROL "24-bit addressing",IDC_COMPATIBLE24,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,108,119,12
+ CONTROL "68010",IDC_CPU1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,32,63,10
+ CONTROL "68020",IDC_CPU2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,45,63,10
+ CONTROL "68030",IDC_CPU3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,58,63,10
+ CONTROL "68040",IDC_CPU4,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,71,63,10
+ CONTROL "68060",IDC_CPU5,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,84,63,10
+ CONTROL "24-bit addressing",IDC_COMPATIBLE24,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,107,119,12
CONTROL "More compatible [] 68000: emulate prefetch. 68020+: emulate prefetch partially. More compatible but slower.",IDC_COMPATIBLE,
"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,121,118,11
CONTROL "JIT [] Enable just-in-time CPU emulator. Significantly increases the speed of the CPU emulation. Requires 68020 or higher CPU.",IDC_JITENABLE,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,135,120,11
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,134,120,11
CONTROL "MMU [] 68030, 68040 and 68060 MMU emulation. Not compatible with JIT.",IDC_MMUENABLE,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,148,120,11
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,147,120,11
CONTROL "Unimplemented CPU emu [] Emulate 68060 unimplemented integer instructions",IDC_CPU_UNIMPLEMENTED,
- "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,161,118,10
+ "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,160,118,10
+ GROUPBOX "FPU",IDC_STATIC,1,188,129,128,BS_LEFT
+ CONTROL "None",IDC_FPU0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,8,204,87,10
+ CONTROL "68881",IDC_FPU1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,217,87,10
+ CONTROL "68882",IDC_FPU2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,230,87,10
+ CONTROL "CPU internal",IDC_FPU3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,243,93,10
+ CONTROL "More compatible [] More compatible but slower FPU emulation.",IDC_COMPATIBLE_FPU,
+ "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,259,117,10
+ CONTROL "Unimplemented FPU emu [] Emulate FPU unimplemented instructions",IDC_FPU_UNIMPLEMENTED,
+ "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,272,116,10
GROUPBOX "CPU Emulation Speed",IDC_STATIC,136,1,258,97
CONTROL "Fastest possible",IDC_CS_HOST,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_GROUP | WS_TABSTOP,143,19,195,10
CONTROL "Approximate A500/A1200 or cycle-exact",IDC_CS_68000,
RTEXT "CPU Frequency",IDC_STATIC,139,121,67,10,SS_CENTERIMAGE
COMBOBOX IDC_CPU_FREQUENCY,215,120,89,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
EDITTEXT IDC_CPU_FREQUENCY2,312,119,70,15
- GROUPBOX "FPU",IDC_STATIC,1,188,129,128,BS_LEFT
- CONTROL "None",IDC_FPU0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,8,202,87,10
- CONTROL "68881",IDC_FPU1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,216,87,10
- CONTROL "68882",IDC_FPU2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,229,87,10
- CONTROL "CPU internal",IDC_FPU3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,243,93,10
- CONTROL "More compatible [] More compatible but slower FPU emulation.",IDC_COMPATIBLE_FPU,
- "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,259,117,10
- CONTROL "Unimplemented FPU emu [] Emulate FPU unimplemented instructions",IDC_FPU_UNIMPLEMENTED,
- "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,272,116,10
+ GROUPBOX "PPC CPU options",IDC_STATIC,136,144,258,57
+ CONTROL "PPC CPU emulation (Blizzard PPC / CyberStorm PPC) [] Automatically configure CyberStorm PPC or Blizzard PPC setup.",IDC_CPU_PPC,
+ "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,145,161,236,10
+ RTEXT "Stopped M68K CPU idle mode",IDC_STATIC,180,183,121,9
+ CONTROL "",IDC_PPC_CPUIDLE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,308,177,69,21
+ GROUPBOX "x86 Bridgeboard CPU options",IDC_STATIC,136,202,258,42
+ RTEXT "CPU Speed",IDC_STATIC,147,221,55,9,SS_CENTERIMAGE
+ EDITTEXT IDC_CPUTEXT_x86,224,220,39,12,ES_CENTER | ES_READONLY
+ CONTROL "",IDC_SPEED_x86,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,278,215,108,20
GROUPBOX "Advanced JIT Settings",IDC_STATIC,136,245,258,70
RTEXT "Cache size:",IDC_STATIC,143,261,66,10,SS_CENTERIMAGE
CONTROL "Slider1",IDC_CACHE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,212,255,115,20
EDITTEXT IDC_CACHETEXT,331,260,30,12,ES_CENTER | ES_READONLY
- CONTROL "Hard flush",IDC_HARDFLUSH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,299,281,84,11
- CONTROL "Constant jump",IDC_CONSTJUMP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,221,281,71,11
CONTROL "FPU support",IDC_JITFPU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,143,281,71,11
- CONTROL "No flags",IDC_NOFLAGS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,299,299,68,11
+ CONTROL "Constant jump",IDC_CONSTJUMP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,221,281,71,11
+ CONTROL "Hard flush",IDC_HARDFLUSH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,299,281,84,11
CONTROL "Direct",IDC_TRUST0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,143,299,72,10
CONTROL "Indirect",IDC_TRUST1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,221,299,72,10
- CONTROL "PPC CPU emulation (Blizzard PPC / CyberStorm PPC) [] Automatically configure CyberStorm PPC or Blizzard PPC setup.",IDC_CPU_PPC,
- "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,145,161,236,10
- GROUPBOX "PPC CPU options",IDC_STATIC,136,144,258,57
- RTEXT "Stopped M68K CPU idle mode",IDC_STATIC,180,183,121,9
- CONTROL "",IDC_PPC_CPUIDLE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,308,177,69,21
- CONTROL "",IDC_SPEED_x86,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,278,215,108,20
- RTEXT "CPU Speed",IDC_STATIC,147,221,55,9,SS_CENTERIMAGE
- GROUPBOX "x86 Bridgeboard CPU options",IDC_STATIC,136,202,258,42
- EDITTEXT IDC_CPUTEXT_x86,224,220,39,12,ES_CENTER | ES_READONLY
+ CONTROL "No flags",IDC_NOFLAGS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,299,299,68,11
END
IDD_FLOPPY DIALOGEX 0, 0, 396, 261
PUSHBUTTON "&Properties",IDC_EDIT,267,172,60,15
PUSHBUTTON "Remove",IDC_REMOVE,334,172,60,15
GROUPBOX "Options",IDC_STATIC,1,189,393,66
- CONTROL "Add PC drives at startup",IDC_MAPDRIVES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,200,201,11
+ CONTROL "Add PC drives at startup",IDC_MAPDRIVES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,200,201,11
CONTROL "Include removable drives..",IDC_MAPDRIVES_REMOVABLE,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,213,201,11
- CONTROL "Include network drives..",IDC_MAPDRIVES_NET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,227,201,11
- CONTROL "CDFS automount CD/DVD drives",IDC_MAPDRIVES_CD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,241,201,11
- CONTROL "Disable UAEFSDB-support",IDC_NOUAEFSDB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,222,200,167,11
- CONTROL "Don't use Windows Recycle Bin",IDC_NORECYCLEBIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,222,213,167,11
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,213,201,11
+ CONTROL "Include network drives..",IDC_MAPDRIVES_NET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,226,201,11
+ CONTROL "CDFS automount CD/DVD drives",IDC_MAPDRIVES_CD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,239,201,11
+ CONTROL "Disable UAEFSDB-support",IDC_NOUAEFSDB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,220,200,167,11
+ CONTROL "Don't use Windows Recycle Bin",IDC_NORECYCLEBIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,220,213,167,11
CONTROL "Automount removable drives [] Windows side insert or removal will immediately mount/remove it on Amiga side.",IDC_MAPDRIVES_AUTO,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,222,227,167,11
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,220,226,167,11
CONTROL "Limit size of directory drives to 1G [] Workaround for example old installers that calculate free space incorrectly if drive is large.",IDC_MAPDRIVES_LIMIT,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,222,241,167,11
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,220,239,167,11
GROUPBOX "Optical media options",IDC_STATIC,1,256,393,59
LTEXT "CD drive/image",IDC_STATIC,5,268,70,10,SS_CENTERIMAGE
PUSHBUTTON "Select image file",IDC_CD_SELECT,177,266,98,15
COMBOBOX IDC_SOUNDFILTER,279,186,96,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
GROUPBOX "Floppy Drive Sound Emulation",IDC_STATIC,1,209,278,91
CONTROL "",IDC_SOUNDDRIVEVOLUME,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,20,227,107,19
- EDITTEXT IDC_SOUNDDRIVEVOLUME2,144,231,48,12,ES_CENTER | ES_READONLY
+ EDITTEXT IDC_SOUNDDRIVEVOLUME2,145,231,48,12,ES_CENTER | ES_READONLY
+ LTEXT "Empty drive",IDC_STATIC,205,231,60,15,SS_CENTERIMAGE
CONTROL "",IDC_SOUNDDRIVEVOLUMEX,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,20,254,107,19
- EDITTEXT IDC_SOUNDDRIVEVOLUMEX2,144,258,48,12,ES_CENTER | ES_READONLY
- COMBOBOX IDC_SOUNDDRIVE,205,231,66,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- COMBOBOX IDC_SOUNDDRIVESELECT,18,281,253,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ EDITTEXT IDC_SOUNDDRIVEVOLUMEX2,145,258,48,12,ES_CENTER | ES_READONLY
+ LTEXT "Disk in drive",IDC_STATIC,205,258,60,15,SS_CENTERIMAGE
+ COMBOBOX IDC_SOUNDDRIVESELECT,18,281,175,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_SOUNDDRIVE,205,281,66,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
GROUPBOX "Drivers",IDC_STATIC,285,213,109,87
CONTROL "DirectSound",IDC_SOUND_DS,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,292,234,98,10
CONTROL "WASAPI",IDC_SOUND_WASAPI,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,292,248,98,10
GROUPBOX "Serial Port",IDC_STATIC,1,137,393,51
COMBOBOX IDC_SERIAL,67,150,317,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL "Shared",IDC_SER_SHARED,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,32,171,66,12
- CONTROL "RTS/CTS",IDC_SER_CTSRTS,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,106,171,66,12
+ CONTROL "RTS/CTS",IDC_SER_CTSRTS,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,107,171,66,12
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
+ "Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,182,171,83,12
+ CONTROL "uaeserial.device",IDC_UAESERIAL,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,274,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
COMBOBOX IDC_PORT1_JOYSMODE,136,74,106,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Remap / Test [] Remap or test Port 2 configuration.",IDC_PORT1_REMAP,310,74,78,14
PUSHBUTTON "Swap ports [] Swap ports 1 and 2.",IDC_SWAP,45,100,78,14
+ CONTROL "Mouse/Joystick autoswitching [] Press button to automatically insert inactive input device in to joystick/mouse port",IDC_PORT_AUTOSWITCH,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,136,102,172,11
LTEXT "Emulated parallel port joystick adapter",IDC_STATIC,10,124,179,15,SS_CENTERIMAGE
COMBOBOX IDC_PORT2_JOYS,45,142,342,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Remap / Test [] Remap or test Parallel port joystick port 1 configurarion.",IDC_PORT2_REMAP,310,159,78,14
COMBOBOX IDC_PORT3_JOYS,45,178,342,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Remap / Test [] Remap or test Parallel port joystick port 2 configurarion.",IDC_PORT3_REMAP,310,194,78,14
GROUPBOX "Mouse extra settings",IDC_STATIC,1,219,393,68
- RTEXT "Mouse speed:",IDC_STATIC,19,237,82,10,SS_CENTERIMAGE
- EDITTEXT IDC_INPUTSPEEDM,115,237,25,13,ES_NUMBER
- 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
+ RTEXT "Mouse speed:",IDC_STATIC,13,237,70,10,SS_CENTERIMAGE
+ EDITTEXT IDC_INPUTSPEEDM,97,237,25,13,ES_NUMBER
CONTROL "Install virtual mouse driver",IDC_PORT_TABLET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,270,116,11
+ RTEXT "Mouse untrap mode:",IDC_STATIC,143,237,110,10,SS_CENTERIMAGE
+ COMBOBOX IDC_MOUSE_UNTRAPMODE,268,234,119,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ RTEXT "Magic Mouse cursor mode:",IDC_STATIC,143,253,110,10,SS_CENTERIMAGE
+ COMBOBOX IDC_PORT_TABLET_CURSOR,268,251,119,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL "Full tablet input emulation",IDC_PORT_TABLET_FULL,
"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
- CONTROL "Mouse/Joystick autoswitching [] Press button to automatically insert inactive input device in to joystick/mouse port",IDC_PORT_AUTOSWITCH,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,136,102,172,11
END
IDD_CONTRIBUTORS DIALOGEX 0, 0, 530, 345
PUSHBUTTON "Contributors",IDC_CONTRIBUTORS,132,100,80,15
CONTROL "",IDC_AMIGAHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,116,168,112,24
CONTROL "",IDC_WINUAEHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,231,168,112,24
- CONTROL "",IDC_THEROOTS,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,117,225,112,24
CONTROL "",IDC_CAPS,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,174,196,112,24
CONTROL "",IDC_ABIME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,60,196,112,24
CONTROL "",IDC_CLOANTOHOME,"RICHEDIT",TCS_SCROLLOPPOSITE | TCS_RAGGEDRIGHT | TCS_MULTISELECT | WS_DISABLED,2,168,112,24
EDITTEXT IDC_RESERVED,347,111,40,15,ES_NUMBER
RTEXT "Block size:",IDC_BLOCKSIZE_TEXT,299,132,45,10
EDITTEXT IDC_BLOCKSIZE,347,130,40,15,ES_NUMBER
- PUSHBUTTON "RDB mode",IDC_HDF_RDB,135,109,75,14
LTEXT "HD Controller:",IDC_STATIC,10,113,54,10,SS_CENTERIMAGE
+ PUSHBUTTON "RDB mode",IDC_HDF_RDB,135,109,75,14
+ COMBOBOX IDC_HDF_FEATURE_LEVEL,214,109,75,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_HDF_CONTROLLER,6,131,152,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_HDF_CONTROLLER_UNIT,163,131,63,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_HDF_CONTROLLER_TYPE,231,131,58,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- COMBOBOX IDC_HDF_FEATURE_LEVEL,214,109,75,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
EDITTEXT IDC_HDFINFO,5,150,385,12,ES_CENTER | ES_READONLY
EDITTEXT IDC_HDFINFO2,5,166,385,12,ES_CENTER | ES_READONLY
GROUPBOX "New hard disk image file",IDC_STATIC,2,190,392,62
PUSHBUTTON "Create",IDC_HF_CREATE,58,206,80,14
COMBOBOX IDC_HF_TYPE,58,230,80,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- EDITTEXT IDC_HF_SIZE,154,206,61,15,ES_NUMBER
+ EDITTEXT IDC_HF_SIZE,154,206,61,15
LTEXT "MB",IDC_STATIC,220,209,53,10,SS_CENTERIMAGE
EDITTEXT IDC_HF_DOSTYPE,154,229,61,15
LTEXT "DOS type",IDC_STATIC,222,231,51,10,SS_CENTERIMAGE
PUSHBUTTON "Cancel",IDCANCEL,201,57,48,15
END
-IDD_CHIPSET DIALOGEX 0, 0, 396, 192
+IDD_CHIPSET DIALOGEX 0, 0, 396, 287
STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,114,31,86,10
CONTROL "NTSC [] North American and Japanese display standard, 60Hz refresh rate. Other countries use PAL (50Hz. display refresh rate)",IDC_NTSC,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,47,86,10
+ CONTROL "Cycle-exact (Full) [] The most compatible A500/A1200 emulation mode.",IDC_CYCLEEXACT,
+ "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,12,68,194,10
CONTROL "Cycle-exact (DMA/Memory accesses)",IDC_CYCLEEXACTMEMORY,
"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,12,81,194,10
RTEXT "Chipset Extra:",IDC_STATIC,72,108,71,15,SS_CENTERIMAGE
COMBOBOX IDC_CS_EXT,148,109,49,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
GROUPBOX "Options",IDC_STATIC,221,0,173,137
+ CONTROL "Keyboard connected",IDC_KEYBOARD_CONNECTED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,234,15,150,10
CONTROL "Immediate Blitter [] Faster but less compatible blitter emulation.",IDC_BLITIMM,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,234,16,150,10
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,234,47,150,10
CONTROL "Wait for Blitter [] Compatibility hack for programs that don't wait for the blitter correctly, causing graphics corruption if CPU is too fast.",IDC_BLITWAIT,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,234,29,150,10
- CONTROL "Genlock connected [] Allow boot sequence to detect genlock. Genlock is not emulated.",IDC_GENLOCK,
- "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,234,42,150,10
- LTEXT "Video port display hardware:",IDC_STATIC,237,97,117,15,SS_CENTERIMAGE
- COMBOBOX IDC_MONITOREMU,237,115,147,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,234,60,150,10
+ LTEXT "Video port display hardware:",IDC_STATIC,237,91,117,15,SS_CENTERIMAGE
+ COMBOBOX IDC_MONITOREMU,237,109,147,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
GROUPBOX "Collision Level",IDC_STATIC,1,141,393,48
CONTROL "None [] Collision hardware emulation disabled.",IDC_COLLISION0,
"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,47,157,101,10
"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,182,157,181,10
CONTROL "Full [] 100% collision hardware emulation. Only very few games need this option. Slowest.",IDC_COLLISION3,
"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,182,172,181,10
- LTEXT "Genlock emulation mode",IDC_STATIC,237,59,117,15,SS_CENTERIMAGE
- COMBOBOX IDC_GENLOCKMODE,237,77,103,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- COMBOBOX IDC_GENLOCKMIX,346,77,38,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- CONTROL "Cycle-exact (Full) [] The most compatible A500/A1200 emulation mode.",IDC_CYCLEEXACT,
- "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,12,68,194,10
+ GROUPBOX "Genlock",IDC_STATIC,0,195,393,85
+ CONTROL "Genlock connected [] Allow boot sequence to detect genlock.",IDC_GENLOCK,
+ "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,13,211,109,10
+ COMBOBOX IDC_GENLOCKMODE,129,209,192,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_GENLOCKMIX,330,209,54,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ CONTROL "Include alpha channel in screenshots and video captures.",IDC_GENLOCK_ALPHA,
+ "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,13,227,214,10
+ COMBOBOX IDC_GENLOCKFILE,12,258,356,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
+ PUSHBUTTON "...",IDC_GENLOCKFILESELECT,375,257,10,15
+ CONTROL "Keep aspect ratio",IDC_GENLOCK_KEEP_ASPECT,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,13,242,214,10
END
IDD_CHIPSET2 DIALOGEX 0, 0, 396, 305
CONTROL "Compatible Settings",IDC_CS_COMPATIBLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,6,234,10
GROUPBOX "Battery Backed Up Real Time Clock",IDC_STATIC,1,22,394,31
CONTROL "None",IDC_CS_RTC1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,15,36,57,10
- CONTROL "MSM6242B",IDC_CS_RTC2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,90,36,77,10
- CONTROL "RF5C01A",IDC_CS_RTC3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,171,36,67,10
- CONTROL "A2000 MSM6242B",IDC_CS_RTC4,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,242,36,78,10
+ CONTROL "MSM6242B",IDC_CS_RTC2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,80,36,77,10
+ CONTROL "RF5C01A",IDC_CS_RTC3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,165,36,67,10
+ CONTROL "A2000 MSM6242B",IDC_CS_RTC4,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,240,36,78,10
EDITTEXT IDC_CS_RTCADJUST,325,34,64,13,ES_AUTOHSCROLL
GROUPBOX "CIA-A TOD Clock Source",IDC_STATIC,1,56,394,29
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
+ CONTROL "Power Supply 60Hz",IDC_CS_CIAA_TOD3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,248,68,116,10
GROUPBOX "Chipset Features",IDC_STATIC,0,88,395,128
- 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 "CIA ROM Overlay",IDC_CS_CIAOVERLAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,104,104,11
+ CONTROL "CD32 CD",IDC_CS_CD32CD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,117,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
- CONTROL "CIA TOD bug",IDC_CS_CIATODBUG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,184,104,11
- CONTROL "1M Chip / 0.5M+0.5M",IDC_CS_1MCHIPJUMPER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,197,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 "ROM Mirror (E0)",IDC_CS_KSMIRROR_E0,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,156,104,11
+ CONTROL "KB Reset Warning",IDC_CS_RESETWARNING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,169,104,11
+ CONTROL "CIA TOD bug",IDC_CS_CIATODBUG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,182,104,11
+ CONTROL "1M Chip / 0.5M+0.5M",IDC_CS_1MCHIPJUMPER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,195,104,11
+ CONTROL "A1000 Boot RAM/ROM",IDC_CS_A1000RAM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,127,104,121,11
+ CONTROL "CD32 C2P",IDC_CS_CD32C2P,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,127,117,121,11
+ CONTROL "CDTV SRAM",IDC_CS_CDTVRAM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,127,130,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 "Z3 Autoconfig",IDC_CS_Z3AUTOCONFIG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,127,184,104,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 "ROM Mirror (A8)",IDC_CS_KSMIRROR_A8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,127,156,121,11
+ CONTROL "No-EHB Denise",IDC_CS_NOEHB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,127,169,121,11
+ CONTROL "Z3 Autoconfig",IDC_CS_Z3AUTOCONFIG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,127,182,104,11
+ CONTROL "Custom register byte write bug",IDC_CS_BYTECUSTOMWRITEBUG,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,127,195,130,11
+ CONTROL "DF0: ID Hardware",IDC_CS_DF0IDHW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,104,125,11
+ CONTROL "CD32 NVRAM",IDC_CS_CD32NVRAM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,117,125,11
+ CONTROL "CDTV SRAM Expansion",IDC_CS_CDTVRAMEXP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,130,125,11
CONTROL "CDTV-CR",IDC_CS_CDTVCR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,143,123,11
CONTROL "PCMCIA",IDC_CS_PCMCIA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,156,125,11
- CONTROL "C00000 is Fast RAM",IDC_CS_SLOWISFAST,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,170,125,11
- CONTROL "A1000 Agnus (8361/8367)",IDC_CS_DIPAGNUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,184,125,11
+ CONTROL "C00000 is Fast RAM",IDC_CS_SLOWISFAST,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,169,125,11
+ CONTROL "A1000 Agnus (8361/8367)",IDC_CS_DIPAGNUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,182,125,11
+ CONTROL "Composite color burst",IDC_CS_COMPOSITECOLOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,195,125,12
GROUPBOX "Internal SCSI Hardware",IDC_STATIC,0,218,395,39
CONTROL "A3000 WD33C93 SCSI",IDC_CS_DMAC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,236,108,11
- CONTROL "CDTV WD33C93 SCSI",IDC_CS_CDTVSCSI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,236,121,11
- CONTROL "A4000T NCR53C710 SCSI",IDC_CS_DMAC2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,127,236,125,11
+ CONTROL "A4000T NCR53C710 SCSI",IDC_CS_DMAC2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,130,236,125,11
+ CONTROL "CDTV WD33C93 SCSI",IDC_CS_CDTVSCSI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,263,236,121,11
GROUPBOX "Chipset Revision",IDC_STATIC,1,259,393,46
CONTROL "Ramsey revision:",IDC_CS_RAMSEY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,34,275,97,11
CONTROL "Fat Gary revision:",IDC_CS_FATGARY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,34,289,97,11
CONTROL "Denise/Lisa revision:",IDC_CS_DENISE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,200,289,107,11
EDITTEXT IDC_CS_AGNUSREV,311,274,45,13,ES_AUTOHSCROLL
EDITTEXT IDC_CS_DENISEREV,311,289,45,13,ES_AUTOHSCROLL
- CONTROL "Custom register byte write bug",IDC_CS_BYTECUSTOMWRITEBUG,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,127,197,130,11
- CONTROL "Composite color burst",IDC_CS_COMPOSITECOLOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,196,125,12
END
IDD_AVIOUTPUT DIALOGEX 0, 0, 396, 260
PUSHBUTTON "Delete",IDC_FILTERPRESETDELETE,325,272,55,14
END
-IDD_HARDDRIVE DIALOGEX 0, 0, 396, 109
+IDD_HARDDRIVE DIALOGEX 0, 0, 397, 136
STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Harddrive Settings"
FONT 8, "MS Sans Serif", 0, 0, 0x0
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,40,67,115,14
- EDITTEXT IDC_PATH_NAME,188,67,97,15,ES_AUTOHSCROLL | NOT WS_VISIBLE
+ DEFPUSHBUTTON "Create hard disk image file",IDC_HARDDRIVE_IMAGE,5,67,158,14
+ EDITTEXT IDC_PATH_NAME,178,67,97,15,ES_AUTOHSCROLL | NOT WS_VISIBLE
CONTROL "Read/write",IDC_HDF_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,315,71,60,10
- COMBOBOX IDC_HDF_CONTROLLER,8,89,164,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- COMBOBOX IDC_HDF_CONTROLLER_UNIT,179,89,25,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- DEFPUSHBUTTON "Add hard drive",IDOK,236,87,73,14
- PUSHBUTTON "Cancel",IDCANCEL,316,87,73,14
+ COMBOBOX IDC_HDF_CONTROLLER_UNIT,65,90,97,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_HDF_CONTROLLER_TYPE,178,90,97,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_HDF_FEATURE_LEVEL,291,90,97,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_HDF_CONTROLLER,8,113,218,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ DEFPUSHBUTTON "Add hard drive",IDOK,236,113,73,14
+ PUSHBUTTON "Cancel",IDCANCEL,316,113,73,14
END
IDD_MISC2 DIALOGEX 0, 0, 396, 278
CAPTION "WinUAE Properties"
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
- CONTROL "",IDC_PANELTREE,"SysTreeView32",TVS_HASLINES | TVS_SHOWSELALWAYS | TVS_TRACKSELECT | TVS_NOHSCROLL | WS_BORDER | WS_TABSTOP,3,5,110,321,WS_EX_CLIENTEDGE
- GROUPBOX "",IDC_PANEL_FRAME_OUTER,116,2,409,324
- GROUPBOX "",IDC_PANEL_FRAME,119,5,402,318,NOT WS_VISIBLE
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
DEFPUSHBUTTON "OK",IDOK,375,328,47,14
PUSHBUTTON "Cancel",IDCANCEL,427,328,47,14
PUSHBUTTON "Help",IDHELP,479,328,47,14,WS_DISABLED
+ GROUPBOX "",IDC_PANEL_FRAME_OUTER,116,2,409,324
+ GROUPBOX "",IDC_PANEL_FRAME,119,5,402,318,NOT WS_VISIBLE
+ CONTROL "",IDC_PANELTREE,"SysTreeView32",TVS_HASLINES | TVS_SHOWSELALWAYS | TVS_TRACKSELECT | TVS_NOHSCROLL | WS_BORDER | WS_TABSTOP,3,5,110,321,WS_EX_CLIENTEDGE
END
IDD_PATHS DIALOGEX 0, 0, 396, 303
BEGIN
GROUPBOX "RTG Graphics Card",IDC_STATIC,1,0,393,189
COMBOBOX IDC_RTG_Z2Z3,26,14,215,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_RTG_NUM,248,14,37,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
RTEXT "VRAM size: [] Graphics card memory. Required for RTG (Picasso96) emulation.",IDC_GFXCARDTEXT,2,35,76,10,SS_NOTIFY | SS_CENTERIMAGE
CONTROL "",IDC_P96MEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,88,31,103,20
EDITTEXT IDC_P96RAM,201,34,40,12,ES_CENTER | ES_READONLY
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
- CTEXT "Color modes:",IDC_STATIC,295,9,83,10,SS_CENTERIMAGE
- COMBOBOX IDC_RTG_8BIT,296,23,82,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- COMBOBOX IDC_RTG_16BIT,296,40,82,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- COMBOBOX IDC_RTG_24BIT,296,58,82,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- COMBOBOX IDC_RTG_32BIT,296,75,82,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ CTEXT "Color modes:",IDC_STATIC,295,18,83,10,SS_CENTERIMAGE
+ COMBOBOX IDC_RTG_8BIT,296,33,82,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_RTG_16BIT,296,50,82,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_RTG_24BIT,296,68,82,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_RTG_32BIT,296,85,82,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_RTG_DISPLAYSELECT,11,125,371,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
CTEXT "Refresh rate:",IDC_STATIC,30,149,83,10,SS_CENTERIMAGE
COMBOBOX IDC_RTG_VBLANKRATE,29,162,84,150,CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
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
- 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 "Exit",IDC_INPUTMAP_EXIT,338,324,80,14
+ COMBOBOX IDC_INPUTMAPADD,2,309,247,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ PUSHBUTTON "Add Event",IDC_INPUTMAP_CUSTOM,253,308,79,14
+ PUSHBUTTON "Autofire",IDC_INPUTMAP_SPECIALS,338,308,79,14
+ PUSHBUTTON "Test",IDC_INPUTMAP_TEST,1,325,80,14
+ PUSHBUTTON "Remap",IDC_INPUTMAP_CAPTURE,85,325,80,14
+ PUSHBUTTON "Delete",IDC_INPUTMAP_DELETE,169,325,80,14
+ PUSHBUTTON "Delete all",IDC_INPUTMAP_DELETEALL,253,325,80,14
+ PUSHBUTTON "Exit",IDC_INPUTMAP_EXIT,338,325,79,14
END
IDD_INFOBOX DIALOGEX 0, 0, 420, 68
IDD_LIST DIALOGEX 0, 0, 316, 206
STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Select Qualifiers"
+CAPTION "Options"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "OK",IDOK,205,185,50,14
EDITTEXT IDC_DISKINFOBOX,5,4,481,292,ES_MULTILINE | ES_READONLY | WS_VSCROLL
END
-IDD_EXPANSION2 DIALOGEX 0, 0, 396, 315
+IDD_EXPANSION2 DIALOGEX 0, 0, 396, 248
STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
FONT 8, "MS Sans Serif", 0, 0, 0x1
BEGIN
- RTEXT "Accelerator board memory:",IDC_STATIC,155,144,104,15,SS_CENTERIMAGE
- CONTROL "",IDC_CPUBOARDMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,269,141,68,20
- EDITTEXT IDC_CPUBOARDRAM,343,146,40,12,ES_CENTER | ES_READONLY
- COMBOBOX IDC_CPUBOARD_TYPE,13,117,117,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- COMBOBOX IDC_CPUBOARD_SUBTYPE,13,136,117,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
GROUPBOX "Expansion Board Settings",IDC_STATIC,1,6,394,88
- COMBOBOX IDC_SCSIROMSELECTNUM,175,42,22,75,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_SCSIROMSELECTCAT,12,23,157,75,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_SCSIROMSELECT,12,42,157,75,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
- CONTROL "Autoboot disabled",IDC_SCSIROMFILEAUTOBOOT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,202,62,99,12
- RTEXT "SCSI controller ID:",IDC_STATIC,241,23,110,15,SS_CENTERIMAGE
+ COMBOBOX IDC_SCSIROMSUBSELECT,12,59,157,75,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_EXPANSIONBOARDITEMSELECTOR,12,76,157,75,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_SCSIROMSELECTNUM,175,42,22,75,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
+ RTEXT "Controller ID:",IDC_STATIC,241,23,110,15,SS_CENTERIMAGE
COMBOBOX IDC_SCSIROMID,356,24,29,75,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
- COMBOBOX IDC_SCSIROMFILE,202,42,171,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "...",IDC_SCSIROMCHOOSER,376,42,10,15
- COMBOBOX IDC_SCSIROMSUBSELECT,12,59,157,75,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
- LTEXT "Accelerator board ROM file:",IDC_STATIC,203,104,170,15,SS_CENTERIMAGE
- COMBOBOX IDC_CPUBOARDROMFILE,202,119,169,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
+ CONTROL "Autoboot disabled",IDC_SCSIROMFILEAUTOBOOT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,202,62,99,12
+ CONTROL "",IDC_EXPANSIONBOARDCHECKBOX,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,202,76,99,12
+ COMBOBOX IDC_SCSIROMFILE,202,42,171,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
+ GROUPBOX "Accelerator Board Settings",IDC_STATIC,1,97,394,91
+ COMBOBOX IDC_CPUBOARD_TYPE,13,118,117,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_CPUBOARD_SUBTYPE,13,137,117,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_ACCELERATORBOARDITEMSELECTOR,12,169,157,75,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
+ RTEXT "Accelerator board memory:",IDC_STATIC,155,145,104,15,SS_CENTERIMAGE
+ LTEXT "Accelerator board ROM file:",IDC_STATIC,203,105,170,15,SS_CENTERIMAGE
+ COMBOBOX IDC_CPUBOARDROMFILE,202,120,169,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "...",IDC_CPUBOARDROMCHOOSER,376,119,10,15
- GROUPBOX "Accelerator Board Settings",IDC_STATIC,1,96,394,97
- GROUPBOX "Miscellaneous Expansions",IDC_STATIC,1,199,172,113
- 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,218,147,11
- CONTROL "uaescsi.device",IDC_SCSIDEVICE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,231,147,11
- CONTROL "CD32 Full Motion Video cartridge",IDC_CS_CD32FMV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,244,151,11
- CONTROL "Toccata Z2 sound card emulation",IDC_CS_TOCCATA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,257,151,11
- CONTROL "Toccata Paula/CD audio mix",IDC_CS_TOCCATAMIXER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,270,151,11
- GROUPBOX "Network",IDC_STATIC,181,199,213,113
+ CONTROL "",IDC_CPUBOARDMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,269,143,68,20
+ EDITTEXT IDC_CPUBOARDRAM,343,147,40,12,ES_CENTER | ES_READONLY
+ CONTROL "",IDC_ACCELERATORBOARDCHECKBOX,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,202,170,99,12
+ GROUPBOX "Miscellaneous Expansions",IDC_STATIC,1,192,394,51
CONTROL "bsdsocket.library [] bsdsocket network library emulation.",IDC_SOCKETS,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,202,217,187,11
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,207,187,11
+ CONTROL "uaescsi.device",IDC_SCSIDEVICE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,223,147,11
CONTROL "uaenet.device [] Sana 2 compatible network device emulation.",IDC_SANA2,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,202,231,187,11
- CONTROL "A2065 Z2 [] A2065 Ethernet Zorro II card emulation.",IDC_A2065,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,202,244,187,11
- COMBOBOX IDC_NETDEVICE,202,274,178,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- CONTROL "Include host SCSI devices",IDC_CS_SCSIMODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,202,296,147,11
- CONTROL "Realtek 8029 PCI [] Realtek 8029 PCI NIC emulation",IDC_NE2000,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,202,257,187,11
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,193,207,187,11
+ CONTROL "CD32 Full Motion Video cartridge",IDC_CS_CD32FMV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,193,223,151,11
CONTROL "Enabled",IDC_SCSIROMSELECTED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,202,43,99,12
- COMBOBOX IDC_SCSIROMSELECTCAT,12,23,157,75,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
- CONTROL "ES1370 PCI sound card",IDC_CS_ES1370,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,283,151,11
- CONTROL "FM801 PCI sound card",IDC_CS_FM801,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,296,151,11
- COMBOBOX IDC_EXPANSIONBOARDITEMSELECTOR,12,76,157,75,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
- CONTROL "",IDC_EXPANSIONBOARDCHECKBOX,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,202,76,99,12
COMBOBOX IDC_EXPANSIONBOARDSELECTOR,202,76,171,75,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
- COMBOBOX IDC_ACCELERATORBOARDITEMSELECTOR,12,168,157,75,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
- CONTROL "",IDC_ACCELERATORBOARDCHECKBOX,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,202,169,99,12
COMBOBOX IDC_ACCELERATORBOARDSELECTOR,202,169,171,75,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
END
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,4,0,0
+ PRODUCTVERSION 3,4,0,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
BLOCK "040904b0"
BEGIN
VALUE "FileDescription", "WinUAE"
- VALUE "FileVersion", "3.3.0.0"
+ VALUE "FileVersion", "3.4.0.0"
VALUE "InternalName", "WinUAE"
VALUE "LegalCopyright", "© 1996-2016 under the GNU Public License (GPL)"
VALUE "OriginalFilename", "WinUAE.exe"
VALUE "ProductName", "WinUAE"
- VALUE "ProductVersion", "3.3.0.0"
+ VALUE "ProductVersion", "3.4.0.0"
END
END
BLOCK "VarFileInfo"
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
+ IDD_BOARDS, DIALOG
+ BEGIN
+ END
+
IDD_KICKSTART, DIALOG
BEGIN
BOTTOMMARGIN, 258
IDD_MEMORY, DIALOG
BEGIN
+ BOTTOMMARGIN, 265
END
IDD_CPU, DIALOG
IDD_CHIPSET, DIALOG
BEGIN
+ BOTTOMMARGIN, 280
END
IDD_CHIPSET2, DIALOG
IDD_HARDDRIVE, DIALOG
BEGIN
+ RIGHTMARGIN, 396
END
IDD_MISC2, DIALOG
#endif // APSTUDIO_INVOKED
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
/////////////////////////////////////////////////////////////////////////////
//
// String Table
IDS_GAMEPORTS "Game ports"
IDS_EXPANSION "RTG board"
IDS_EXPANSION2 "Expansions"
+ IDS_BOARD "Hardware info"
END
STRINGTABLE
IDS_WSTYLE_STANDARD "Standard"
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\nOne second reboot pause\nFaster RTG\nClipboard sharing\nAllow native code\n"
+ IDS_MISCLISTITEMS2 "Main window always on top\nGUI window always on top\nDisable screensaver\nSynchronize clock\nOne second reboot pause\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\nBlack frame insertion\nMaster floppy write protection\nMaster harddrive 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."
"PPC native OS booted with incompatible UAE boot ROM enabled.\nSelect ROM panel ""New UAE (128k, ROM, Indirect)"" option\nor disable all UAE expansions.\n"
IDS_AUTOSCALE_OVERSCAN_BLANK "Overscan blanking"
IDS_SCREEN_ADAPTIVE_SYNC "Variable Sync"
+ IDS_NUMSG_NOMEMORY "Out of memory or too much Z3 autoconfig space configured.\nIf 64-bit, make sure RTG board is first in board list."
+ IDS_EXPANSION_CATEGORY "Built-in expansions\nSCSI controllers\nIDE controllers\nSASI controllers\nCustom controllers\nPCI bridgeboards\nx86 bridgeboards\nGraphics boards\nSound cards\nNetwork adapters\nDisk controllers"
END
#endif // English resources
/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-// Finnish (Finland) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FIN)
-LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT
-#pragma code_page(1252)
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE
-BEGIN
- "resource.h\0"
-END
-
-2 TEXTINCLUDE
-BEGIN
- "\0"
-END
-
-3 TEXTINCLUDE
-BEGIN
- "\r\n"
- "\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-#endif // Finnish (Finland) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
return;
#ifdef ARCADIA
- if (alg_flag) {
- alg_serial_read(serdatshift);
+ if (alg_flag || currprefs.genlock_image >= 7) {
+ ld_serial_read(serdatshift);
}
#endif
#ifdef SERIAL_MAP
}
// if someone uses serial port as some kind of timer..
- if (currprefs.cpu_cycle_exact) {
+ if (currprefs.cpu_memory_cycle_exact) {
int per;
bits = 16 + 1;
hsyncstuff();
#endif
#ifdef ARCADIA
- if (alg_flag && !data_in_serdatr) {
- int ch = alg_serial_write();
+ if ((alg_flag || currprefs.genlock_image >= 7) && !data_in_serdatr) {
+ int ch = ld_serial_write();
if (ch >= 0) {
serdatr = ch | 0x100;
data_in_serdatr = 1;
#endif
#define WINDOWS
#define ZLIB_WINAPI
-//#define USE_SOFT_LONG_DOUBLE
#define PACKAGE_STRING "WinUAE"
#ifndef UAE_MINI
SystemInfo.wProcessorArchitecture, SystemInfo.wProcessorLevel, SystemInfo.wProcessorRevision,
SystemInfo.dwNumberOfProcessors, filedate, os_touch);
write_log (_T("\n(c) 1995-2001 Bernd Schmidt - Core UAE concept and implementation.")
- _T("\n(c) 1998-2016 Toni Wilen - Win32 port, core code updates.")
+ _T("\n(c) 1998-2017 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.")
extern float sound_sync_multiplier;
extern int log_cd32;
extern int scanline_adjust;
+extern int log_ld;
extern DWORD_PTR cpu_affinity, cpu_paffinity;
static DWORD_PTR original_affinity = -1;
slirp_debug = getval (np);
return 2;
}
+ if (!_tcscmp (arg, _T("ldlog"))) {
+ log_ld = getval (np);
+ return 2;
+ }
if (!_tcscmp (arg, _T("vsyncbusywait"))) {
vsync_busy_wait_mode = getval (np);
return 2;
#define GETBDM(x) (((x) - ((x / 10000) * 10000)) / 100)
#define GETBDD(x) ((x) % 100)
-#define WINUAEPUBLICBETA 0
+#define WINUAEPUBLICBETA 1
#define LANG_DLL 1
#define LANG_DLL_FULL_VERSION_MATCH 1
#if WINUAEPUBLICBETA
-#define WINUAEBETA _T("0")
+#define WINUAEBETA _T("1")
#else
#define WINUAEBETA _T("")
#endif
-#define WINUAEDATE MAKEBD(2016, 12, 21)
+#define WINUAEDATE MAKEBD(2017, 2, 11)
//#define WINUAEEXTRA _T("AmiKit Preview")
//#define WINUAEEXTRA _T("Amiga Forever Edition")
return drvnum;
}
+HANDLE hdf_get_real_handle(struct hardfilehandle *h);
+
static int hfdcheck (TCHAR drive)
{
HANDLE h;
TCHAR tmp[16];
- int disknum, i;
+ int disknum;
_stprintf (tmp, _T("\\\\.\\%c:"), drive);
h = CreateFile (tmp, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
return 0;
disknum = getidfromhandle (h);
CloseHandle (h);
- for (i = 0; i < MAX_FILESYSTEM_UNITS; i++) {
+#if 0
+ for (int i = 0; i < MAX_FILESYSTEM_UNITS; i++) {
struct hardfiledata *hfd = get_hardfile_data (i);
int reopen = 0;
if (!hfd || !(hfd->flags & HFD_FLAGS_REALDRIVE) || !hfd->handle_valid)
continue;
- if (getidfromhandle (hfd->handle) == disknum)
- return 1;
+ HANDLE h2 = hdf_get_real_handle(hfd->handle);
+ if (h2) {
+ if (getidfromhandle (h2) == disknum)
+ return 1;
+ }
}
+#endif
return 0;
}
ret = 1;
} else if (deepscan && (find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
if (recursiveromscan < 0 || recursiveromscan > level) {
- if (_tcsicmp(find_data.cFileName, _T(".")) && _tcsicmp(find_data.cFileName, _T(".."))) {
+ if (find_data.cFileName[0] != '.') {
_tcscat(tmppath, _T("\\"));
scan_roms_2(fkey, tmppath, deepscan, level + 1);
}
_tcscpy(prefs->genlock_image_file, full_path);
fullpath(prefs->genlock_image_file, sizeof prefs->genlock_image_file / sizeof(TCHAR));
DISK_history_add(prefs->genlock_image_file, -1, HISTORY_GENLOCK_IMAGE, 0);
- } else if (workprefs.genlock_image == 4 || workprefs.genlock_image == 6) {
+ } else if (workprefs.genlock_image == 4 || workprefs.genlock_image >= 6) {
_tcscpy(prefs->genlock_video_file, full_path);
fullpath(prefs->genlock_video_file, sizeof prefs->genlock_video_file / sizeof(TCHAR));
DISK_history_add(prefs->genlock_video_file, -1, HISTORY_GENLOCK_VIDEO, 0);
// flag = 18 for Tape image
// flag = 20 for genlock image
// flag = 21 for genlock video
+// flag = 22 for floppy replacement (missing statefile)
+
int DiskSelection_2 (HWND hDlg, WPARAM wParam, int flag, struct uae_prefs *prefs, TCHAR *path_out, int *multi)
{
static int previousfilter[20];
{
case 0:
case 1:
+ case 22:
getfilter (flag, _T("FloppyPath"), previousfilter, filtername);
fetch_path (_T("FloppyPath"), init_path, sizeof (init_path) / sizeof (TCHAR));
guid = &diskselectionguids[0];
memcpy (szFilter + _tcslen (szFilter), DISK_FORMAT_STRING, sizeof (DISK_FORMAT_STRING) + sizeof (TCHAR));
defext = _T("adf");
break;
+ case 22:
+ _tcscpy(szTitle, prefs->floppyslots[wParam - IDC_DF0].df);
+ WIN32GUI_LoadUIString (IDS_ADF, szFormat, MAX_DPATH);
+ _stprintf (szFilter, _T("%s "), szFormat);
+ memcpy (szFilter + _tcslen (szFilter), DISK_FORMAT_STRING, sizeof (DISK_FORMAT_STRING) + sizeof (TCHAR));
+ defext = _T("adf");
+ break;
case 1:
WIN32GUI_LoadUIString (IDS_CHOOSEBLANK, szTitle, MAX_DPATH);
WIN32GUI_LoadUIString (IDS_ADF, szFormat, MAX_DPATH);
break;
}
if (!nosavepath || 1) {
- if (flag == 0 || flag == 1) {
+ if (flag == 0 || flag == 1 || flag == 22) {
amiga_path = _tcsstr (openFileName.lpstrFile, openFileName.lpstrFileTitle);
if (amiga_path && amiga_path != openFileName.lpstrFile) {
*amiga_path = 0;
}
}
if (list) {
- inputdevice_get_widget_type (devnum, j, name);
+ inputdevice_get_widget_type (devnum, j, name, false);
TCHAR target[MAX_DPATH];
_tcscpy (target, name);
_tcscat (target, _T(", "));
for (i = 0; input_total_devices && i < inputdevice_get_widget_num (input_selected_device); i++) {
TCHAR name[100];
- inputdevice_get_widget_type (input_selected_device, i, name);
+ inputdevice_get_widget_type (input_selected_device, i, name, true);
lvstruct.mask = LVIF_TEXT | LVIF_PARAM;
lvstruct.pszText = name;
lvstruct.lParam = 0;
{ 4, IDS_QS_MODEL_A500P }, // "Amiga 500+"
{ 4, IDS_QS_MODEL_A600 }, // "Amiga 600"
{ 4, IDS_QS_MODEL_A1000 }, // "Amiga 1000"
- { 4, IDS_QS_MODEL_A1200 }, // "Amiga 1200"
+ { 5, IDS_QS_MODEL_A1200 }, // "Amiga 1200"
{ 2, IDS_QS_MODEL_A3000 }, // "Amiga 3000"
{ 1, IDS_QS_MODEL_A4000 }, // "Amiga 4000"
{ 0, }, //{ 1, IDS_QS_MODEL_A4000T }, // "Amiga 4000T"
- { 3, IDS_QS_MODEL_CD32 }, // "CD32"
+ { 4, IDS_QS_MODEL_CD32 }, // "CD32"
{ 4, IDS_QS_MODEL_CDTV }, // "CDTV"
{ 4, IDS_QS_MODEL_ARCADIA }, // "Arcadia"
{ 1, IDS_QS_MODEL_UAE }, // "Expanded UAE example configuration"
ew(hDlg, IDC_GENLOCKMIX, workprefs.genlock ? TRUE : FALSE);
ew(hDlg, IDC_GENLOCK_ALPHA, workprefs.genlock ? TRUE : FALSE);
ew(hDlg, IDC_GENLOCK_KEEP_ASPECT, workprefs.genlock ? TRUE : FALSE);
- ew(hDlg, IDC_GENLOCKFILE, workprefs.genlock && (workprefs.genlock_image ==6 || (workprefs.genlock_image >= 3 && workprefs.genlock_image < 5)) ? TRUE : FALSE);
- ew(hDlg, IDC_GENLOCKFILESELECT, workprefs.genlock && (workprefs.genlock_image ==6 || (workprefs.genlock_image >= 3 && workprefs.genlock_image < 5)) ? TRUE : FALSE);
+ ew(hDlg, IDC_GENLOCKFILE, workprefs.genlock && (workprefs.genlock_image >= 6 || (workprefs.genlock_image >= 3 && workprefs.genlock_image < 5)) ? TRUE : FALSE);
+ ew(hDlg, IDC_GENLOCKFILESELECT, workprefs.genlock && (workprefs.genlock_image >= 6 || (workprefs.genlock_image >= 3 && workprefs.genlock_image < 5)) ? TRUE : FALSE);
}
static const int fakerefreshrates[] = { 50, 60, 100, 120, 0 };
setautocomplete(hDlg, IDC_GENLOCKFILE);
if (workprefs.genlock_image == 3) {
addhistorymenu(hDlg, workprefs.genlock_image_file, IDC_GENLOCKFILE, HISTORY_GENLOCK_IMAGE, true);
- } else if (workprefs.genlock_image == 4 || workprefs.genlock_image == 6) {
+ } else if (workprefs.genlock_image == 4 || workprefs.genlock_image >= 6) {
addhistorymenu(hDlg, workprefs.genlock_video_file, IDC_GENLOCKFILE, HISTORY_GENLOCK_VIDEO, true);
}
}
SendDlgItemMessage(hDlg, IDC_GENLOCKMODE, CB_ADDSTRING, 0, (LPARAM)_T("Video file"));
SendDlgItemMessage(hDlg, IDC_GENLOCKMODE, CB_ADDSTRING, 0, (LPARAM)_T("Capture device"));
SendDlgItemMessage(hDlg, IDC_GENLOCKMODE, CB_ADDSTRING, 0, (LPARAM)_T("American Laser Games LaserDisc Player"));
+ SendDlgItemMessage(hDlg, IDC_GENLOCKMODE, CB_ADDSTRING, 0, (LPARAM)_T("Sony LaserDisc Player"));
+ SendDlgItemMessage(hDlg, IDC_GENLOCKMODE, CB_ADDSTRING, 0, (LPARAM)_T("Pioneer LaserDisc Player"));
SendDlgItemMessage(hDlg, IDC_GENLOCKMIX, CB_RESETCONTENT, 0, 0);
for (int i = 0; i <= 10; i++) {
ew (hDlg, IDC_COMPATIBLE, !workprefs.cpu_memory_cycle_exact && !(workprefs.cachesize && workprefs.cpu_model >= 68040));
ew (hDlg, IDC_COMPATIBLE_FPU, workprefs.fpu_model > 0);
ew (hDlg, IDC_FPU_UNIMPLEMENTED, workprefs.fpu_model && !workprefs.cachesize);
+ ew (hDlg, IDC_FPU_SOFTFLOAT, workprefs.fpu_model && (!workprefs.compfpu || !workprefs.cachesize));
ew (hDlg, IDC_CPU_UNIMPLEMENTED, workprefs.cpu_model == 68060 && !workprefs.cachesize);
#if 0
ew (hDlg, IDC_CPU_MULTIPLIER, workprefs.cpu_cycle_exact);
CheckDlgButton (hDlg, IDC_COMPATIBLE24, workprefs.address_space_24);
CheckDlgButton (hDlg, IDC_COMPATIBLE_FPU, workprefs.fpu_strict);
CheckDlgButton (hDlg, IDC_FPU_UNIMPLEMENTED, !workprefs.fpu_no_unimplemented || workprefs.cachesize);
+ CheckDlgButton (hDlg, IDC_FPU_SOFTFLOAT, workprefs.fpu_softfloat);
CheckDlgButton (hDlg, IDC_CPU_UNIMPLEMENTED, !workprefs.int_no_unimplemented || workprefs.cachesize);
SendDlgItemMessage (hDlg, IDC_CPUIDLE, TBM_SETPOS, TRUE, workprefs.cpu_idle == 0 ? 0 : 12 - workprefs.cpu_idle / 15);
SendDlgItemMessage (hDlg, IDC_PPC_CPUIDLE, TBM_SETPOS, TRUE, workprefs.ppc_cpu_idle);
workprefs.cpu_compatible = workprefs.cpu_memory_cycle_exact | (ischecked (hDlg, IDC_COMPATIBLE) ? 1 : 0);
workprefs.fpu_strict = ischecked (hDlg, IDC_COMPATIBLE_FPU) ? 1 : 0;
workprefs.fpu_no_unimplemented = ischecked (hDlg, IDC_FPU_UNIMPLEMENTED) ? 0 : 1;
+ workprefs.fpu_softfloat = ischecked (hDlg, IDC_FPU_SOFTFLOAT) ? 1 : 0;
workprefs.int_no_unimplemented = ischecked (hDlg, IDC_CPU_UNIMPLEMENTED) ? 0 : 1;
workprefs.address_space_24 = ischecked (hDlg, IDC_COMPATIBLE24) ? 1 : 0;
workprefs.m68k_speed = ischecked (hDlg, IDC_CS_HOST) ? -1 : 0;
workprefs.comptrustlong = trust_prev;
workprefs.comptrustnaddr = trust_prev;
}
- if (!workprefs.cachesize)
+ if (!workprefs.cachesize) {
setchecked (hDlg, IDC_JITENABLE, false);
+ }
+ if (workprefs.cachesize && workprefs.compfpu && workprefs.fpu_softfloat) {
+ workprefs.fpu_softfloat = false;
+ setchecked(hDlg, IDC_FPU_SOFTFLOAT, false);
+ }
if (oldcache == 0 && workprefs.cachesize > 0) {
canbang = 1;
}
if (posn != CB_ERR) {
current_tapedlg.ci.controller_type = posn % HD_CONTROLLER_NEXT_UNIT;
current_tapedlg.ci.controller_type_unit = posn / HD_CONTROLLER_NEXT_UNIT;
+ if (current_tapedlg.ci.controller_type == HD_CONTROLLER_TYPE_PCMCIA)
+ current_tapedlg.ci.controller_type_unit = 1;
inithdcontroller(hDlg, current_tapedlg.ci.controller_type, current_tapedlg.ci.controller_type_unit, UAEDEV_TAPE);
SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER_UNIT, CB_SETCURSEL, current_tapedlg.ci.controller_type != HD_CONTROLLER_TYPE_PCMCIA ? current_tapedlg.ci.controller_unit : current_tapedlg.ci.controller_type_unit, 0);
}
if (posn != CB_ERR) {
current_cddlg.ci.controller_type = posn % HD_CONTROLLER_NEXT_UNIT;
current_cddlg.ci.controller_type_unit = posn / HD_CONTROLLER_NEXT_UNIT;
+ if (current_cddlg.ci.controller_type == HD_CONTROLLER_TYPE_PCMCIA)
+ current_cddlg.ci.controller_type_unit = 1;
inithdcontroller(hDlg, current_cddlg.ci.controller_type, current_cddlg.ci.controller_type_unit, UAEDEV_CD);
SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER_UNIT, CB_SETCURSEL, current_cddlg.ci.controller_type != HD_CONTROLLER_TYPE_PCMCIA ? current_cddlg.ci.controller_unit : current_cddlg.ci.controller_type_unit, 0);
}
if (posn != CB_ERR) {
current_hfdlg.ci.controller_type = posn % HD_CONTROLLER_NEXT_UNIT;
current_hfdlg.ci.controller_type_unit = posn / HD_CONTROLLER_NEXT_UNIT;
+ if (current_hfdlg.ci.controller_type == HD_CONTROLLER_TYPE_PCMCIA)
+ current_hfdlg.ci.controller_type_unit = 1;
inithdcontroller(hDlg, current_hfdlg.ci.controller_type, current_hfdlg.ci.controller_type_unit, UAEDEV_HDF);
sethardfile(hDlg);
}
sethardfiletypes(hDlg);
inithdcontroller(hDlg, current_hfdlg.ci.controller_type, current_hfdlg.ci.controller_type_unit, UAEDEV_HDF);
CheckDlgButton (hDlg, IDC_HDF_RW, !current_hfdlg.ci.readonly);
+ CheckDlgButton (hDlg, IDC_HDF_LOCK, current_hfdlg.ci.lock);
SendDlgItemMessage (hDlg, IDC_HARDDRIVE, CB_RESETCONTENT, 0, 0);
ew (hDlg, IDC_HARDDRIVE_IMAGE, FALSE);
ew (hDlg, IDOK, FALSE);
current_hfdlg.ci.readonly = (ischecked (hDlg, IDC_HDF_RW) && !dang) ? false : true;
}
break;
+ case IDC_HDF_LOCK:
+ posn = SendDlgItemMessage (hDlg, IDC_HARDDRIVE, CB_GETCURSEL, 0, 0);
+ if (posn != CB_ERR) {
+ int dang = 1;
+ hdf_getnameharddrive (posn, 1, NULL, &dang);
+ current_hfdlg.ci.lock = ischecked (hDlg, IDC_HDF_LOCK);
+ }
+ break;
}
}
if (LOWORD (wParam) == IDC_HARDDRIVE) {
return out[0] ? 1 : 0;
}
+bool gui_ask_disk(int drv, TCHAR *name)
+{
+ _tcscpy(changed_prefs.floppyslots[drv].df, name);
+ DiskSelection (hAmigaWnd, IDC_DF0 + drv, 22, &changed_prefs, 0);
+ _tcscpy(name, changed_prefs.floppyslots[drv].df);
+ return true;
+}
+
static void getfloppyname (HWND hDlg, int n, int cd, int f_text)
{
TCHAR tmp[MAX_DPATH];
int od = input_selected_device;
input_selected_device = devnum;
input_selected_widget = wtype;
- int type = inputdevice_get_widget_type (input_selected_device, input_selected_widget, NULL);
+ int type = inputdevice_get_widget_type (input_selected_device, input_selected_widget, NULL, false);
if (inputmap == 3) { // ports panel / add custom
int mode;
found = 0;
for (int i = 0; i < wcnt; i++) {
input_selected_widget = widgets[i];
- type = inputdevice_get_widget_type (input_selected_device, input_selected_widget, NULL);
+ type = inputdevice_get_widget_type (input_selected_device, input_selected_widget, NULL, false);
if (type == IDEV_WIDGET_BUTTONAXIS) {
found = 1;
break;
if (!found) {
for (int i = 0; i < wcnt; i++) {
input_selected_widget = widgets[i];
- type = inputdevice_get_widget_type (input_selected_device, input_selected_widget, NULL);
+ type = inputdevice_get_widget_type (input_selected_device, input_selected_widget, NULL, false);
if (type == IDEV_WIDGET_AXIS) {
found = 2;
break;
}
for (int i = 0; i < wcnt; i++) {
- int typex = inputdevice_get_widget_type (input_selected_device, widgets[i], NULL);
+ int typex = inputdevice_get_widget_type (input_selected_device, widgets[i], NULL, false);
if (typex == IDEV_WIDGET_AXIS) {
if (!found) {
found = 1;
if (!found) {
for (int i = 0; i < wcnt; i++) {
input_selected_widget = widgets[i];
- type = inputdevice_get_widget_type (input_selected_device, input_selected_widget, NULL);
+ type = inputdevice_get_widget_type (input_selected_device, input_selected_widget, NULL, false);
if (type == IDEV_WIDGET_BUTTON || type == IDEV_WIDGET_KEY) {
found = 1;
break;
(type == IDEV_WIDGET_AXIS && prevtype == IDEV_WIDGET_AXIS)) {
for (int i = 0; i < wcnt; i++) {
wtype = widgets[i];
- if (inputdevice_get_widget_type (input_selected_device, wtype, NULL) == IDEV_WIDGET_AXIS) {
+ if (inputdevice_get_widget_type (input_selected_device, wtype, NULL, false) == IDEV_WIDGET_AXIS) {
inputdevice_set_gameports_mapping (&workprefs, input_selected_device, prevwidget, -1, 0, inputmap_port, workprefs.input_selected_setting);
inputdevice_set_gameports_mapping (&workprefs, input_selected_device, wtype, axistable2[0], 0, inputmap_port, workprefs.input_selected_setting);
evtnum = -1;
ListView_SetItemState (h, inputmap_index, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
TCHAR tmp[256];
tmp[0] = 0;
- inputdevice_get_widget_type (input_selected_device, input_selected_widget, tmp);
+ inputdevice_get_widget_type (input_selected_device, input_selected_widget, tmp, false);
_tcscat (tmp, _T(", "));
_tcscat (tmp, inputdevice_get_device_name2 (input_selected_device));
SetWindowText (GetDlgItem (hDlg, IDC_INPUTMAPOUT), tmp);
}
TCHAR tmp[256];
tmp[0] = 0;
- inputdevice_get_widget_type (input_selected_device, input_selected_widget, tmp);
+ inputdevice_get_widget_type (input_selected_device, input_selected_widget, tmp, false);
_tcscat (tmp, _T(", "));
_tcscat (tmp, inputdevice_get_device_name2 (input_selected_device));
SetWindowText (GetDlgItem (hDlg, IDC_INPUTMAPOUT), tmp);
<ClCompile Include="..\..\events.cpp" />
<ClCompile Include="..\..\fake86_cpu.cpp" />
<ClCompile Include="..\..\flashrom.cpp" />
+ <ClCompile Include="..\..\fpp_native.cpp" />
+ <ClCompile Include="..\..\fpp_softfloat.cpp" />
<ClCompile Include="..\..\framebufferboards.cpp" />
<ClCompile Include="..\..\gfxboard.cpp" />
<ClCompile Include="..\..\hrtmon.rom.cpp" />
<ClCompile Include="..\..\slirp\udp.cpp" />
<ClCompile Include="..\..\slirp_uae.cpp" />
<ClCompile Include="..\..\sndboard.cpp" />
+ <ClCompile Include="..\..\softfloat\softfloat.cpp" />
+ <ClCompile Include="..\..\softfloat\softfloat_extension.cpp" />
<ClCompile Include="..\..\specialmonitors.cpp" />
<ClCompile Include="..\..\statusline.cpp" />
<ClCompile Include="..\..\support\time.cpp" />
<ClCompile Include="..\win32_videograb.cpp">
<Filter>win32</Filter>
</ClCompile>
+ <ClCompile Include="..\..\fpp_native.cpp">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\fpp_softfloat.cpp">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\softfloat\softfloat.cpp">
+ <Filter>qemu</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\softfloat\softfloat_extension.cpp">
+ <Filter>qemu</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="..\resources\35floppy.ico">
- RTG VRAM is outside of reserved natmem space. Workaround: Move RTG in earlier position using Hardware info GUI panel.\r
Note that in 64-bit version RTG VRAM must be inside of reserved natmem space. (Outside = error message and return back to GUI)\r
\r
+Beta 1:\r
+\r
+- Quickstart Blizzard modes (except if JIT enabled) enabled 24-bit addressing which caused new autoconfig/fallback mode\r
+ support to think Blizzard is in 68020 fallback mode, disabling autoconfig.\r
+- Added Apollo 1240/1260 SCSI module installed on/off option.\r
+- IDE Identify drive command didn't reset multiple sector offset value. If previous read was partial multiple transfer,\r
+ identity drive returned previously read data block.\r
+- Added Lock drive option to real harddrive mount dialog. If checked, all partitions in selected drive will be locked\r
+ and unmounted when emulation is running, enabling full read/write access even if drive has Windows mounted FAT partition(s).\r
+ Lock will be ignored if drive has one or more NTFS partitions.\r
+- Lots of softfloat FPU mode and normal FPU mode fixes and updates. (Andreas Grabher and me)\r
+- Softfloat FPU mode added to GUI, supports on the fly switching.\r
+- Implemented accurate 68020+ T0 trace mode emulation. (Original one has not been changed for ages..)\r
+- Fixed crash when sound card audio play started and mono sound channel mode and "Include CD and FMV audio" was ticked.\r
+- 271b3 "Blitter final D write don't increase "nasty" count" That is not true, I think this was only added to fix demo\r
+ that randomly glitches on real hardware too.. Fixes intro Himalaya by Avalanche.\r
+- Added illegal instruction at the end of each memory bank allocation, just outside of last available byte to force\r
+ exception if execution falls of the edge of memory. This can happen if "more compatible" is not checked.\r
+ Currently this causes bus error exception. May become halt in the future.\r
+- Audio interrupts are delayed by 2 cycles, logic analyzer confirmed. Emulated only in cycle-exact mode. (Mission Elevator)\r
+- Emulated sprite special case when DMA mode sprite's start X-coordinate is less than sprite's DMA slot position.\r
+- Fixed AGA HAM6/8 behavior when BPLCON4 XOR value is non-zero. Planes 6 and 7 never affect palette selection if HAM8,\r
+ Planes 4 to 7 if HAM6. If HAM control bits select hold mode, selected direct R/G/B value bypasses XOR operation.\r
+ (Thanks to Dissident for test cases)\r
+- AGA EHB plane 6 half-brite selection bit is taken before BPLCON4 XOR adjustment. (Same)\r
+- HAM mode and BPLCON4 BPLAM bit changes or HAM mode and BPLCON4 sprite bank bit changes and sprites in same scanline\r
+ may have caused wrong sprite or HAM colors.\r
+- >2M chip RAM didn't work in non-JIT compatible modes.\r
+- Added -ldlog 1/2 command line parameter, logs all laserdisc commands.\r
+- Recursive mode ROM scanner now skips directories starting with dot.\r
+- HDF creator used old style dialog type.\r
+- 68030 CE/prefetch mode cache access fix.\r
+- JIT direct broke 512k and 1M chip RAM size detection.\r
+- If statefile is loaded with one or more floppy images that can't be opened: keep fake disk in drive (like previously)\r
+ and ask for new disk path when missing disk is accessed for the first time. (access = read or write attempt)\r
+ Old disk path is shown in disk dialog title bar.\r
+- SCSI emulation SCSI buffer re-sizing didn't handle READ(6) zero size length correctly.\r
+- Added memory cycle-exact Quickstart step for A1200 and CD32 configurations. Less CPU heavy than full cycle-exact and\r
+ usually not much more worse (or better). At least not until 68020 CE gets better.\r
+- Memory cycle exact mode incorrectly counted internal CPU cycles partially.\r
+- Memory cycle exact mode also enables more accurate custom chipset mode.\r
+- 68020 CE mode adjustments, fixed Chip RAM access speed (was too fast previously), removed all extra cycle\r
+ counting temporarily. Work in progress.\r
+- Include key scancode in Input panel key events.\r
+\r
+Softfloat FPU mode is now officially supported, Andreas Grabher (Previous) implemented required 6888x-specific\r
+features to softfloat support library. Only needed if "weird" features are required (denormals and unnormals, invalid\r
+operands) or extended precision (that WinUAE does not support due to MSVC not supporting it) or accurate status register\r
+flags or 100% accurate rounding/NaN handling, FMOD/FREM quotient etc.\r
+\r
+Arithmetic exceptions are not yet supported. Trigonometric and logarithmic functions are currently implemented\r
+using normal native C-library functions and won't return 100% same results as real 6888x.\r
+\r
+Not compatible with JIT FPU emulation.\r
+\r
+3.4.0\r
+\r
Beta 20:\r
\r
- Selecting item from HDF "history" drop down worked strangely depending on Windows version.\r
data_len = 8;
break;
case 0x08: // READ(6)
- data_len2 = sd->cmd[4] * sd->blocksize;
+ data_len2 = (sd->cmd[4] == 0 ? 256 : sd->cmd[4]) * sd->blocksize;
scsi_grow_buffer(sd, data_len2);
break;
case 0x28: // READ(10)
case 0x0a: // WRITE(6)
if (sd->device_type == UAEDEV_CD)
goto nocmd;
- data_len = sd->cmd[4] * sd->blocksize;
+ data_len = (sd->cmd[4] == 0 ? 256 : sd->cmd[4]) * sd->blocksize;
scsi_grow_buffer(sd, data_len);
break;
case 0x2a: // WRITE(10)
// APOLLO SOFTSCSI
-void apollo_scsi_bput(uaecptr addr, uae_u8 v)
+void apollo_scsi_bput(uaecptr addr, uae_u8 v, uae_u32 config)
{
struct soft_scsi *as = getscsiboard(addr);
if (!as)
//write_log(_T("apollo scsi put %04x = %02x\n"), addr, v);
}
-uae_u8 apollo_scsi_bget(uaecptr addr)
+uae_u8 apollo_scsi_bget(uaecptr addr, uae_u32 config)
{
struct soft_scsi *as = getscsiboard(addr);
if (!as)
v = raw_scsi_get_data(rs, true);
} else if (bank == 0x800 && (addr & 1)) {
uae_u8 t = raw_scsi_get_signal_phase(rs);
- v = 1; // disable switch off
+ v = 0;
+ if (config & 1) // scsi module installed
+ v |= 1;
if (t & SCSI_IO_BUSY)
v |= 128;
if (t & SCSI_IO_SEL)
}
+// PMX
+
+struct pmx_data
+{
+ bool enabled;
+ int configured;
+ uae_u8 acmemory[128];
+ int streamid;
+ struct romconfig *rc;
+ int reset_delay;
+ uae_u16 status;
+ bool dreq;
+ uae_u16 regs[16];
+};
+static struct pmx_data pmx[MAX_DUPLICATE_SOUND_BOARDS];
+
+static void pmx_reset_chip(struct pmx_data *data)
+{
+ for (int i = 0; i < 16; i++) {
+ data->regs[i] = 0;
+ }
+ data->regs[0] = 0x4000;
+ data->regs[1] = 0x000c;
+}
+
+static void REGPARAM2 pmx_bput(uaecptr addr, uae_u32 v)
+{
+ struct pmx_data *data = &pmx[0];
+ v &= 0xff;
+ write_log(_T("PMXBPUT %08x %02x %08x\n"), addr, v, M68K_GETPC);
+}
+
+static void REGPARAM2 pmx_wput(uaecptr addr, uae_u32 v)
+{
+ struct pmx_data *data = &pmx[0];
+ int reg = -1;
+ v &= 0xffff;
+ if (addr & 0x8000) {
+ reg = (addr >> 2) & 15;
+ data->regs[reg] = v;
+ } else {
+ data->status = v;
+ if (v & 0x8000) {
+ data->dreq = true;
+ data->reset_delay = 10;
+ }
+ }
+ write_log(_T("PMXWPUT %d %08x %04x %08x\n"), reg, addr, v, M68K_GETPC);
+}
+
+static void REGPARAM2 pmx_lput(uaecptr addr, uae_u32 v)
+{
+ write_log(_T("PMXLPUT %08x %08x %08x\n"), addr, v, M68K_GETPC);
+}
+
+static uae_u32 REGPARAM2 pmx_bget(uaecptr addr)
+{
+ struct pmx_data *data = &pmx[0];
+ uae_u8 v = 0;
+ data->dreq = !data->dreq;
+ if (!data->dreq)
+ v |= 1 << 3;
+ write_log(_T("PMXBGET %08x %02x %08x\n"), addr, v, M68K_GETPC);
+ return v;
+}
+static uae_u32 REGPARAM2 pmx_wget(uaecptr addr)
+{
+ struct pmx_data *data = &pmx[0];
+ uae_u16 v = 0;
+ int reg = -1;
+ if (addr & 0x8000) {
+ reg = (addr >> 2) & 15;
+ v = data->regs[reg];
+ if (reg == 1) {
+ v &= ~0x03f0;
+ v |= 0x0060; ;//revision
+ }
+ } else {
+ v = data->status;
+ }
+ write_log(_T("PMXWGET %d %08x %04x %08x\n"), reg, addr, v, M68K_GETPC);
+ return v;
+}
+static uae_u32 REGPARAM2 pmx_lget(uaecptr addr)
+{
+ write_log(_T("PMXLGET %08x %08x\n"), addr, M68K_GETPC);
+ return 0;
+}
+
+static addrbank pmx_bank = {
+ pmx_lget, pmx_wget, pmx_bget,
+ pmx_lput, pmx_wput, pmx_bput,
+ default_xlate, default_check, NULL, _T("*"), _T("PMX"),
+ dummy_lgeti, dummy_wgeti,
+ ABFLAG_IO | ABFLAG_SAFE, S_READ, S_WRITE
+};
+
+bool pmx_init (struct autoconfig_info *aci)
+{
+ struct pmx_data *data = &pmx[0];
+ const struct expansionromtype *ert = get_device_expansion_rom(ROMTYPE_PMX);
+ if (!ert)
+ return false;
+
+ aci->addrbank = &pmx_bank;
+ aci->autoconfig_automatic = true;
+
+ if (!aci->doinit) {
+ aci->autoconfigp = ert->autoconfig;
+ return true;
+ }
+
+ data->configured = 0;
+ data->streamid = 0;
+ memset(data->acmemory, 0xff, sizeof data->acmemory);
+ data->rc = aci->rc;
+ data->enabled = true;
+ for (int i = 0; i < 16; i++) {
+ uae_u8 b = ert->autoconfig[i];
+ ew(data->acmemory, i * 4, b);
+ }
+ memcpy(aci->autoconfig_raw, data->acmemory, sizeof data->acmemory);
+ return true;
+}
+
+void pmx_free(void)
+{
+ for (int j = 0; j < MAX_DUPLICATE_SOUND_BOARDS; j++) {
+ struct pmx_data *data = &pmx[j];
+ data->enabled = false;
+ }
+ sndboard_rethink();
+}
+
+void pmx_reset(void)
+{
+ for (int j = 0; j < MAX_DUPLICATE_SOUND_BOARDS; j++) {
+ struct pmx_data *data = &pmx[j];
+ if (data->enabled) {
+ }
+ }
+ sndboard_rethink();
+}
+
// TOCCATA
#define DEBUG_TOCCATA 0
else {
genlock_error = true;
}
- } else if (currprefs.genlock_image == 4 || currprefs.genlock_image == 6) {
+ } else if (currprefs.genlock_image == 4 || currprefs.genlock_image >= 6) {
if (currprefs.genlock_video_file[0]) {
genlock_blank = false;
if ((!genlock_video && !genlock_error) || _tcsicmp(currprefs.genlock_video_file, genlock_video_file)) {
}
genlock_blank = false;
}
+ if (currprefs.genlock_image >= 7) {
+ genlock_blank = false;
+ }
} else {
genlock_error = true;
}
genlock_image_data = NULL;
}
#if VIDEOGRAB
- if (genlock_video && currprefs.genlock_image != 4 && currprefs.genlock_image != 5 && currprefs.genlock_image != 6) {
+ if (genlock_video && currprefs.genlock_image != 4 && currprefs.genlock_image != 5 && currprefs.genlock_image < 6) {
uninitvideograb();
genlock_video = false;
}
isvideograb_status();
#endif
- if (currprefs.genlock_image != 4 && currprefs.genlock_image != 5 && currprefs.genlock_image != 6) {
+ if (currprefs.genlock_image != 4 && currprefs.genlock_image != 5 && currprefs.genlock_image < 6) {
genlock_video_file[0] = 0;
}
if (currprefs.genlock_image != 3) {
- 0 0 2 fea
1000 rrr0 11ss sSSS:000:?????:?????:13: DIVU.W s[Dreg],Dr
-- 2 0 54
+- 2 0 20
1000 rrr0 11ss sSSS:000:?????:?????:13: DIVU.W s[!Areg,Dreg],Dr
-- 0 0 54 fea
+- 0 0 20 fea
1000 rrr1 00dd dDDD:000:XxZxC:X-Z--:13: SBCD.B d[Dreg],Dr
- 0 0 4
- 2 1 11
1000 rrr1 11ss sSSS:000:?????:?????:13: DIVS.W s[Dreg],Dr
-- 2 0 54
+- 2 0 20
1000 rrr1 11ss sSSS:000:?????:?????:13: DIVS.W s[!Areg,Dreg],Dr
-- 0 0 54 fea
+- 0 0 20 fea
1001 rrr0 zzss sSSS:000:XNZVC:-----:13: SUB.z s[Areg,Dreg],Dr
- 2 0 2
1100 rrr0 zzss sSSS:000:-NZ00:-----:13: AND.z s[!Areg,Dreg],Dr
- 0 1 3 fea
1100 rrr0 11ss sSSS:000:-NZ00:-----:13: MULU.W s[!Areg],Dr
-- 2 0 25 fea
+- 2 0 12 fea
1100 rrr1 00dd dDDD:000:XxZxC:X-Z--:13: ABCD.B d[Dreg],Dr
- 0 0 4
1100 rrr1 10dd dDDD:000:-----:-----:33: EXG.L Dr,d[Areg]
- 4 0 4
1100 rrr1 11ss sSSS:000:-NZ00:-----:13: MULS.W s[!Areg],Dr
-- 2 0 25 fea
+- 2 0 12 fea
1101 rrr0 zzss sSSS:000:XNZVC:-----:13: ADD.z s[Areg,Dreg],Dr
- 2 0 2