puae 2.3.1

parent 757a8cc2
PUAE 2.3.0 beta series PUAE 2.3.1 beta series
============ ============
PUAE tries to continue where E-UAE left off.. PUAE tries to continue where E-UAE left off..
PUAE versioning is based on the merged WinUAE version.. PUAE versioning is based on the merged WinUAE version..
......
...@@ -6,7 +6,7 @@ dnl Updated and generally mauled 2008 Mustafa Tufan ...@@ -6,7 +6,7 @@ dnl Updated and generally mauled 2008 Mustafa Tufan
dnl dnl
AC_PREREQ(2.55) AC_PREREQ(2.55)
AC_INIT(PUAE, 2.3.0, ,puae) AC_INIT(PUAE, 2.3.1, ,puae)
AC_CONFIG_SRCDIR([bootstrap.sh]) AC_CONFIG_SRCDIR([bootstrap.sh])
AM_CONFIG_HEADER([src/sysconfig.h]) AM_CONFIG_HEADER([src/sysconfig.h])
AC_CANONICAL_TARGET AC_CANONICAL_TARGET
......
...@@ -134,7 +134,7 @@ uae_SOURCES = \ ...@@ -134,7 +134,7 @@ uae_SOURCES = \
main.c newcpu.c memory.c rommgr.c custom.c serial.c dongle.c cia.c \ main.c newcpu.c memory.c rommgr.c custom.c serial.c dongle.c cia.c \
blitter.c autoconf.c traps.c ersatz.c keybuf.c expansion.c \ blitter.c autoconf.c traps.c ersatz.c keybuf.c expansion.c \
diskutil.c zfile.c zfile_archive.c cfgfile.c picasso96.c inputdevice.c \ diskutil.c zfile.c zfile_archive.c cfgfile.c picasso96.c inputdevice.c \
gfxutil.c audio.c sinctable.c drawing.c consolehook.c \ gfxutil.c audio.c sinctable.c statusline.c drawing.c consolehook.c \
native2amiga.c disk.c crc32.c savestate.c arcadia.c cdtv.c cd32_fmv.c \ native2amiga.c disk.c crc32.c savestate.c arcadia.c cdtv.c cd32_fmv.c \
uaeexe.c uaelib.c uaeresource.c uaeserial.c fdi2raw.c hotkeys.c amax.c \ uaeexe.c uaelib.c uaeresource.c uaeserial.c fdi2raw.c hotkeys.c amax.c \
ar.c driveclick.c enforcer.c misc.c a2065.c gayle.c ncr_scsi.c \ ar.c driveclick.c enforcer.c misc.c a2065.c gayle.c ncr_scsi.c \
......
This diff is collapsed.
...@@ -706,7 +706,6 @@ static void sys_cddev_close (void) ...@@ -706,7 +706,6 @@ static void sys_cddev_close (void)
sys_command_close (unitnum); sys_command_close (unitnum);
} }
unitnum = -1; unitnum = -1;
} }
static int command_lengths[] = { 1,2,1,1,12,2,1,1,4,1,-1,-1,-1,-1,-1,-1 }; static int command_lengths[] = { 1,2,1,1,12,2,1,1,4,1,-1,-1,-1,-1,-1,-1 };
...@@ -1702,7 +1701,7 @@ int akiko_init (void) ...@@ -1702,7 +1701,7 @@ int akiko_init (void)
#ifdef SAVESTATE #ifdef SAVESTATE
uae_u8 *save_akiko (int *len) uae_u8 *save_akiko (int *len, uae_u8 *dstptr)
{ {
uae_u8 *dstbak, *dst; uae_u8 *dstbak, *dst;
int i; int i;
...@@ -1710,7 +1709,10 @@ uae_u8 *save_akiko (int *len) ...@@ -1710,7 +1709,10 @@ uae_u8 *save_akiko (int *len)
if (!currprefs.cs_cd32cd) if (!currprefs.cs_cd32cd)
return NULL; return NULL;
dstbak = dst = xmalloc (uae_u8, 1000); if (dstptr)
dstbak = dst = dstptr;
else
dstbak = dst = xmalloc (uae_u8, 1000);
save_u16 (0); save_u16 (0);
save_u16 (0xCAFE); save_u16 (0xCAFE);
save_u32 (cdrom_intreq); save_u32 (cdrom_intreq);
......
...@@ -998,7 +998,7 @@ static void hrtmon_go (void) ...@@ -998,7 +998,7 @@ static void hrtmon_go (void)
old = get_long ((uaecptr)(regs.vbr + 0x8)); old = get_long ((uaecptr)(regs.vbr + 0x8));
put_word (hrtmem_start + 0xc0000, 4); put_word (hrtmem_start + 0xc0000, 4);
put_long ((uaecptr)(regs.vbr + 8), get_long (hrtmem_start + 8)); put_long ((uaecptr)(regs.vbr + 8), get_long (hrtmem_start + 8));
Exception (2, 0); Exception (2);
put_long ((uaecptr)(regs.vbr + 8), old); put_long ((uaecptr)(regs.vbr + 8), old);
} else if (cart_type == CART_SUPER4) { } else if (cart_type == CART_SUPER4) {
uae_u32 v = get_long (hrtmem_start + 0x7c); uae_u32 v = get_long (hrtmem_start + 0x7c);
...@@ -1077,7 +1077,7 @@ void check_prefs_changed_carts (int in_memory_reset) ...@@ -1077,7 +1077,7 @@ void check_prefs_changed_carts (int in_memory_reset)
void action_replay_reset (void) void action_replay_reset (void)
{ {
if (hrtmemory) { if (hrtmemory) {
if (savestate_state == STATE_RESTORE) { if (isrestore ()) {
if (m68k_getpc () >= hrtmem_start && m68k_getpc () <= hrtmem_start + hrtmem_size) if (m68k_getpc () >= hrtmem_start && m68k_getpc () <= hrtmem_start + hrtmem_size)
hrtmon_map_banks (); hrtmon_map_banks ();
else else
...@@ -1087,7 +1087,7 @@ void action_replay_reset (void) ...@@ -1087,7 +1087,7 @@ void action_replay_reset (void)
if (action_replay_flag == ACTION_REPLAY_INACTIVE) if (action_replay_flag == ACTION_REPLAY_INACTIVE)
return; return;
if (savestate_state == STATE_RESTORE) { if (isrestore ()) {
if (m68k_getpc () >= arrom_start && m68k_getpc () <= arrom_start + arrom_size) { if (m68k_getpc () >= arrom_start && m68k_getpc () <= arrom_start + arrom_size) {
action_replay_flag = ACTION_REPLAY_ACTIVE; action_replay_flag = ACTION_REPLAY_ACTIVE;
hide_cart (0); hide_cart (0);
......
...@@ -49,6 +49,7 @@ ...@@ -49,6 +49,7 @@
//#define TEST_AUDIO //#define TEST_AUDIO
#define PERIOD_MIN 4 #define PERIOD_MIN 4
#define PERIOD_MIN_NONCE 60
int audio_channel_mask = 15; int audio_channel_mask = 15;
...@@ -1073,10 +1074,12 @@ static void audio_event_reset (void) ...@@ -1073,10 +1074,12 @@ static void audio_event_reset (void)
{ {
int i; int i;
last_cycles = get_cycles () - 1; last_cycles = get_cycles ();
next_sample_evtime = scaled_sample_evtime; next_sample_evtime = scaled_sample_evtime;
for (i = 0; i < 4; i++) if (!isrestore ()) {
zerostate (i); for (i = 0; i < 4; i++)
zerostate (i);
}
schedule_audio (); schedule_audio ();
events_schedule (); events_schedule ();
samplecnt = 0; samplecnt = 0;
...@@ -1222,23 +1225,23 @@ STATIC_INLINE void setdr (int nr) ...@@ -1222,23 +1225,23 @@ STATIC_INLINE void setdr (int nr)
} }
} }
static void loaddat (int nr) static void loaddat (int nr, bool modper)
{ {
struct audio_channel_data *cdp = audio_channel + nr; struct audio_channel_data *cdp = audio_channel + nr;
int audav = adkcon & (0x01 << nr); int audav = adkcon & (0x01 << nr);
int audap = adkcon & (0x10 << nr); int audap = adkcon & (0x10 << nr);
if (audav || audap) { if (audav || (modper && audap)) {
if (nr > 3) if (nr >= 3)
return; return;
if (audav) { if (modper && audap) {
cdp[1].vol = cdp->dat;
} else if (audap) {
if (cdp->dat == 0) if (cdp->dat == 0)
cdp[1].per = PERIOD_MAX; cdp[1].per = PERIOD_MAX;
else if (cdp->dat > PERIOD_MIN) else if (cdp->dat > PERIOD_MIN)
cdp[1].per = cdp->dat * CYCLE_UNIT; cdp[1].per = cdp->dat * CYCLE_UNIT;
else else
cdp[1].per = PERIOD_MIN * CYCLE_UNIT; cdp[1].per = PERIOD_MIN * CYCLE_UNIT;
} else if (audav) {
cdp[1].vol = cdp->dat;
} }
} else { } else {
#ifdef TEST_AUDIO #ifdef TEST_AUDIO
...@@ -1327,7 +1330,7 @@ static void audio_state_channel2 (int nr, bool perfin) ...@@ -1327,7 +1330,7 @@ static void audio_state_channel2 (int nr, bool perfin)
} else if (cdp->dat_written && !isirq (nr)) { } else if (cdp->dat_written && !isirq (nr)) {
cdp->state = 2; cdp->state = 2;
setirq (nr, 0); setirq (nr, 0);
loaddat (nr); loaddat (nr, false);
if (usehacks () && cdp->per < 10 * CYCLE_UNIT) { if (usehacks () && cdp->per < 10 * CYCLE_UNIT) {
// make sure audio.device AUDxDAT startup returns to idle state before DMA is enabled // make sure audio.device AUDxDAT startup returns to idle state before DMA is enabled
newsample (nr, (cdp->dat2 >> 0) & 0xff); newsample (nr, (cdp->dat2 >> 0) & 0xff);
...@@ -1373,7 +1376,7 @@ static void audio_state_channel2 (int nr, bool perfin) ...@@ -1373,7 +1376,7 @@ static void audio_state_channel2 (int nr, bool perfin)
if (debugchannel (nr)) if (debugchannel (nr))
write_log ("%d:>5: LEN=%d PT=%08X PC=%08X\n", nr, cdp->wlen, cdp->pt, M68K_GETPC); write_log ("%d:>5: LEN=%d PT=%08X PC=%08X\n", nr, cdp->wlen, cdp->pt, M68K_GETPC);
#endif #endif
loaddat (nr); loaddat (nr, false);
if (napnav) if (napnav)
setdr (nr); setdr (nr);
cdp->state = 2; cdp->state = 2;
...@@ -1395,7 +1398,7 @@ static void audio_state_channel2 (int nr, bool perfin) ...@@ -1395,7 +1398,7 @@ static void audio_state_channel2 (int nr, bool perfin)
if (!perfin) if (!perfin)
return; return;
if (audap) if (audap)
loaddat (nr); loaddat (nr, true);
if (chan_ena) { if (chan_ena) {
if (audap) if (audap)
setdr (nr); setdr (nr);
...@@ -1423,7 +1426,7 @@ static void audio_state_channel2 (int nr, bool perfin) ...@@ -1423,7 +1426,7 @@ static void audio_state_channel2 (int nr, bool perfin)
if (!perfin) if (!perfin)
return; return;
if (chan_ena) { if (chan_ena) {
loaddat (nr); loaddat (nr, false);
if (cdp->intreq2 && napnav) if (cdp->intreq2 && napnav)
setirq (nr, 31); setirq (nr, 31);
if (napnav) if (napnav)
...@@ -1437,7 +1440,7 @@ static void audio_state_channel2 (int nr, bool perfin) ...@@ -1437,7 +1440,7 @@ static void audio_state_channel2 (int nr, bool perfin)
zerostate (nr); zerostate (nr);
return; return;
} }
loaddat (nr); loaddat (nr, false);
if (napnav) if (napnav)
setirq (nr, 32); setirq (nr, 32);
} }
...@@ -1481,7 +1484,7 @@ void audio_reset (void) ...@@ -1481,7 +1484,7 @@ void audio_reset (void)
#endif #endif
reset_sound (); reset_sound ();
memset (sound_filter_state, 0, sizeof sound_filter_state); memset (sound_filter_state, 0, sizeof sound_filter_state);
if (savestate_state != STATE_RESTORE) { if (!isrestore ()) {
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
cdp = &audio_channel[i]; cdp = &audio_channel[i];
memset (cdp, 0, sizeof *audio_channel); memset (cdp, 0, sizeof *audio_channel);
...@@ -1491,7 +1494,7 @@ void audio_reset (void) ...@@ -1491,7 +1494,7 @@ void audio_reset (void)
} }
} }
last_cycles = get_cycles () - 1; last_cycles = get_cycles ();
next_sample_evtime = scaled_sample_evtime; next_sample_evtime = scaled_sample_evtime;
schedule_audio (); schedule_audio ();
events_schedule (); events_schedule ();
...@@ -1610,7 +1613,7 @@ void set_audio (void) ...@@ -1610,7 +1613,7 @@ void set_audio (void)
} }
} }
next_sample_evtime = scaled_sample_evtime; next_sample_evtime = scaled_sample_evtime;
last_cycles = get_cycles () - 1; last_cycles = get_cycles ();
compute_vsynctime (); compute_vsynctime ();
} else { } else {
sound_volume (0); sound_volume (0);
...@@ -1706,7 +1709,7 @@ void update_audio (void) ...@@ -1706,7 +1709,7 @@ void update_audio (void)
if (!isaudio ()) if (!isaudio ())
goto end; goto end;
if (savestate_state == STATE_RESTORE) if (isrestore ())
goto end; goto end;
if (!is_audio_active ()) if (!is_audio_active ())
goto end; goto end;
...@@ -1901,6 +1904,10 @@ void AUDxPER (int nr, uae_u16 v) ...@@ -1901,6 +1904,10 @@ void AUDxPER (int nr, uae_u16 v)
/* smaller values would cause extremely high cpu usage */ /* smaller values would cause extremely high cpu usage */
per = PERIOD_MIN * CYCLE_UNIT; per = PERIOD_MIN * CYCLE_UNIT;
} }
if (per < PERIOD_MIN_NONCE * CYCLE_UNIT && !currprefs.cpu_cycle_exact && (cdp->dmaenstore || cdp->state == 0)) {
/* DMAL emulation and low period can cause very very high cpu usage on slow performance PCs */
per = PERIOD_MIN_NONCE * CYCLE_UNIT;
}
if (cdp->per == PERIOD_MAX - 1 && per != PERIOD_MAX - 1) { if (cdp->per == PERIOD_MAX - 1 && per != PERIOD_MAX - 1) {
cdp->evtime = CYCLE_UNIT; cdp->evtime = CYCLE_UNIT;
...@@ -2016,29 +2023,39 @@ void audio_resume (void) { resume_sound (); } ...@@ -2016,29 +2023,39 @@ void audio_resume (void) { resume_sound (); }
void audio_volume (int volume) { sound_volume (volume); } void audio_volume (int volume) { sound_volume (volume); }
#ifdef SAVESTATE #ifdef SAVESTATE
void restore_audio_finish (void)
{
last_cycles = get_cycles ();
schedule_audio ();
events_schedule ();
}
uae_u8 *restore_audio (int nr, uae_u8 *src) uae_u8 *restore_audio (int nr, uae_u8 *src)
{ {
struct audio_channel_data *acd = audio_channel + nr; struct audio_channel_data *acd = audio_channel + nr;
uae_u16 p;
zerostate (nr);
acd->state = restore_u8 (); acd->state = restore_u8 ();
acd->vol = restore_u8 (); acd->vol = restore_u8 ();
acd->intreq2 = restore_u8 () ? true : false; acd->intreq2 = restore_u8 () ? true : false;
p = restore_u8 (); uae_u8 flags = restore_u8 ();
acd->dr = acd->dsr = false; acd->dr = acd->dsr = false;
if (p & 1) if (flags & 1)
acd->dr = true; acd->dr = true;
if (p & 2) if (flags & 2)
acd->dsr = true; acd->dsr = true;
acd->drhpos = 1;
acd->len = restore_u16 (); acd->len = restore_u16 ();
acd->wlen = restore_u16 (); acd->wlen = restore_u16 ();
p = restore_u16 (); uae_u16 p = restore_u16 ();
acd->per = p ? p * CYCLE_UNIT : PERIOD_MAX; acd->per = p ? p * CYCLE_UNIT : PERIOD_MAX;
acd->dat = acd->dat2 = restore_u16 (); acd->dat = acd->dat2 = restore_u16 ();
acd->lc = restore_u32 (); acd->lc = restore_u32 ();
acd->pt = restore_u32 (); acd->pt = restore_u32 ();
acd->evtime = restore_u32 (); acd->evtime = restore_u32 ();
if (flags & 0x80)
acd->drhpos = restore_u8 ();
else
acd->drhpos = 1;
acd->dmaenstore = (dmacon & DMA_MASTER) && (dmacon & (1 << nr)); acd->dmaenstore = (dmacon & DMA_MASTER) && (dmacon & (1 << nr));
return src; return src;
} }
...@@ -2058,7 +2075,7 @@ uae_u8 *save_audio (int nr, int *len, uae_u8 *dstptr) ...@@ -2058,7 +2075,7 @@ uae_u8 *save_audio (int nr, int *len, uae_u8 *dstptr)
save_u8 (acd->state); save_u8 (acd->state);
save_u8 (acd->vol); save_u8 (acd->vol);
save_u8 (acd->intreq2); save_u8 (acd->intreq2);
save_u8 ((acd->dr ? 1 : 0) | (acd->dsr ? 2 : 0)); save_u8 ((acd->dr ? 1 : 0) | (acd->dsr ? 2 : 0) | 0x80);
save_u16 (acd->len); save_u16 (acd->len);
save_u16 (acd->wlen); save_u16 (acd->wlen);
save_u16 (acd->per == PERIOD_MAX ? 0 : acd->per / CYCLE_UNIT); save_u16 (acd->per == PERIOD_MAX ? 0 : acd->per / CYCLE_UNIT);
...@@ -2066,6 +2083,7 @@ uae_u8 *save_audio (int nr, int *len, uae_u8 *dstptr) ...@@ -2066,6 +2083,7 @@ uae_u8 *save_audio (int nr, int *len, uae_u8 *dstptr)
save_u32 (acd->lc); save_u32 (acd->lc);
save_u32 (acd->pt); save_u32 (acd->pt);
save_u32 (acd->evtime); save_u32 (acd->evtime);
save_u8 (acd->drhpos);
*len = dst - dstbak; *len = dst - dstbak;
return dstbak; return dstbak;
} }
......
This diff is collapsed.
...@@ -326,7 +326,7 @@ static int play_cdtrack (uae_u8 *p) ...@@ -326,7 +326,7 @@ static int play_cdtrack (uae_u8 *p)
end = last_cd_position; end = last_cd_position;
start_found = end_found = 0; start_found = end_found = 0;
for (j = 0; j < toc.points; j++) { for (j = toc.first_track_offset; j <= toc.last_track_offset; j++) {
struct cd_toc *s = &toc.toc[j]; struct cd_toc *s = &toc.toc[j];
if (track_start == s->track) { if (track_start == s->track) {
start_found++; start_found++;
...@@ -1769,11 +1769,16 @@ void cdtv_check_banks (void) ...@@ -1769,11 +1769,16 @@ void cdtv_check_banks (void)
#ifdef SAVESTATE #ifdef SAVESTATE
uae_u8 *save_dmac (int *len) uae_u8 *save_dmac (int *len, uae_u8 *dstptr)
{ {
uae_u8 *dstbak, *dst; uae_u8 *dstbak, *dst;
dstbak = dst = xmalloc (uae_u8, 1000); if (!currprefs.cs_cdtvcd)
return NULL;
if (dstptr)
dstbak = dst = dstptr;
else
dstbak = dst = xmalloc (uae_u8, 1000);
// model (0=original,1=rev2,2=superdmac) // model (0=original,1=rev2,2=superdmac)
save_u32 (1); save_u32 (1);
...@@ -1804,14 +1809,18 @@ uae_u8 *restore_dmac (uae_u8 *src) ...@@ -1804,14 +1809,18 @@ uae_u8 *restore_dmac (uae_u8 *src)
return src; return src;
} }
uae_u8 *save_cdtv (int *len) uae_u8 *save_cdtv (int *len, uae_u8 *dstptr)
{ {
unsigned int i; unsigned int i;
uae_u8 *dstbak, *dst; uae_u8 *dstbak, *dst;
if (!currprefs.cs_cdtvcd) if (!currprefs.cs_cdtvcd)
return NULL; return NULL;
dstbak = dst = xmalloc (uae_u8, 1000);
if (dstptr)
dstbak = dst = dstptr;
else
dstbak = dst = xmalloc (uae_u8, 1000);
save_u32 (1); save_u32 (1);
......
...@@ -4515,13 +4515,6 @@ int built_in_chipset_prefs (struct uae_prefs *p) ...@@ -4515,13 +4515,6 @@ int built_in_chipset_prefs (struct uae_prefs *p)
void config_check_vsync (void) void config_check_vsync (void)
{ {
static int cnt = 0;
if (cnt == 0) {
/* resolution_check_change (); */
DISK_check_change ();
cnt = 5;
}
cnt--;
if (config_changed) { if (config_changed) {
// if (config_changed == 1) // if (config_changed == 1)
// write_log ("* configuration check trigger\n"); // write_log ("* configuration check trigger\n");
......
This diff is collapsed.
...@@ -402,7 +402,7 @@ restart: ...@@ -402,7 +402,7 @@ restart:
mmu_fill_atc_l2(addr, super, data, write, l); mmu_fill_atc_l2(addr, super, data, write, l);
} }
if (!(data ? l->valid_data : l->valid_inst)) { if (!(data ? l->valid_data : l->valid_inst)) {
D(bug("MMU: non-resident page (%x,%x,%x)!\n", addr, regs.pc, regs.fault_pc)); D(bug("MMU: non-resident page (%x,%x,%x)!\n", addr, regs.pc, regs.instruction_pc));
goto fail; goto fail;
} }
if (write) { if (write) {
......
This diff is collapsed.
...@@ -904,20 +904,28 @@ struct dma_rec *record_dma (uae_u16 reg, uae_u16 dat, uae_u32 addr, int hpos, in ...@@ -904,20 +904,28 @@ struct dma_rec *record_dma (uae_u16 reg, uae_u16 dat, uae_u32 addr, int hpos, in
return dr; return dr;
} }
static void decode_dma_record (int hpos, int vpos, int toggle) static void decode_dma_record (int hpos, int vpos, int toggle, bool logfile)
{ {
struct dma_rec *dr; struct dma_rec *dr;
int h, i, maxh; int h, i, maxh, cnt;
uae_u32 cycles;
if (!dma_record[0]) if (!dma_record[0])
return; return;
dr = &dma_record[dma_record_toggle ^ toggle][vpos * NR_DMA_REC_HPOS]; dr = &dma_record[dma_record_toggle ^ toggle][vpos * NR_DMA_REC_HPOS];
console_out_f ("Line: %02X %3d HPOS %02X %3d:\n", vpos, vpos, hpos, hpos); if (logfile)
write_dlog ("Line: %02X %3d HPOS %02X %3d:\n", vpos, vpos, hpos, hpos);
else
console_out_f ("Line: %02X %3d HPOS %02X %3d:\n", vpos, vpos, hpos, hpos);
h = hpos; h = hpos;
dr += hpos; dr += hpos;
maxh = hpos + 80; maxh = hpos + 80;
if (maxh > maxhpos) if (maxh > maxhpos)
maxh = maxhpos; maxh = maxhpos;
cycles = vsync_cycles;
if (toggle)
cycles -= maxvpos * maxhpos * CYCLE_UNIT;
cnt = 0;
while (h < maxh) { while (h < maxh) {
int col = 9; int col = 9;
int cols = 8; int cols = 8;
...@@ -925,6 +933,7 @@ static void decode_dma_record (int hpos, int vpos, int toggle) ...@@ -925,6 +933,7 @@ static void decode_dma_record (int hpos, int vpos, int toggle)
TCHAR l2[81]; TCHAR l2[81];
TCHAR l3[81]; TCHAR l3[81];
TCHAR l4[81]; TCHAR l4[81];
TCHAR l5[81];
for (i = 0; i < cols && h < maxh; i++, h++, dr++) { for (i = 0; i < cols && h < maxh; i++, h++, dr++) {
int cl = i * col, cl2; int cl = i * col, cl2;
int r = dr->reg; int r = dr->reg;
...@@ -982,20 +991,39 @@ static void decode_dma_record (int hpos, int vpos, int toggle) ...@@ -982,20 +991,39 @@ static void decode_dma_record (int hpos, int vpos, int toggle)
l3[cl2++] = 'I'; l3[cl2++] = 'I';
if (dr->evt & DMA_EVENT_INTREQ) if (dr->evt & DMA_EVENT_INTREQ)
l3[cl2++] = 'i'; l3[cl2++] = 'i';
_stprintf (l5 + cl, "%08X", cycles + (vpos * maxhpos + (hpos + cnt)) * CYCLE_UNIT);
if (i < cols - 1 && h < maxh - 1) { if (i < cols - 1 && h < maxh - 1) {
l1[cl + col - 1] = 32; l1[cl + col - 1] = 32;
l2[cl + col - 1] = 32; l2[cl + col - 1] = 32;
l3[cl + col - 1] = 32; l3[cl + col - 1] = 32;
l4[cl + col - 1] = 32; l4[cl + col - 1] = 32;
l5[cl + col - 1] = 32;
} }
cnt++;
}
if (logfile) {
write_dlog ("%s\n", l1);
write_dlog ("%s\n", l2);
write_dlog ("%s\n", l3);
write_dlog ("%s\n", l4);
write_dlog ("%s\n", l5);
write_dlog ("\n");
} else {
console_out_f ("%s\n", l1);
console_out_f ("%s\n", l2);
console_out_f ("%s\n", l3);
console_out_f ("%s\n", l4);
console_out_f ("%s\n", l5);
console_out_f ("\n");
} }
console_out_f ("%s\n", l1);
console_out_f ("%s\n", l2);
console_out_f ("%s\n", l3);
console_out_f ("%s\n", l4);
console_out_f ("\n");
} }
} }
void log_dma_record (void)
{
if (!debug_dma)
debug_dma = 1;
decode_dma_record (0, 0, 0, true);
}
void record_copper (uaecptr addr, int hpos, int vpos) void record_copper (uaecptr addr, int hpos, int vpos)
{ {
...@@ -1649,6 +1677,74 @@ static void smc_detector (uaecptr addr, int rwi, int size, uae_u32 *valp) ...@@ -1649,6 +1677,74 @@ static void smc_detector (uaecptr addr, int rwi, int size, uae_u32 *valp)
} }
} }
uae_u8 *save_debug_memwatch (int *len, uae_u8 *dstptr)
{
uae_u8 *dstbak, *dst;
int total;
unsigned int i;
total = 0;
for (i = 0; i < MEMWATCH_TOTAL; i++) {
if (mwnodes[i].size > 0)
total++;
}
if (!total)
return NULL;
if (dstptr)
dstbak = dst = dstptr;
else
dstbak = dst = xmalloc (uae_u8, 1000);
save_u32 (1);
save_u8 (total);
for (i = 0; i < MEMWATCH_TOTAL; i++) {
struct memwatch_node *m = &mwnodes[i];
if (m->size <= 0)
continue;
save_store_pos ();
save_u8 (i);
save_u8 (m->modval_written);
save_u8 (m->mustchange);
save_u8 (m->frozen);
save_u8 (m->val_enabled);
save_u8 (m->rwi);
save_u32 (m->addr);
save_u32 (m->size);
save_u32 (m->modval);
save_u32 (m->val_mask);
save_u32 (m->val_size);
save_store_size ();
}
*len = dst - dstbak;
return dstbak;
}
uae_u8 *restore_debug_memwatch (uae_u8 *src)
{
if (restore_u32 () != 1)
return src;
int total = restore_u8 ();
unsigned int i;
for (i = 0; i < total; i++) {
restore_store_pos ();
int idx = restore_u8 ();
struct memwatch_node *m = &mwnodes[idx];
m->modval_written = restore_u8 ();
m->mustchange = restore_u8 ();
m->frozen = restore_u8 ();
m->val_enabled = restore_u8 ();
m->rwi = restore_u8 ();
m->addr = restore_u32 ();
m->size = restore_u32 ();
m->modval = restore_u32 ();
m->val_mask = restore_u32 ();
m->val_size = restore_u32 ();
restore_store_size ();
}
return src;
}
static int memwatch_func (uaecptr addr, int rwi, int size, uae_u32 *valp) static int memwatch_func (uaecptr addr, int rwi, int size, uae_u32 *valp)
{ {
int i, brk; int i, brk;
...@@ -2070,7 +2166,7 @@ void memwatch_dump2 (TCHAR *buf, int bufsize, int num) ...@@ -2070,7 +2166,7 @@ void memwatch_dump2 (TCHAR *buf, int bufsize, int num)
if (mwn->frozen) if (mwn->frozen)
buf = buf_out (buf, &bufsize, "F"); buf = buf_out (buf, &bufsize, "F");
if (mwn->val_enabled) if (mwn->val_enabled)
buf = buf_out (buf, &bufsize, " =%X", mwn->val); buf = buf_out (buf, &bufsize, " =%X%s", mwn->val, getsizechar (mwn->val_size));
if (mwn->modval_written) if (mwn->modval_written)
buf = buf_out (buf, &bufsize, " =M"); buf = buf_out (buf, &bufsize, " =M");
if (mwn->mustchange) if (mwn->mustchange)
...@@ -2381,9 +2477,63 @@ static void show_exec_tasks (void) ...@@ -2381,9 +2477,63 @@ static void show_exec_tasks (void)
static void show_exec_lists (TCHAR t) static void show_exec_lists (TCHAR t)
{ {
unsigned int i, j;
uaecptr execbase = get_long (4); uaecptr execbase = get_long (4);
uaecptr list = 0, node; uaecptr list = 0, node;
if (_totupper (t) == 'I') {
static const int it[] = { 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0 };
static const int it2[] = { 1, 1, 1, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 6, 6, 7 };
list = execbase + 84;
for (i = 0; i < 16; i++) {
console_out_f ("%2d %d: %08x\n", i + 1, it2[i], list);
if (it[i]) {
console_out_f (" [H] %08x\n", get_long (list));
node = get_long (list + 8);
if (node) {
uae_u8 *addr = get_real_address (get_long (node + 10));
TCHAR *name = addr ? ((char*)addr) : "<null>";
console_out_f (" %08x (C=%08X D=%08X) '%s'\n", node, get_long (list + 4), get_long (list), name);
xfree (name);
}
} else {
int cnt = 0;
node = get_long (list);
node = get_long (node);
while (get_long (node)) {
uae_u8 *addr = get_real_address (get_long (node + 10));
TCHAR *name = addr ? ((char*)addr) : "<null>";
console_out_f (" [S] %08x (C=%08x D=%08X) '%s'\n", node, get_long (node + 18), get_long (node + 14), name);
if (i == 4 - 1 || i == 14 - 1) {
if (!_tcsicmp (name, "cia-a") || !_tcsicmp (name, "cia-b")) {
static const TCHAR *ciai[] = { "A", "B", "ALRM", "SP", "FLG" };
uaecptr cia = node + 22;
for (j = 0; j < 5; j++) {
uaecptr ciap = get_long (cia);
console_out_f (" %5s: %08x", ciai[j], ciap);
if (ciap) {
uae_u8 *addr2 = get_real_address (get_long (ciap + 10));
TCHAR *name2 = addr ? ((char*)addr2) : "<null>";
console_out_f (" (C=%08x D=%08X) '%s'", get_long (ciap + 18), get_long (ciap + 14), name2);
xfree (name2);
}
console_out_f ("\n");
cia += 4;
}
}
}
xfree (name);
node = get_long (node);
cnt++;
}
if (!cnt)
console_out_f (" [S] <none>\n");
}
list += 12;
}
return;
}
switch (_totupper (t)) switch (_totupper (t))
{ {
case 'R': case 'R':
...@@ -2647,9 +2797,9 @@ static void searchmem (TCHAR **cc) ...@@ -2647,9 +2797,9 @@ static void searchmem (TCHAR **cc)
console_out ("\n"); console_out ("\n");
} }
#ifdef SAVESTATE
static int staterecorder (TCHAR **cc) static int staterecorder (TCHAR **cc)
{ {
#if 0
TCHAR nc; TCHAR nc;
if (!more_params (cc)) { if (!more_params (cc)) {
...@@ -2664,9 +2814,9 @@ static int staterecorder (TCHAR **cc) ...@@ -2664,9 +2814,9 @@ static int staterecorder (TCHAR **cc)
savestate_listrewind (); savestate_listrewind ();
return 0; return 0;
} }
#endif
return 0; return 0;
} }
#endif
static int debugtest_modes[DEBUGTEST_MAX]; static int debugtest_modes[DEBUGTEST_MAX];
static const TCHAR *debugtest_names[] = { static const TCHAR *debugtest_names[] = {
...@@ -2718,7 +2868,7 @@ static void debugtest_set (TCHAR **inptr) ...@@ -2718,7 +2868,7 @@ static void debugtest_set (TCHAR **inptr)
else else
debugtest_modes[val] = val2; debugtest_modes[val] = val2;
console_out_f ("Debugtest '%s': %s. break = %s\n", console_out_f ("Debugtest '%s': %s. break = %s\n",
debugtest_names[val], debugtest_modes[val] ? "on" :L"off", val2 == 2 ? "on" : "off"); debugtest_names[val], debugtest_modes[val] ? "on" :"off", val2 == 2 ? "on" : "off");
} }
} }
...@@ -2971,7 +3121,7 @@ static void m68k_modify (TCHAR **inptr) ...@@ -2971,7 +3121,7 @@ static void m68k_modify (TCHAR **inptr)
regs.isp = v; regs.isp = v;
} else if (!_tcscmp (parm, "PC")) { } else if (!_tcscmp (parm, "PC")) {
m68k_setpc (v); m68k_setpc (v);
fill_prefetch_slow (); fill_prefetch ();
} else { } else {
for (i = 0; m2cregs[i].regname; i++) { for (i = 0; m2cregs[i].regname; i++) {
if (!_tcscmp (parm, m2cregs[i].regname)) if (!_tcscmp (parm, m2cregs[i].regname))
...@@ -3149,7 +3299,7 @@ static void debug_1 (void) ...@@ -3149,7 +3299,7 @@ static void debug_1 (void)
case 'g': case 'g':
if (more_params (&inptr)) { if (more_params (&inptr)) {
m68k_setpc (readhex (&inptr)); m68k_setpc (readhex (&inptr));
fill_prefetch_slow (); fill_prefetch ();
} }
deactivate_debugger(); deactivate_debugger();
return; return;
...@@ -3269,7 +3419,7 @@ static void debug_1 (void) ...@@ -3269,7 +3419,7 @@ static void debug_1 (void)
if (more_params (&inptr)) if (more_params (&inptr))
v2 = readint (&inptr); v2 = readint (&inptr);
if (debug_dma) { if (debug_dma) {
decode_dma_record (v2, v1, cmd == 'v'); decode_dma_record (v2, v1, cmd == 'v', false);
} else { } else {
debug_dma = v1 < 0 ? -v1 : 1; debug_dma = v1 < 0 ? -v1 : 1;
console_out_f ("DMA debugger enabled, mode=%d.\n", debug_dma); console_out_f ("DMA debugger enabled, mode=%d.\n", debug_dma);
...@@ -3293,19 +3443,19 @@ static void debug_1 (void) ...@@ -3293,19 +3443,19 @@ static void debug_1 (void)
break; break;
case 'U': case 'U':
if (currprefs.cpu_model && more_params (&inptr)) { if (currprefs.cpu_model && more_params (&inptr)) {
int super, data, i; int i;
uaecptr addrl = readhex (&inptr); uaecptr addrl = readhex (&inptr);
uaecptr addrp; uaecptr addrp;
console_out_f ("%08X translates to:\n", addrl); console_out_f ("%08X translates to:\n", addrl);
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
super = (i & 2) ? 1 : 0; bool super = (i & 2) != 0;
data = (i & 1) ? 1 : 0; bool data = (i & 1) != 0;
console_out_f ("S%dD%d=", super, data); console_out_f ("S%dD%d=", super, data);
TRY(prb) { TRY(prb) {
addrp = mmu_translate (addrl, super, data, 0); addrp = mmu_translate (addrl, super, data, false);
console_out_f ("%08X", addrp); console_out_f ("%08X", addrp);
TRY(prb2) { TRY(prb2) {
addrp = mmu_translate (addrl, super, data, 1); addrp = mmu_translate (addrl, super, data, true);
console_out_f (" RW"); console_out_f (" RW");
} CATCH(prb2) { } CATCH(prb2) {
console_out_f (" RO"); console_out_f (" RO");
...@@ -3476,26 +3626,22 @@ void debug (void) ...@@ -3476,26 +3626,22 @@ void debug (void)
skipins = 0xffffffff; skipins = 0xffffffff;
skipaddr_doskip = 0; skipaddr_doskip = 0;
exception_debugging = 0; exception_debugging = 0;
#ifdef SAVESTATE
debug_rewind = 0; debug_rewind = 0;
processptr = 0; processptr = 0;
#if 0
if (!currprefs.statecapture) {
changed_prefs.statecapture = currprefs.statecapture = 1;
savestate_init ();
}
#endif #endif
debug_1 (); debug_1 ();
if (!debug_rewind && !currprefs.cachesize
#ifdef SAVESTATE
if (!debug_rewind
#ifdef JIT
&& !currprefs.cachesize
#endif
#ifdef FILESYS #ifdef FILESYS
&& nr_units () == 0 && nr_units () == 0
#endif #endif
) { ) {
savestate_capture (1); savestate_capture (1);
} }
#endif
for (i = 0; i < BREAKPOINT_TOTAL; i++) { for (i = 0; i < BREAKPOINT_TOTAL; i++) {
if (bpnodes[i].enabled) if (bpnodes[i].enabled)
do_skip = 1; do_skip = 1;
...@@ -3583,7 +3729,7 @@ void mmu_do_hit (void) ...@@ -3583,7 +3729,7 @@ void mmu_do_hit (void)
} }
MakeSR (); MakeSR ();
m68k_setpc (mmu_callback); m68k_setpc (mmu_callback);
fill_prefetch_slow (); fill_prefetch ();
if (currprefs.cpu_model > 68000) { if (currprefs.cpu_model > 68000) {
for (i = 0 ; i < 9; i++) { for (i = 0 ; i < 9; i++) {
......
This diff is collapsed.
This diff is collapsed.
...@@ -196,14 +196,14 @@ static void ersatz_init (void) ...@@ -196,14 +196,14 @@ static void ersatz_init (void)
disk_eject (0); disk_eject (0);
m68k_setpc (0xFC0002); m68k_setpc (0xFC0002);
fill_prefetch_slow (); fill_prefetch ();
uae_reset (0); uae_reset (0);
ersatzkickfile = 0; ersatzkickfile = 0;
return; return;
} }
m68k_setpc (0x400C); m68k_setpc (0x400C);
fill_prefetch_slow (); fill_prefetch ();
/* Init the hardware */ /* Init the hardware */
put_long (0x3000, 0xFFFFFFFEul); put_long (0x3000, 0xFFFFFFFEul);
......
This diff is collapsed.
...@@ -156,7 +156,7 @@ read 1 byte to stop reset */ ...@@ -156,7 +156,7 @@ read 1 byte to stop reset */
#define IDE_GAYLE 0 #define IDE_GAYLE 0
#define IDE_ADIDE 1 #define IDE_ADIDE 1
#define MAX_IDE_MULTIPLE_SECTORS 128 #define MAX_IDE_MULTIPLE_SECTORS 64
#define SECBUF_SIZE (512 * (MAX_IDE_MULTIPLE_SECTORS * 2)) #define SECBUF_SIZE (512 * (MAX_IDE_MULTIPLE_SECTORS * 2))
struct ide_hdf struct ide_hdf
...@@ -284,7 +284,7 @@ static void gayle_cs_change (uae_u8 mask, int onoff) ...@@ -284,7 +284,7 @@ static void gayle_cs_change (uae_u8 mask, int onoff)
if (gayle_irq & GAYLE_IRQ_RESET) if (gayle_irq & GAYLE_IRQ_RESET)
uae_reset (0); uae_reset (0);
if (gayle_irq & GAYLE_IRQ_BERR) if (gayle_irq & GAYLE_IRQ_BERR)
Exception (2, 0); Exception (2);
} }
} }
} }
...@@ -1185,10 +1185,10 @@ static uae_u32 gayle2_read (uaecptr addr) ...@@ -1185,10 +1185,10 @@ static uae_u32 gayle2_read (uaecptr addr)
addr &= 0xffff; addr &= 0xffff;
if (addr == 0x1000) { if (addr == 0x1000) {
/* Gayle ID */ /* Gayle ID */
if ((gayle_id_cnt & 3) == 2) if (gayle_id_cnt == 0 || gayle_id_cnt == 1 || gayle_id_cnt == 3 || ((currprefs.chipset_mask & CSMASK_AGA) && gayle_id_cnt == 7))
v = 0x7f;
else
v = 0x80; v = 0x80;
else
v = 0x00;
gayle_id_cnt++; gayle_id_cnt++;
} }
return v; return v;
...@@ -1902,7 +1902,7 @@ static void initide (void) ...@@ -1902,7 +1902,7 @@ static void initide (void)
int i; int i;
alloc_ide_mem (idedrive, 4); alloc_ide_mem (idedrive, 4);
if (savestate_state == STATE_RESTORE) if (isrestore ())
return; return;
ide_error = 1; ide_error = 1;
ide_sector = ide_nsector = 1; ide_sector = ide_nsector = 1;
...@@ -1953,13 +1953,16 @@ uae_u8 *restore_gayle (uae_u8 *src) ...@@ -1953,13 +1953,16 @@ uae_u8 *restore_gayle (uae_u8 *src)
return src; return src;
} }
uae_u8 *save_gayle (int *len) uae_u8 *save_gayle (int *len, uae_u8 *dstptr)
{ {
uae_u8 *dstbak, *dst; uae_u8 *dstbak, *dst;
if (currprefs.cs_ide <= 0) if (currprefs.cs_ide <= 0)
return NULL; return NULL;
dstbak = dst = xmalloc (uae_u8, 1000); if (dstptr)
dstbak = dst = dstptr;
else
dstbak = dst = xmalloc (uae_u8, 1000);
save_u8 (currprefs.cs_ide); save_u8 (currprefs.cs_ide);
save_u8 (gayle_int); save_u8 (gayle_int);
save_u8 (gayle_irq); save_u8 (gayle_irq);
...@@ -1970,7 +1973,7 @@ uae_u8 *save_gayle (int *len) ...@@ -1970,7 +1973,7 @@ uae_u8 *save_gayle (int *len)
return dstbak; return dstbak;
} }
uae_u8 *save_ide (int num, int *len) uae_u8 *save_ide (int num, int *len, uae_u8 *dstptr)
{ {
uae_u8 *dstbak, *dst; uae_u8 *dstbak, *dst;
struct ide_hdf *ide; struct ide_hdf *ide;
...@@ -1982,7 +1985,10 @@ uae_u8 *save_ide (int num, int *len) ...@@ -1982,7 +1985,10 @@ uae_u8 *save_ide (int num, int *len)
ide = idedrive[num]; ide = idedrive[num];
if (ide->hdhfd.size == 0) if (ide->hdhfd.size == 0)
return NULL; return NULL;
dstbak = dst = xmalloc (uae_u8, 1000); if (dstptr)
dstbak = dst = dstptr;
else
dstbak = dst = xmalloc (uae_u8, 1000);
save_u32 (num); save_u32 (num);
save_u64 (ide->hdhfd.size); save_u64 (ide->hdhfd.size);
save_string (ide->hdhfd.path); save_string (ide->hdhfd.path);
......
This diff is collapsed.
...@@ -2415,14 +2415,14 @@ void gui_handle_events (void) ...@@ -2415,14 +2415,14 @@ void gui_handle_events (void)
break; break;
case UAECMD_SAVESTATE_LOAD: case UAECMD_SAVESTATE_LOAD:
uae_sem_wait (&gui_sem); uae_sem_wait (&gui_sem);
savestate_initsave (gui_sstate_name, 0, 0); savestate_initsave (gui_sstate_name, 0, 0, 0);
savestate_state = STATE_DORESTORE; savestate_state = STATE_DORESTORE;
write_log ("Restoring state from '%s'...\n", gui_sstate_name); write_log ("Restoring state from '%s'...\n", gui_sstate_name);
uae_sem_post (&gui_sem); uae_sem_post (&gui_sem);
break; break;
case UAECMD_SAVESTATE_SAVE: case UAECMD_SAVESTATE_SAVE:
uae_sem_wait (&gui_sem); uae_sem_wait (&gui_sem);
savestate_initsave (gui_sstate_name, 0, 0); savestate_initsave (gui_sstate_name, 0, 0, 0);
save_state (gui_sstate_name, "puae"); save_state (gui_sstate_name, "puae");
write_log ("Saved state to '%s'...\n", gui_sstate_name); write_log ("Saved state to '%s'...\n", gui_sstate_name);
uae_sem_post (&gui_sem); uae_sem_post (&gui_sem);
......
...@@ -122,6 +122,7 @@ typedef int (*rawread_func) (int, uae_u8*, int, int, int, uae_u32); ...@@ -122,6 +122,7 @@ typedef int (*rawread_func) (int, uae_u8*, int, int, int, uae_u32);
typedef int (*write_func) (int, uae_u8*, int, int); typedef int (*write_func) (int, uae_u8*, int, int);
typedef int (*isatapi_func) (int); typedef int (*isatapi_func) (int);
typedef int (*ismedia_func) (int, int); typedef int (*ismedia_func) (int, int);
typedef int (*scsiemu_func) (int, uae_u8*);
struct device_functions { struct device_functions {
const TCHAR *name; const TCHAR *name;
...@@ -147,6 +148,8 @@ struct device_functions { ...@@ -147,6 +148,8 @@ struct device_functions {
isatapi_func isatapi; isatapi_func isatapi;
ismedia_func ismedia; ismedia_func ismedia;
scsiemu_func scsiemu;
}; };
extern struct device_functions *device_func[MAX_TOTAL_SCSI_DEVICES]; extern struct device_functions *device_func[MAX_TOTAL_SCSI_DEVICES];
......
...@@ -7,8 +7,10 @@ ...@@ -7,8 +7,10 @@
*/ */
extern void CIA_reset (void); extern void CIA_reset (void);
extern void CIA_vsync_handler (int); extern void CIA_vsync_prehandler (void);
extern void CIA_hsync_handler (int); extern void CIA_hsync_prehandler (void);
extern void CIA_vsync_posthandler (bool);
extern void CIA_hsync_posthandler (bool);
extern void CIA_handler (void); extern void CIA_handler (void);
extern void diskindex_handler (void); extern void diskindex_handler (void);
...@@ -24,6 +26,4 @@ extern int parallel_direct_read_data (uae_u8*); ...@@ -24,6 +26,4 @@ extern int parallel_direct_read_data (uae_u8*);
extern int parallel_direct_write_status (uae_u8, uae_u8); extern int parallel_direct_write_status (uae_u8, uae_u8);
extern int parallel_direct_read_status (uae_u8*); extern int parallel_direct_read_status (uae_u8*);
extern void CIA_inprec_prepare(void); extern void rtc_hardreset (void);
extern void rtc_hardreset(void);
This diff is collapsed.
...@@ -18,7 +18,8 @@ ...@@ -18,7 +18,8 @@
uae_u32 get_copper_address (int copno); uae_u32 get_copper_address (int copno);
extern int custom_init (void); extern int custom_init (void);
extern void customreset (int hardreset); extern void custom_prepare (void);
extern void custom_reset (int hardreset);
extern int intlev (void); extern int intlev (void);
extern void dumpcustom (void); extern void dumpcustom (void);
...@@ -28,7 +29,7 @@ extern void do_copper (void); ...@@ -28,7 +29,7 @@ extern void do_copper (void);
extern void notice_new_xcolors (void); extern void notice_new_xcolors (void);
extern void notice_screen_contents_lost (void); extern void notice_screen_contents_lost (void);
extern void init_row_map (void); extern void init_row_map (void);
extern void init_hz (void); extern void init_hz_full (void);
extern void init_custom (void); extern void init_custom (void);
extern bool picasso_requested_on; extern bool picasso_requested_on;
...@@ -38,7 +39,7 @@ extern void set_picasso_hack_rate (int hz); ...@@ -38,7 +39,7 @@ extern void set_picasso_hack_rate (int hz);
/* Set to 1 to leave out the current frame in average frame time calculation. /* Set to 1 to leave out the current frame in average frame time calculation.
* Useful if the debugger was active. */ * Useful if the debugger was active. */
extern int bogusframe; extern int bogusframe;
extern unsigned long hsync_counter; extern unsigned long int hsync_counter, vsync_counter;
extern uae_u16 dmacon; extern uae_u16 dmacon;
extern uae_u16 intena, intreq, intreqr; extern uae_u16 intena, intreq, intreqr;
...@@ -52,7 +53,7 @@ extern int n_frames; ...@@ -52,7 +53,7 @@ extern int n_frames;
STATIC_INLINE int dmaen (unsigned int dmamask) STATIC_INLINE int dmaen (unsigned int dmamask)
{ {
return (dmamask & dmacon) && (dmacon & 0x200); return (dmamask & dmacon) && (dmacon & 0x200);
} }
#define SPCFLAG_STOP 2 #define SPCFLAG_STOP 2
...@@ -178,26 +179,26 @@ extern int xbluecolor_s, xbluecolor_b, xbluecolor_m; ...@@ -178,26 +179,26 @@ extern int xbluecolor_s, xbluecolor_b, xbluecolor_m;
/* get resolution from bplcon0 */ /* get resolution from bplcon0 */
STATIC_INLINE int GET_RES_DENISE (uae_u16 con0) STATIC_INLINE int GET_RES_DENISE (uae_u16 con0)
{ {
if (!(currprefs.chipset_mask & CSMASK_ECS_DENISE)) if (!(currprefs.chipset_mask & CSMASK_ECS_DENISE))
con0 &= ~0x40; con0 &= ~0x40; // SUPERHIRES
return ((con0) & 0x8000) ? RES_HIRES : ((con0) & 0x40) ? RES_SUPERHIRES : RES_LORES; return ((con0) & 0x8000) ? RES_HIRES : ((con0) & 0x40) ? RES_SUPERHIRES : RES_LORES;
} }
STATIC_INLINE int GET_RES_AGNUS (uae_u16 con0) STATIC_INLINE int GET_RES_AGNUS (uae_u16 con0)
{ {
if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS)) if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS))
con0 &= ~0x40; con0 &= ~0x40; // SUPERHIRES
return ((con0) & 0x8000) ? RES_HIRES : ((con0) & 0x40) ? RES_SUPERHIRES : RES_LORES; return ((con0) & 0x8000) ? RES_HIRES : ((con0) & 0x40) ? RES_SUPERHIRES : RES_LORES;
} }
/* get sprite width from FMODE */ /* get sprite width from FMODE */
#define GET_SPRITEWIDTH(FMODE) ((((FMODE) >> 2) & 3) == 3 ? 64 : (((FMODE) >> 2) & 3) == 0 ? 16 : 32) #define GET_SPRITEWIDTH(FMODE) ((((FMODE) >> 2) & 3) == 3 ? 64 : (((FMODE) >> 2) & 3) == 0 ? 16 : 32)
/* Compute the number of bitplanes from a value written to BPLCON0 */ /* Compute the number of bitplanes from a value written to BPLCON0 */
STATIC_INLINE int GET_PLANES(uae_u16 bplcon0) STATIC_INLINE int GET_PLANES(uae_u16 bplcon0)
{ {
if ((bplcon0 & 0x0010) && (bplcon0 & 0x7000)) if ((bplcon0 & 0x0010) && (bplcon0 & 0x7000))
return 0; return 0; // >8 planes = 0 planes
if (bplcon0 & 0x0010) if (bplcon0 & 0x0010)
return 8; return 8; // AGA 8-planes bit
return (bplcon0 >> 12) & 7; return (bplcon0 >> 12) & 7; // normal planes bits
} }
extern void fpscounter_reset (void); extern void fpscounter_reset (void);
...@@ -205,12 +206,13 @@ extern unsigned long idletime; ...@@ -205,12 +206,13 @@ extern unsigned long idletime;
extern int lightpen_x, lightpen_y, lightpen_cx, lightpen_cy; extern int lightpen_x, lightpen_y, lightpen_cx, lightpen_cy;
struct customhack { struct customhack {
uae_u16 v; uae_u16 v;
int vpos, hpos; int vpos, hpos;
}; };
void customhack_put (struct customhack *ch, uae_u16 v, int hpos); void customhack_put (struct customhack *ch, uae_u16 v, int hpos);
uae_u16 customhack_get (struct customhack *ch, int hpos); uae_u16 customhack_get (struct customhack *ch, int hpos);
extern void alloc_cycle_ext (int, int); extern void alloc_cycle_ext (int, int);
extern bool ispal (void); extern bool ispal (void);
extern int current_maxvpos (void);
#define HSYNCTIME (maxhpos * CYCLE_UNIT); #define HSYNCTIME (maxhpos * CYCLE_UNIT);
...@@ -39,6 +39,7 @@ extern uaecptr dumpmem2 (uaecptr addr, TCHAR *out, int osize); ...@@ -39,6 +39,7 @@ extern uaecptr dumpmem2 (uaecptr addr, TCHAR *out, int osize);
extern void update_debug_info (void); extern void update_debug_info (void);
extern int instruction_breakpoint (TCHAR **c); extern int instruction_breakpoint (TCHAR **c);
extern int debug_bankchange (int); extern int debug_bankchange (int);
extern void log_dma_record (void);
#define BREAKPOINT_TOTAL 8 #define BREAKPOINT_TOTAL 8
struct breakpoint_node { struct breakpoint_node {
......
...@@ -14,12 +14,13 @@ typedef enum { DRV_NONE = -1, DRV_35_DD = 0, DRV_35_HD, DRV_525_SD, DRV_35_DD_ES ...@@ -14,12 +14,13 @@ typedef enum { DRV_NONE = -1, DRV_35_DD = 0, DRV_35_HD, DRV_525_SD, DRV_35_DD_ES
extern void DISK_init (void); extern void DISK_init (void);
extern void DISK_free (void); extern void DISK_free (void);
extern void DISK_select (uae_u8 data); extern void DISK_select (uae_u8 data);
extern void DISK_select_set (uae_u8 data);
extern uae_u8 DISK_status (void); extern uae_u8 DISK_status (void);
extern void disk_eject (int num); extern void disk_eject (int num);
extern int disk_empty (int num); extern int disk_empty (int num);
extern void disk_insert (int num, const TCHAR *name); extern void disk_insert (int num, const TCHAR *name);
extern void disk_insert_force (int num, const TCHAR *name); extern void disk_insert_force (int num, const TCHAR *name, bool writeprotected);
extern void DISK_check_change (void); extern void DISK_vsync (void);
//extern int DISK_validate_filename (const TCHAR *fname, int leave_open, bool *wrprot, uae_u32 *crc32, struct zfile **zf); //extern int DISK_validate_filename (const TCHAR *fname, int leave_open, bool *wrprot, uae_u32 *crc32, struct zfile **zf);
extern void DISK_handler (uae_u32); extern void DISK_handler (uae_u32);
extern void DISK_update (unsigned int hpos); extern void DISK_update (unsigned int hpos);
......
...@@ -277,6 +277,7 @@ extern void notice_interlace_seen (void); ...@@ -277,6 +277,7 @@ extern void notice_interlace_seen (void);
extern void frame_drawn (void); extern void frame_drawn (void);
extern void redraw_frame (void); extern void redraw_frame (void);
extern int get_custom_limits (int *pw, int *ph, int *pdx, int *pdy); extern int get_custom_limits (int *pw, int *ph, int *pdx, int *pdy);
extern void putpixel (uae_u8 *buf, int bpp, int x, xcolnr c8, int opaq);
/* Finally, stuff that shouldn't really be shared. */ /* Finally, stuff that shouldn't really be shared. */
......
...@@ -37,13 +37,12 @@ extern volatile frame_time_t vsynctime, vsyncmintime; ...@@ -37,13 +37,12 @@ extern volatile frame_time_t vsynctime, vsyncmintime;
extern void reset_frame_rate_hack (void); extern void reset_frame_rate_hack (void);
extern int rpt_available; extern int rpt_available;
extern frame_time_t syncbase; extern frame_time_t syncbase;
extern unsigned long int vsync_cycles;
extern unsigned long start_cycles;
extern void compute_vsynctime (void); extern void compute_vsynctime (void);
extern void init_eventtab (void); extern void init_eventtab (void);
extern void do_cycles_ce (long cycles); extern void do_cycles_ce (unsigned long cycles);
extern void do_cycles_ce020 (int clocks);
extern void do_cycles_ce020_mem (int clocks);
extern void do_cycles_ce000 (int clocks);
extern int is_cycle_ce (void); extern int is_cycle_ce (void);
extern unsigned long currcycle, nextevent, is_lastline; extern unsigned long currcycle, nextevent, is_lastline;
......
...@@ -51,6 +51,7 @@ STATIC_INLINE unsigned long int get_cycles (void) ...@@ -51,6 +51,7 @@ STATIC_INLINE unsigned long int get_cycles (void)
STATIC_INLINE void set_cycles (unsigned long int x) STATIC_INLINE void set_cycles (unsigned long int x)
{ {
currcycle = x; currcycle = x;
eventtab[ev_hsync].oldcycles = x;
#ifdef EVT_DEBUG #ifdef EVT_DEBUG
if (currcycle & (CYCLE_UNIT - 1)) if (currcycle & (CYCLE_UNIT - 1))
write_log ("%x\n", currcycle); write_log ("%x\n", currcycle);
...@@ -96,18 +97,3 @@ STATIC_INLINE void do_cycles_slow (unsigned long cycles_to_add) ...@@ -96,18 +97,3 @@ STATIC_INLINE void do_cycles_slow (unsigned long cycles_to_add)
#define do_cycles do_cycles_slow #define do_cycles do_cycles_slow
#define countdown pissoff #define countdown pissoff
/* This is a special-case function. Normally, all events should lie in the
future; they should only ever be active at the current cycle during
do_cycles. However, a snapshot is saved during do_cycles, and so when
restoring it, we may have other events pending. */
STATIC_INLINE void handle_active_events (void)
{
int i;
for (i = 0; i < ev_max; i++) {
if (eventtab[i].active && eventtab[i].evtime == currcycle) {
(*eventtab[i].handler)();
}
}
}
...@@ -126,8 +126,6 @@ INPUTEVENT_END ...@@ -126,8 +126,6 @@ INPUTEVENT_END
extern void handle_cd32_joystick_cia (uae_u8, uae_u8); extern void handle_cd32_joystick_cia (uae_u8, uae_u8);
extern uae_u8 handle_parport_joystick (int port, uae_u8 pra, uae_u8 dra); extern uae_u8 handle_parport_joystick (int port, uae_u8 pra, uae_u8 dra);
extern uae_u8 handle_joystick_buttons (uae_u8, uae_u8); extern uae_u8 handle_joystick_buttons (uae_u8, uae_u8);
extern int getbuttonstate (int joy, int button);
extern int getjoystate (int joy);
#define MAGICMOUSE_BOTH 0 #define MAGICMOUSE_BOTH 0
#define MAGICMOUSE_NATIVE_ONLY 1 #define MAGICMOUSE_NATIVE_ONLY 1
...@@ -154,7 +152,6 @@ extern void inputdevice_devicechange (struct uae_prefs *prefs); ...@@ -154,7 +152,6 @@ extern void inputdevice_devicechange (struct uae_prefs *prefs);
extern int inputdevice_translatekeycode (int keyboard, int scancode, int state); extern int inputdevice_translatekeycode (int keyboard, int scancode, int state);
extern void inputdevice_setkeytranslation (struct uae_input_device_kbr_default *trans, int **kbmaps); extern void inputdevice_setkeytranslation (struct uae_input_device_kbr_default *trans, int **kbmaps);
extern int handle_input_event (int nr, int state, int max, int autofire);
extern void inputdevice_do_keyboard (int code, int state); extern void inputdevice_do_keyboard (int code, int state);
extern int inputdevice_iskeymapped (int keyboard, int scancode); extern int inputdevice_iskeymapped (int keyboard, int scancode);
extern int inputdevice_synccapslock (int, int*); extern int inputdevice_synccapslock (int, int*);
...@@ -175,6 +172,8 @@ extern uae_u16 POT1DAT (void); ...@@ -175,6 +172,8 @@ extern uae_u16 POT1DAT (void);
extern void JOYTEST (uae_u16 v); extern void JOYTEST (uae_u16 v);
extern uae_u16 JOY0DAT (void); extern uae_u16 JOY0DAT (void);
extern uae_u16 JOY1DAT (void); extern uae_u16 JOY1DAT (void);
extern void JOYSET (int num, uae_u16 v);
extern uae_u16 JOYGET (int num);
extern void inputdevice_vsync (void); extern void inputdevice_vsync (void);
extern void inputdevice_hsync (void); extern void inputdevice_hsync (void);
...@@ -211,10 +210,11 @@ extern void inputdevice_tablet_strobe (void); ...@@ -211,10 +210,11 @@ extern void inputdevice_tablet_strobe (void);
#define JSEM_MODE_DEFAULT 0 #define JSEM_MODE_DEFAULT 0
#define JSEM_MODE_MOUSE 1 #define JSEM_MODE_MOUSE 1
#define JSEM_MODE_JOYSTICK 2 #define JSEM_MODE_JOYSTICK 2
#define JSEM_MODE_JOYSTICK_ANALOG 3 #define JSEM_MODE_GAMEPAD 3
#define JSEM_MODE_MOUSE_CDTV 4 #define JSEM_MODE_JOYSTICK_ANALOG 4
#define JSEM_MODE_JOYSTICK_CD32 5 #define JSEM_MODE_MOUSE_CDTV 5
#define JSEM_MODE_LIGHTPEN 6 #define JSEM_MODE_JOYSTICK_CD32 6
#define JSEM_MODE_LIGHTPEN 7
#define JSEM_KBDLAYOUT 0 #define JSEM_KBDLAYOUT 0
#define JSEM_JOYS 100 #define JSEM_JOYS 100
...@@ -237,32 +237,6 @@ extern int jsem_iskbdjoy (int port, const struct uae_prefs *p); ...@@ -237,32 +237,6 @@ extern int jsem_iskbdjoy (int port, const struct uae_prefs *p);
extern int inputdevice_uaelib (TCHAR *, TCHAR *); extern int inputdevice_uaelib (TCHAR *, TCHAR *);
#define INPREC_JOYPORT 1
#define INPREC_JOYBUTTON 2
#define INPREC_KEY 3
#define INPREC_DISKINSERT 4
#define INPREC_DISKREMOVE 5
#define INPREC_VSYNC 6
#define INPREC_CIAVSYNC 7
#define INPREC_END 0xff
#define INPREC_QUIT 0xfe
extern int input_recording;
extern void inprec_close (void);
extern int inprec_open (TCHAR*, int);
extern void inprec_rend (void);
extern void inprec_rstart (uae_u8);
extern void inprec_ru8 (uae_u8);
extern void inprec_ru16 (uae_u16);
extern void inprec_ru32 (uae_u32);
extern void inprec_rstr (const TCHAR*);
extern int inprec_pstart (uae_u8);
extern void inprec_pend (void);
extern uae_u8 inprec_pu8 (void);
extern uae_u16 inprec_pu16 (void);
extern uae_u32 inprec_pu32 (void);
extern int inprec_pstr (TCHAR*);
extern int inputdevice_testread (int*, int*, int*); extern int inputdevice_testread (int*, int*, int*);
extern int inputdevice_istest (void); extern int inputdevice_istest (void);
extern void inputdevice_settest (int); extern void inputdevice_settest (int);
......
This diff is collapsed.
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#define UAEMAJOR 2 #define UAEMAJOR 2
#define UAEMINOR 3 #define UAEMINOR 3
#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, KBD_LANG_TR } KbdLang; typedef enum { KBD_LANG_US, KBD_LANG_DK, KBD_LANG_DE, KBD_LANG_SE, KBD_LANG_FR, KBD_LANG_IT, KBD_LANG_ES, KBD_LANG_TR } KbdLang;
...@@ -53,6 +53,7 @@ struct uae_input_device { ...@@ -53,6 +53,7 @@ struct uae_input_device {
}; };
#define MAX_JPORTS 4 #define MAX_JPORTS 4
#define NORMAL_JPORTS 2
#define MAX_JPORTNAME 128 #define MAX_JPORTNAME 128
struct jport { struct jport {
int id; int id;
...@@ -126,6 +127,14 @@ enum { CP_GENERIC = 1, CP_CDTV, CP_CD32, CP_A500, CP_A500P, CP_A600, CP_A1000, ...@@ -126,6 +127,14 @@ enum { CP_GENERIC = 1, CP_CDTV, CP_CD32, CP_A500, CP_A500P, CP_A600, CP_A1000,
#define GFX_FULLSCREEN 1 #define GFX_FULLSCREEN 1
#define GFX_FULLWINDOW 2 #define GFX_FULLWINDOW 2
#define AUTOSCALE_NONE 0
#define AUTOSCALE_STATIC_AUTO 1
#define AUTOSCALE_STATIC_NOMINAL 2
#define AUTOSCALE_STATIC_MAX 3
#define AUTOSCALE_NORMAL 4
#define AUTOSCALE_RESIZE 5
#define AUTOSCALE_CENTER 6
struct uae_prefs { struct uae_prefs {
struct strlist *all_lines; struct strlist *all_lines;
...@@ -198,8 +207,8 @@ struct uae_prefs { ...@@ -198,8 +207,8 @@ struct uae_prefs {
struct wh gfx_size_win; struct wh gfx_size_win;
struct wh gfx_size_fs; struct wh gfx_size_fs;
struct wh gfx_size; struct wh gfx_size;
struct wh gfx_size_win_xtra[4]; struct wh gfx_size_win_xtra[6];
struct wh gfx_size_fs_xtra[4]; struct wh gfx_size_fs_xtra[6];
bool gfx_autoresolution; bool gfx_autoresolution;
bool gfx_scandoubler; bool gfx_scandoubler;
int gfx_refreshrate; int gfx_refreshrate;
...@@ -320,6 +329,8 @@ struct uae_prefs { ...@@ -320,6 +329,8 @@ struct uae_prefs {
struct cdslot cdslots[MAX_TOTAL_SCSI_DEVICES]; struct cdslot cdslots[MAX_TOTAL_SCSI_DEVICES];
TCHAR quitstatefile[MAX_DPATH]; TCHAR quitstatefile[MAX_DPATH];
TCHAR statefile[MAX_DPATH]; TCHAR statefile[MAX_DPATH];
TCHAR inprecfile[MAX_DPATH];
bool inprec_autoplay;
#ifndef WIN32 #ifndef WIN32
char scsi_device[256]; char scsi_device[256];
#endif #endif
...@@ -362,6 +373,7 @@ struct uae_prefs { ...@@ -362,6 +373,7 @@ struct uae_prefs {
bool filesys_custom_uaefsdb; bool filesys_custom_uaefsdb;
bool mmkeyboard; bool mmkeyboard;
int uae_hide; int uae_hide;
bool clipboard_sharing;
struct uaedev_mount_info *mountinfo; struct uaedev_mount_info *mountinfo;
int mountitems; int mountitems;
...@@ -474,6 +486,7 @@ struct uae_prefs { ...@@ -474,6 +486,7 @@ struct uae_prefs {
struct uae_input_device mouse_settings[MAX_INPUT_SETTINGS][MAX_INPUT_DEVICES]; struct uae_input_device mouse_settings[MAX_INPUT_SETTINGS][MAX_INPUT_DEVICES];
struct uae_input_device keyboard_settings[MAX_INPUT_SETTINGS][MAX_INPUT_DEVICES]; struct uae_input_device keyboard_settings[MAX_INPUT_SETTINGS][MAX_INPUT_DEVICES];
int dongle; int dongle;
int input_contact_bounce;
}; };
extern int config_changed; extern int config_changed;
......
This diff is collapsed.
/* /*
* E-UAE - The portable Amiga Emulator * PUAE - The portable Amiga Emulator
* *
* Version/revision info. * Version/revision info.
* *
* (c) 2006 Richard Drummond * (c) 2006 Richard Drummond
* (c) 2010 Mustafa TUFAN
*/ */
#ifndef EUAE_VERSION_H #ifndef EUAE_VERSION_H
...@@ -18,7 +19,7 @@ ...@@ -18,7 +19,7 @@
#define UAEMAJOR 2 #define UAEMAJOR 2
#define UAEMINOR 3 #define UAEMINOR 3
#define UAESUBREV 0 #define UAESUBREV 1
#define UAEVERSION (256*65536L*UAEMAJOR + 65536L*UAEMINOR + UAESUBREV) #define UAEVERSION (256*65536L*UAEMAJOR + 65536L*UAEMINOR + UAESUBREV)
......
...@@ -16,12 +16,11 @@ extern xcolnr xcolors_16[4096]; ...@@ -16,12 +16,11 @@ extern xcolnr xcolors_16[4096];
extern xcolnr xcolors_32[4096]; extern xcolnr xcolors_32[4096];
extern uae_u32 p96_rgbx16[65536]; extern uae_u32 p96_rgbx16[65536];
extern int vsync_switchmode (int, int); extern bool vsync_switchmode (int, int);
extern void doflashscreen (void); extern void doflashscreen (void);
extern int flashscreen; extern int flashscreen;
extern int debuggable (void); extern int debuggable (void);
extern void togglemouse (void);
extern void LED (int); extern void LED (int);
extern void screenshot (int,int); extern void screenshot (int,int);
...@@ -76,6 +75,8 @@ struct vidbuf_description ...@@ -76,6 +75,8 @@ struct vidbuf_description
int maxblocklines; /* Set to 0 if you want calls to flush_line after each drawn line, or the number of int maxblocklines; /* Set to 0 if you want calls to flush_line after each drawn line, or the number of
* lines that flush_block wants to/can handle (it isn't really useful to use another * lines that flush_block wants to/can handle (it isn't really useful to use another
* value than maxline here). */ * value than maxline here). */
int gfx_resolution_reserved; // reserved space for currprefs.gfx_resolution
int gfx_vresolution_reserved; // reserved space for currprefs.gfx_resolution
}; };
#define MAXBLOCKLINES_MAX INT_MAX; #define MAXBLOCKLINES_MAX INT_MAX;
...@@ -122,7 +123,7 @@ extern void graphics_close (void); ...@@ -122,7 +123,7 @@ extern void graphics_close (void);
extern void graphics_notify_state (int state); extern void graphics_notify_state (int state);
extern void handle_events (void); extern void handle_events (void);
extern int is_fullscreen (void); extern int is_fullscreen (void);
extern int is_vsync (void); //extern int is_vsync (void);
extern void toggle_fullscreen (int mode); extern void toggle_fullscreen (int mode);
extern void toggle_mousegrab (void); extern void toggle_mousegrab (void);
......
This diff is collapsed.
...@@ -77,14 +77,6 @@ int record_key_direct (int kc) ...@@ -77,14 +77,6 @@ int record_key_direct (int kc)
kc ^= AK_CTRL << 1; kc ^= AK_CTRL << 1;
} }
#ifdef INPREC
if (input_recording > 0) {
inprec_rstart(INPREC_KEY);
inprec_ru8(kc);
inprec_rend();
}
#endif
keybuf[kpb_first] = kc; keybuf[kpb_first] = kc;
kpb_first = kpb_next; kpb_first = kpb_next;
return 1; return 1;
...@@ -95,24 +87,3 @@ void keybuf_init (void) ...@@ -95,24 +87,3 @@ void keybuf_init (void)
kpb_first = kpb_last = 0; kpb_first = kpb_last = 0;
inputdevice_updateconfig (&currprefs); inputdevice_updateconfig (&currprefs);
} }
#ifdef SAVESTATE
uae_u8 *save_keyboard (int *len)
{
uae_u8 *dst, *t;
dst = t = xmalloc (uae_u8, 8);
save_u32 (getcapslockstate () ? 1 : 0);
save_u32 (0);
*len = 8;
return t;
}
uae_u8 *restore_keyboard (uae_u8 *src)
{
setcapslockstate (restore_u32 ());
restore_u32 ();
return src;
}
#endif /* SAVESTATE */
This diff is collapsed.
...@@ -2397,7 +2397,7 @@ void map_overlay (int chip) ...@@ -2397,7 +2397,7 @@ void map_overlay (int chip)
map_banks (rb, 0, size, 0x80000); map_banks (rb, 0, size, 0x80000);
} }
fill_ce_banks (); fill_ce_banks ();
if (savestate_state != STATE_RESTORE && savestate_state != STATE_REWIND && valid_address (regs.pc, 4)) if (!isrestore () && valid_address (regs.pc, 4))
m68k_setpc (m68k_getpc ()); m68k_setpc (m68k_getpc ());
} }
......
This diff is collapsed.
...@@ -28,8 +28,8 @@ ...@@ -28,8 +28,8 @@
<key>CFBundleName</key> <key>CFBundleName</key>
<string>PUAE</string> <string>PUAE</string>
<key>CFBundleGetInfoString</key> <key>CFBundleGetInfoString</key>
<string>2.3.0</string> <string>2.3.1</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>2.3.0</string> <string>2.3.1</string>
</dict> </dict>
</plist> </plist>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment