Commit f3f22b7c authored by GnoStiC's avatar GnoStiC

puae 2.3.2

parent 7da67404
PUAE 2.3.1 beta series PUAE 2.3.2 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-2011 Mustafa Tufan ...@@ -6,7 +6,7 @@ dnl Updated and generally mauled 2008-2011 Mustafa Tufan
dnl dnl
AC_PREREQ(2.55) AC_PREREQ(2.55)
AC_INIT(PUAE, 2.3.1, mustafa.tufan@gmail.com, puae) AC_INIT(PUAE, 2.3.2, mustafa.tufan@gmail.com, 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
......
...@@ -160,7 +160,7 @@ uae_SOURCES = \ ...@@ -160,7 +160,7 @@ uae_SOURCES = \
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 \
missing.c readcpu.c missing.c readcpu.c aros.rom.c hrtmon.rom.c
EXTRA_uae_SOURCES = \ EXTRA_uae_SOURCES = \
bsdsocket.c bsdsocket-posix-new.c build68k.c catweasel.c cdrom.c \ bsdsocket.c bsdsocket-posix-new.c build68k.c catweasel.c cdrom.c \
......
...@@ -1743,10 +1743,6 @@ void action_replay_cleanup() ...@@ -1743,10 +1743,6 @@ void action_replay_cleanup()
#define TRUE 1 #define TRUE 1
#endif #endif
#ifdef ACTION_REPLAY_HRTMON
#include "hrtmon.rom.c"
#endif
int hrtmon_lang = 0; int hrtmon_lang = 0;
static void hrtmon_configure(void) static void hrtmon_configure(void)
...@@ -1818,6 +1814,8 @@ int hrtmon_load (void) ...@@ -1818,6 +1814,8 @@ int hrtmon_load (void)
hrtmem_mask = hrtmem_size - 1; hrtmem_mask = hrtmem_size - 1;
if (isinternal) { if (isinternal) {
#ifdef ACTION_REPLAY_HRTMON #ifdef ACTION_REPLAY_HRTMON
extern unsigned char hrtrom[];
extern unsigned int hrtrom_len;
struct zfile *zf; struct zfile *zf;
zf = zfile_fopen_data ("hrtrom.gz", hrtrom_len, hrtrom); zf = zfile_fopen_data ("hrtrom.gz", hrtrom_len, hrtrom);
// f = zfile_fopen ("d:\\amiga\\amiga\\hrtmon\\src\\hrtmon.rom", "rb", 0); // f = zfile_fopen ("d:\\amiga\\amiga\\hrtmon\\src\\hrtmon.rom", "rb", 0);
......
...@@ -659,6 +659,8 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type) ...@@ -659,6 +659,8 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type)
cfgfile_write_str (f, "sound_filter", soundfiltermode1[p->sound_filter]); cfgfile_write_str (f, "sound_filter", soundfiltermode1[p->sound_filter]);
cfgfile_write_str (f, "sound_filter_type", soundfiltermode2[p->sound_filter_type]); cfgfile_write_str (f, "sound_filter_type", soundfiltermode2[p->sound_filter_type]);
cfgfile_write (f, "sound_volume", "%d", p->sound_volume); cfgfile_write (f, "sound_volume", "%d", p->sound_volume);
if (p->sound_volume_cd >= 0)
cfgfile_write (f, "sound_volume_cd", "%d", p->sound_volume_cd);
cfgfile_write_bool (f, "sound_auto", p->sound_auto); cfgfile_write_bool (f, "sound_auto", p->sound_auto);
cfgfile_write_bool (f, "sound_stereo_swap_paula", p->sound_stereo_swap_paula); cfgfile_write_bool (f, "sound_stereo_swap_paula", p->sound_stereo_swap_paula);
cfgfile_write_bool (f, "sound_stereo_swap_ahi", p->sound_stereo_swap_ahi); cfgfile_write_bool (f, "sound_stereo_swap_ahi", p->sound_stereo_swap_ahi);
...@@ -827,6 +829,11 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type) ...@@ -827,6 +829,11 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type)
cfgfile_write_bool (f, "ntsc", p->ntscmode); cfgfile_write_bool (f, "ntsc", p->ntscmode);
cfgfile_write_bool (f, "genlock", p->genlock); cfgfile_write_bool (f, "genlock", p->genlock);
cfgfile_dwrite_bool (f, "show_leds", !!(p->leds_on_screen & STATUSLINE_CHIPSET)); cfgfile_dwrite_bool (f, "show_leds", !!(p->leds_on_screen & STATUSLINE_CHIPSET));
if (p->osd_pos.y || p->osd_pos.x) {
cfgfile_dwrite (f, "osd_position", "%.1f%s:%.1f%s",
p->osd_pos.x >= 20000 ? (p->osd_pos.x - 30000) / 10.0 : (float)p->osd_pos.x, p->osd_pos.x >= 20000 ? "%" : "",
p->osd_pos.y >= 20000 ? (p->osd_pos.y - 30000) / 10.0 : (float)p->osd_pos.y, p->osd_pos.y >= 20000 ? "%" : "");
}
cfgfile_dwrite_bool (f, "show_leds_rtg", !!(p->leds_on_screen & STATUSLINE_RTG)); cfgfile_dwrite_bool (f, "show_leds_rtg", !!(p->leds_on_screen & STATUSLINE_RTG));
cfgfile_dwrite (f, "keyboard_leds", "numlock:%s,capslock:%s,scrolllock:%s", cfgfile_dwrite (f, "keyboard_leds", "numlock:%s,capslock:%s,scrolllock:%s",
kbleds[p->keyboard_leds[0]], kbleds[p->keyboard_leds[1]], kbleds[p->keyboard_leds[2]]); kbleds[p->keyboard_leds[0]], kbleds[p->keyboard_leds[1]], kbleds[p->keyboard_leds[2]]);
...@@ -1342,6 +1349,7 @@ static int cfgfile_parse_host (struct uae_prefs *p, TCHAR *option, TCHAR *value) ...@@ -1342,6 +1349,7 @@ static int cfgfile_parse_host (struct uae_prefs *p, TCHAR *option, TCHAR *value)
|| cfgfile_yesno (option, value, "state_replay_autoplay", &p->inprec_autoplay) || cfgfile_yesno (option, value, "state_replay_autoplay", &p->inprec_autoplay)
|| cfgfile_intval (option, value, "sound_frequency", &p->sound_freq, 1) || cfgfile_intval (option, value, "sound_frequency", &p->sound_freq, 1)
|| cfgfile_intval (option, value, "sound_volume", &p->sound_volume, 1) || cfgfile_intval (option, value, "sound_volume", &p->sound_volume, 1)
|| cfgfile_intval (option, value, "sound_volume_cd", &p->sound_volume_cd, 1)
|| cfgfile_intval (option, value, "sound_stereo_separation", &p->sound_stereo_separation, 1) || cfgfile_intval (option, value, "sound_stereo_separation", &p->sound_stereo_separation, 1)
|| cfgfile_intval (option, value, "sound_stereo_mixing_delay", &p->sound_mixed_stereo_delay, 1) || cfgfile_intval (option, value, "sound_stereo_mixing_delay", &p->sound_mixed_stereo_delay, 1)
...@@ -1487,6 +1495,29 @@ static int cfgfile_parse_host (struct uae_prefs *p, TCHAR *option, TCHAR *value) ...@@ -1487,6 +1495,29 @@ static int cfgfile_parse_host (struct uae_prefs *p, TCHAR *option, TCHAR *value)
return 1; return 1;
} }
if (!_tcscmp (option, "osd_position")) {
TCHAR *s = value;
p->osd_pos.x = 0;
p->osd_pos.y = 0;
while (s) {
if (!_tcschr (s, ':'))
break;
p->osd_pos.x = _tstof (s) * 10.0;
s = _tcschr (s, ':');
if (!s)
break;
if (s[-1] == '%')
p->osd_pos.x += 30000;
s++;
p->osd_pos.y = _tstof (s) * 10.0;
s += _tcslen (s);
if (s[-1] == '%')
p->osd_pos.y += 30000;
break;
}
return 1;
}
#ifdef GFXFILTER #ifdef GFXFILTER
if (_tcscmp (option, "gfx_filter_overlay") == 0) { if (_tcscmp (option, "gfx_filter_overlay") == 0) {
return 1; return 1;
...@@ -3903,6 +3934,8 @@ static void buildin_default_prefs (struct uae_prefs *p) ...@@ -3903,6 +3934,8 @@ static void buildin_default_prefs (struct uae_prefs *p)
p->cachesize = 0; p->cachesize = 0;
#endif #endif
p->socket_emu = 0; p->socket_emu = 0;
p->sound_volume = 0;
p->sound_volume_cd = -1;
p->chipmem_size = 0x00080000; p->chipmem_size = 0x00080000;
p->bogomem_size = 0x00080000; p->bogomem_size = 0x00080000;
......
This diff is collapsed.
...@@ -3302,7 +3302,7 @@ static void DMACON (int hpos, uae_u16 v) ...@@ -3302,7 +3302,7 @@ static void DMACON (int hpos, uae_u16 v)
} }
static void MISC_handler (void) void MISC_handler (void)
{ {
static bool dorecheck; static bool dorecheck;
bool recheck; bool recheck;
...@@ -3347,57 +3347,6 @@ static void MISC_handler (void) ...@@ -3347,57 +3347,6 @@ static void MISC_handler (void)
recursive--; recursive--;
} }
STATIC_INLINE void event2_newevent_xx (int no, evt t, uae_u32 data, evfunc2 func)
{
evt et;
static int next = ev2_misc;
et = t + get_cycles ();
if (no < 0) {
no = next;
for (;;) {
if (!eventtab2[no].active)
break;
if (eventtab2[no].evtime == et && eventtab2[no].handler == func) {
eventtab2[no].handler (eventtab2[no].data);
break;
}
no++;
if (no == ev2_max)
no = ev2_misc;
if (no == next) {
write_log ("out of event2's! PC=%x\n", M68K_GETPC);
return;
}
}
next = no;
}
eventtab2[no].active = true;
eventtab2[no].evtime = et;
eventtab2[no].handler = func;
eventtab2[no].data = data;
MISC_handler ();
}
STATIC_INLINE void event2_newevent_x (int no, evt t, uae_u32 data, evfunc2 func)
{
if (((int)t) <= 0) {
func (data);
return;
}
event2_newevent_xx (no, t * CYCLE_UNIT, data, func);
}
void event2_newevent (int no, evt t, uae_u32 data)
{
event2_newevent_x (no, t, data, eventtab2[no].handler);
}
void event2_newevent2 (evt t, uae_u32 data, evfunc2 func)
{
event2_newevent_x (-1, t, data, func);
}
static int irq_nmi; static int irq_nmi;
void NMI_delayed (void) void NMI_delayed (void)
...@@ -5775,11 +5724,6 @@ static void hsync_handler (void) ...@@ -5775,11 +5724,6 @@ static void hsync_handler (void)
hsync_handler_post (vs); hsync_handler_post (vs);
} }
void event2_remevent (int no)
{
eventtab2[no].active = 0;
}
void init_eventtab (void) void init_eventtab (void)
{ {
int i; int i;
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include "crc32.h" #include "crc32.h"
#include "cpummu.h" #include "cpummu.h"
#include "rommgr.h" #include "rommgr.h"
#include "inputrecord.h"
int debugger_active; int debugger_active;
static uaecptr skipaddr_start, skipaddr_end; static uaecptr skipaddr_start, skipaddr_end;
...@@ -1019,6 +1020,8 @@ static void decode_dma_record (int hpos, int vpos, int toggle, bool logfile) ...@@ -1019,6 +1020,8 @@ static void decode_dma_record (int hpos, int vpos, int toggle, bool logfile)
} }
void log_dma_record (void) void log_dma_record (void)
{ {
if (!input_record && !input_play)
return;
if (!debug_dma) if (!debug_dma)
debug_dma = 1; debug_dma = 1;
decode_dma_record (0, 0, 0, true); decode_dma_record (0, 0, 0, true);
...@@ -1744,6 +1747,20 @@ uae_u8 *restore_debug_memwatch (uae_u8 *src) ...@@ -1744,6 +1747,20 @@ uae_u8 *restore_debug_memwatch (uae_u8 *src)
return src; return src;
} }
void restore_debug_memwatch_finish (void)
{
unsigned int i;
for (i = 0; i < MEMWATCH_TOTAL; i++) {
struct memwatch_node *m = &mwnodes[i];
if (m->size) {
if (!memwatch_enabled)
initialize_memwatch (0);
return;
}
}
}
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;
...@@ -1790,18 +1807,21 @@ static int memwatch_func (uaecptr addr, int rwi, int size, uae_u32 *valp) ...@@ -1790,18 +1807,21 @@ static int memwatch_func (uaecptr addr, int rwi, int size, uae_u32 *valp)
if (!m->frozen && m->val_enabled) { if (!m->frozen && m->val_enabled) {
int trigger = 0; int trigger = 0;
uae_u32 mask = (1 << (m->size * 8)) - 1; uae_u32 mask = (1 << (m->size * 8)) - 1;
uae_u32 mval = m->val;
int scnt = size; int scnt = size;
for (;;) { for (;;) {
if (((m->val & mask) & m->val_mask) == ((val & mask) & m->val_mask)) if (((mval & mask) & m->val_mask) == ((val & mask) & m->val_mask))
trigger = 1; trigger = 1;
if (mask & 0x80000000) if (mask & 0x80000000)
break; break;
if (m->size == 1) { if (m->size == 1) {
mask <<= 8; mask <<= 8;
mval <<= 8;
scnt--; scnt--;
} else if (m->size == 2) { } else if (m->size == 2) {
mask <<= 16; mask <<= 16;
scnt -= 2; scnt -= 2;
mval <<= 16;
} }
if (scnt <= 0) if (scnt <= 0)
break; break;
......
...@@ -2645,6 +2645,7 @@ static void disk_dmafinished (void) ...@@ -2645,6 +2645,7 @@ static void disk_dmafinished (void)
INTREQ (0x8000 | 0x0002); INTREQ (0x8000 | 0x0002);
longwritemode = 0; longwritemode = 0;
dskdmaen = 0; dskdmaen = 0;
dsklength = 0;
if (disk_debug_logging > 0) { if (disk_debug_logging > 0) {
unsigned int dr; unsigned int dr;
int mfmpos = -1; int mfmpos = -1;
...@@ -2682,8 +2683,6 @@ void DISK_handler (uae_u32 data) ...@@ -2682,8 +2683,6 @@ void DISK_handler (uae_u32 data)
int hpos = current_hpos (); int hpos = current_hpos ();
event2_remevent (ev2_disk); event2_remevent (ev2_disk);
if (disk_sync_cycle >= maxhpos)
return;
DISK_update (disk_sync_cycle); DISK_update (disk_sync_cycle);
if (flag & (DISK_REVOLUTION << 0)) if (flag & (DISK_REVOLUTION << 0))
fetchnextrevolution (&floppy[0]); fetchnextrevolution (&floppy[0]);
...@@ -2804,7 +2803,7 @@ static void disk_doupdate_predict (int startcycle) ...@@ -2804,7 +2803,7 @@ static void disk_doupdate_predict (int startcycle)
continue; continue;
int diskevent_flag = 0; int diskevent_flag = 0;
uae_u32 tword = word; uae_u32 tword = word;
int countcycle = startcycle; int countcycle = startcycle + (drv->floppybitcounter % drv->trackspeed);
int mfmpos = drv->mfmpos; int mfmpos = drv->mfmpos;
int indexhack = drv->indexhack; int indexhack = drv->indexhack;
while (countcycle < (maxhpos << 8)) { while (countcycle < (maxhpos << 8)) {
...@@ -2872,6 +2871,11 @@ static bool doreaddma (void) ...@@ -2872,6 +2871,11 @@ static bool doreaddma (void)
{ {
if (dmaen (DMA_DISK) && bitoffset == 15 && dma_enable && dskdmaen == 2 && dsklength >= 0) { if (dmaen (DMA_DISK) && bitoffset == 15 && dma_enable && dskdmaen == 2 && dsklength >= 0) {
if (dsklength > 0) { if (dsklength > 0) {
// DSKLEN == 1: finish without DMA transfer.
if (dsklength == 1 && dsklength2 == 1) {
disk_dmafinished ();
return false;
}
// fast disk modes, just flush the fifo // fast disk modes, just flush the fifo
if (currprefs.floppy_speed > 100 && fifo_inuse[0] && fifo_inuse[1] && fifo_inuse[2]) { if (currprefs.floppy_speed > 100 && fifo_inuse[0] && fifo_inuse[1] && fifo_inuse[2]) {
while (fifo_inuse[0]) { while (fifo_inuse[0]) {
...@@ -2882,9 +2886,6 @@ static bool doreaddma (void) ...@@ -2882,9 +2886,6 @@ static bool doreaddma (void)
} }
DSKDAT (word); DSKDAT (word);
dsklength--; dsklength--;
} else if (dsklength == 0 && disk_fifostatus () < 0) {
// zero length transfer wouldn't finish without this
disk_dmafinished ();
} }
return true; return true;
} }
...@@ -3125,6 +3126,10 @@ void DISK_update (unsigned int tohpos) ...@@ -3125,6 +3126,10 @@ void DISK_update (unsigned int tohpos)
disk_doupdate_read_nothing (cycles); disk_doupdate_read_nothing (cycles);
} }
/* instantly finish dma if dsklen==0 and wordsync detected */
if (dskdmaen && dma_enable && dsklength2 == 0 && dsklength == 0)
disk_dmafinished ();
disk_doupdate_predict (disk_hpos); disk_doupdate_predict (disk_hpos);
} }
...@@ -3143,6 +3148,7 @@ void DSKLEN (uae_u16 v, unsigned int hpos) ...@@ -3143,6 +3148,7 @@ void DSKLEN (uae_u16 v, unsigned int hpos)
dma_enable = (adkcon & 0x400) ? 0 : 1; dma_enable = (adkcon & 0x400) ? 0 : 1;
} }
if (!(v & 0x8000)) { if (!(v & 0x8000)) {
dma_enable = 0;
if (dskdmaen) { if (dskdmaen) {
/* Megalomania and Knightmare does this */ /* Megalomania and Knightmare does this */
if (disk_debug_logging > 0 && dskdmaen == 2) if (disk_debug_logging > 0 && dskdmaen == 2)
...@@ -3166,6 +3172,11 @@ void DSKLEN (uae_u16 v, unsigned int hpos) ...@@ -3166,6 +3172,11 @@ void DSKLEN (uae_u16 v, unsigned int hpos)
if (dskdmaen == 0) if (dskdmaen == 0)
return; return;
if (dsklength == 0 && dma_enable) {
disk_dmafinished ();
return;
}
if ((v & 0x4000) && (prev & 0x4000)) { if ((v & 0x4000) && (prev & 0x4000)) {
if (dsklength == 0) if (dsklength == 0)
return; return;
...@@ -3177,9 +3188,6 @@ void DSKLEN (uae_u16 v, unsigned int hpos) ...@@ -3177,9 +3188,6 @@ void DSKLEN (uae_u16 v, unsigned int hpos)
DISK_start (); DISK_start ();
} }
if (dsklength == 1)
dsklength = 0;
#ifdef DEBUGGER #ifdef DEBUGGER
if (((disk_debug_mode & DISK_DEBUG_DMA_READ) && dskdmaen == 2) || if (((disk_debug_mode & DISK_DEBUG_DMA_READ) && dskdmaen == 2) ||
((disk_debug_mode & DISK_DEBUG_DMA_WRITE) && dskdmaen == 3)) ((disk_debug_mode & DISK_DEBUG_DMA_WRITE) && dskdmaen == 3))
......
...@@ -2386,7 +2386,7 @@ void putpixel (uae_u8 *buf, int bpp, int x, xcolnr c8, int opaq) ...@@ -2386,7 +2386,7 @@ void putpixel (uae_u8 *buf, int bpp, int x, xcolnr c8, int opaq)
} }
} }
static void draw_status_line (int line) static void draw_status_line (int line, int statusy)
{ {
int bpp, y; int bpp, y;
uae_u8 *buf; uae_u8 *buf;
...@@ -2399,7 +2399,7 @@ static void draw_status_line (int line) ...@@ -2399,7 +2399,7 @@ static void draw_status_line (int line)
if (xlinebuffer == 0) if (xlinebuffer == 0)
xlinebuffer = row_map[line]; xlinebuffer = row_map[line];
buf = xlinebuffer; buf = xlinebuffer;
draw_status_line_single (buf, bpp, y, gfxvidinfo.width, xredcolors, xgreencolors, xbluecolors, NULL); draw_status_line_single (buf, bpp, statusy, gfxvidinfo.width, xredcolors, xgreencolors, xbluecolors, NULL);
} }
static void draw_debug_status_line (int line) static void draw_debug_status_line (int line)
...@@ -2519,12 +2519,10 @@ void finish_drawing_frame (void) ...@@ -2519,12 +2519,10 @@ void finish_drawing_frame (void)
break; break;
if (where2 < 0) if (where2 < 0)
continue; continue;
hposblank = 0; hposblank = 0;
pfield_draw_line (line, where2, amiga2aspect_line_map[i1 + 1]); pfield_draw_line (line, where2, amiga2aspect_line_map[i1 + 1]);
} }
/* clear possible old garbage at the bottom if emulated area become smaller */ /* clear possible old garbage at the bottom if emulated area become smaller */
for (i = last_max_ypos; i < gfxvidinfo.height; i++) { for (i = last_max_ypos; i < gfxvidinfo.height; i++) {
int i1 = i + min_ypos_for_screen; int i1 = i + min_ypos_for_screen;
...@@ -2548,9 +2546,11 @@ void finish_drawing_frame (void) ...@@ -2548,9 +2546,11 @@ void finish_drawing_frame (void)
} }
if (currprefs.leds_on_screen) { if (currprefs.leds_on_screen) {
int slx, sly;
statusline_getpos (&slx, &sly, gfxvidinfo.width, gfxvidinfo.height);
for (i = 0; i < TD_TOTAL_HEIGHT; i++) { for (i = 0; i < TD_TOTAL_HEIGHT; i++) {
int line = gfxvidinfo.height - TD_TOTAL_HEIGHT + i; int line = sly + i;
draw_status_line (line); draw_status_line (line, i);
do_flush_line (line); do_flush_line (line);
} }
} }
......
...@@ -1410,7 +1410,7 @@ void expamem_reset (void) ...@@ -1410,7 +1410,7 @@ void expamem_reset (void)
allocate_expamem (); allocate_expamem ();
/* check if Kickstart version is below 1.3 */ /* check if Kickstart version is below 1.3 */
if (! ersatzkickfile && kickstart_version if (kickstart_version
&& (/* Kickstart 1.0 & 1.1! */ && (/* Kickstart 1.0 & 1.1! */
kickstart_version == 0xFFFF kickstart_version == 0xFFFF
/* Kickstart < 1.3 */ /* Kickstart < 1.3 */
...@@ -1485,7 +1485,7 @@ void expamem_reset (void) ...@@ -1485,7 +1485,7 @@ void expamem_reset (void)
} }
#endif #endif
#ifdef FILESYS #ifdef FILESYS
if (do_mount && ! ersatzkickfile) { if (do_mount) {
card_init[cardno] = expamem_init_filesys; card_init[cardno] = expamem_init_filesys;
card_map[cardno++] = expamem_map_filesys; card_map[cardno++] = expamem_map_filesys;
} }
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>PUAE 2.3.1</string> <string>PUAE 2.3.2</string>
</property> </property>
<widget class="QWidget" name="centralWidget"> <widget class="QWidget" name="centralWidget">
<widget class="QTabWidget" name="tab_main"> <widget class="QTabWidget" name="tab_main">
......
...@@ -168,7 +168,7 @@ void regstatus (void) ...@@ -168,7 +168,7 @@ void regstatus (void)
int reginitializeinit (const char *ppath) int reginitializeinit (const char *ppath)
{ {
QSettings settings("PUAE", "2.3.1"); QSettings settings("PUAE", "2.3.2");
settings.beginGroup("Warning"); settings.beginGroup("Warning");
settings.setValue("info1", "This is unsupported file. Compatibility between versions is not guaranteed."); settings.setValue("info1", "This is unsupported file. Compatibility between versions is not guaranteed.");
......
...@@ -67,7 +67,7 @@ struct ev2 ...@@ -67,7 +67,7 @@ struct ev2
}; };
enum { enum {
ev_hsync, ev_cia, ev_misc, ev_audio, ev_cia, ev_audio, ev_misc, ev_hsync,
ev_max ev_max
}; };
...@@ -79,10 +79,6 @@ enum { ...@@ -79,10 +79,6 @@ enum {
extern struct ev eventtab[ev_max]; extern struct ev eventtab[ev_max];
extern struct ev2 eventtab2[ev2_max]; extern struct ev2 eventtab2[ev2_max];
extern void event2_newevent (int, evt, uae_u32);
extern void event2_newevent2 (evt, uae_u32, evfunc2);
extern void event2_remevent (int);
#if 0 #if 0
#ifdef JIT #ifdef JIT
#include "events_jit.h" #include "events_jit.h"
...@@ -104,4 +100,64 @@ STATIC_INLINE bool cycles_in_range (unsigned long endcycles) ...@@ -104,4 +100,64 @@ STATIC_INLINE bool cycles_in_range (unsigned long endcycles)
return (signed long)endcycles - c > 0; return (signed long)endcycles - c > 0;
} }
extern void MISC_handler (void);
STATIC_INLINE void event2_newevent_xx (int no, evt t, uae_u32 data, evfunc2 func)
{
evt et;
static int next = ev2_misc;
et = t + get_cycles ();
if (no < 0) {
no = next;
for (;;) {
if (!eventtab2[no].active)
break;
if (eventtab2[no].evtime == et && eventtab2[no].handler == func) {
eventtab2[no].handler (eventtab2[no].data);
break;
}
no++;
if (no == ev2_max)
no = ev2_misc;
if (no == next) {
write_log ("out of event2's!\n");
return;
}
}
next = no;
}
eventtab2[no].active = true;
eventtab2[no].evtime = et;
eventtab2[no].handler = func;
eventtab2[no].data = data;
MISC_handler ();
}
STATIC_INLINE void event2_newevent_x (int no, evt t, uae_u32 data, evfunc2 func)
{
if (((int)t) <= 0) {
func (data);
return;
}
event2_newevent_xx (no, t * CYCLE_UNIT, data, func);
}
STATIC_INLINE void event2_newevent (int no, evt t, uae_u32 data)
{
event2_newevent_x (no, t, data, eventtab2[no].handler);
}
STATIC_INLINE void event2_newevent2 (evt t, uae_u32 data, evfunc2 func)
{
event2_newevent_x (-1, t, data, func);
}
STATIC_INLINE void event2_remevent (int no)
{
eventtab2[no].active = 0;
}
#endif #endif
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#define UAEMAJOR 2 #define UAEMAJOR 2
#define UAEMINOR 3 #define UAEMINOR 3
#define UAESUBREV 1 #define UAESUBREV 2
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;
...@@ -184,6 +184,7 @@ struct uae_prefs { ...@@ -184,6 +184,7 @@ struct uae_prefs {
int sound_filter; int sound_filter;
int sound_filter_type; int sound_filter_type;
int sound_volume; int sound_volume;
int sound_volume_cd;
bool sound_stereo_swap_paula; bool sound_stereo_swap_paula;
bool sound_stereo_swap_ahi; bool sound_stereo_swap_ahi;
bool sound_auto; bool sound_auto;
...@@ -261,6 +262,7 @@ struct uae_prefs { ...@@ -261,6 +262,7 @@ struct uae_prefs {
int chipset_refreshrate; int chipset_refreshrate;
int collision_level; int collision_level;
int leds_on_screen; int leds_on_screen;
struct wh osd_pos;
int keyboard_leds[3]; int keyboard_leds[3];
bool keyboard_leds_in_use; bool keyboard_leds_in_use;
int scsi; int scsi;
......
...@@ -168,6 +168,7 @@ extern void restore_a2065_finish (void); ...@@ -168,6 +168,7 @@ extern void restore_a2065_finish (void);
extern uae_u8 *restore_debug_memwatch (uae_u8 *src); extern uae_u8 *restore_debug_memwatch (uae_u8 *src);
extern uae_u8 *save_debug_memwatch (int *len, uae_u8 *dstptr); extern uae_u8 *save_debug_memwatch (int *len, uae_u8 *dstptr);
extern void restore_debug_memwatch_finish (void);
extern uae_u8 *save_cycles (int *len, uae_u8 *dstptr); extern uae_u8 *save_cycles (int *len, uae_u8 *dstptr);
extern uae_u8 *restore_cycles (uae_u8 *src); extern uae_u8 *restore_cycles (uae_u8 *src);
......
...@@ -24,3 +24,4 @@ static int td_pos = (TD_RIGHT|TD_BOTTOM); ...@@ -24,3 +24,4 @@ static int td_pos = (TD_RIGHT|TD_BOTTOM);
#define STATUSLINE_TARGET 0x80 #define STATUSLINE_TARGET 0x80
extern void draw_status_line_single (uae_u8 *buf, int bpp, int y, int totalwidth, uae_u32 *rc, uae_u32 *gc, uae_u32 *bc, uae_u32 *alpha); extern void draw_status_line_single (uae_u8 *buf, int bpp, int y, int totalwidth, uae_u32 *rc, uae_u32 *gc, uae_u32 *bc, uae_u32 *alpha);
extern void statusline_getpos (int *x, int *y, int width, int height);
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
#define UAEMAJOR 2 #define UAEMAJOR 2
#define UAEMINOR 3 #define UAEMINOR 3
#define UAESUBREV 1 #define UAESUBREV 2
#define UAEVERSION (256*65536L*UAEMAJOR + 65536L*UAEMINOR + UAESUBREV) #define UAEVERSION (256*65536L*UAEMAJOR + 65536L*UAEMINOR + UAESUBREV)
......
...@@ -1767,6 +1767,35 @@ static void patch_kick (void) ...@@ -1767,6 +1767,35 @@ static void patch_kick (void)
kickstart_fix_checksum (kickmemory, kickmem_size); kickstart_fix_checksum (kickmemory, kickmem_size);
} }
extern unsigned char arosrom[];
extern unsigned int arosrom_len;
extern int seriallog;
static bool load_kickstart_replacement (void)
{
struct zfile *f;
f = zfile_fopen_data ("aros.gz", arosrom_len, arosrom);
if (!f)
return false;
f = zfile_gunzip (f);
if (!f)
return false;
kickmem_mask = 0x80000 - 1;
kickmem_size = 0x80000;
extendedkickmem_size = 0x80000;
extendedkickmem_type = EXTENDED_ROM_KS;
extendedkickmemory = mapped_malloc (extendedkickmem_size, "rom_e0");
extendedkickmem_bank.baseaddr = extendedkickmemory;
read_kickstart (f, extendedkickmemory, extendedkickmem_size, 0, 1);
extendedkickmem_mask = extendedkickmem_size - 1;
read_kickstart (f, kickmemory, 0x80000, 1, 0);
zfile_fclose (f);
#ifdef SERIAL_PORT
seriallog = -1;
#endif
return true;
}
static int load_kickstart (void) static int load_kickstart (void)
{ {
struct zfile *f; struct zfile *f;
...@@ -1774,6 +1803,8 @@ static int load_kickstart (void) ...@@ -1774,6 +1803,8 @@ static int load_kickstart (void)
int patched = 0; int patched = 0;
cloanto_rom = 0; cloanto_rom = 0;
if (!_tcscmp (currprefs.romfile, ":AROS"))
return load_kickstart_replacement ();
f = read_rom_name (currprefs.romfile); f = read_rom_name (currprefs.romfile);
_tcscpy (tmprom, currprefs.romfile); _tcscpy (tmprom, currprefs.romfile);
if (f == NULL) { if (f == NULL) {
...@@ -2458,16 +2489,7 @@ void memory_reset (void) ...@@ -2458,16 +2489,7 @@ void memory_reset (void)
write_log ("Failed to open '%s'\n", currprefs.romfile); write_log ("Failed to open '%s'\n", currprefs.romfile);
gui_message ("Could not load system ROM, trying system ROM replacement.\n"); gui_message ("Could not load system ROM, trying system ROM replacement.\n");
} }
#ifdef AUTOCONFIG load_kickstart_replacement ();
init_ersatz_rom (kickmemory);
kickmem_mask = 262144 - 1;
kickmem_size = 262144;
ersatzkickfile = 1;
#else
gui_message ("No Kickstart image selected\n");
uae_restart (-1, NULL);
return;
#endif
} else { } else {
struct romdata *rd = getromdatabydata (kickmemory, kickmem_size); struct romdata *rd = getromdatabydata (kickmemory, kickmem_size);
if (rd) { if (rd) {
......
...@@ -2868,19 +2868,10 @@ unsigned long REGPARAM2 op_illg (uae_u32 opcode) ...@@ -2868,19 +2868,10 @@ unsigned long REGPARAM2 op_illg (uae_u32 opcode)
} }
#ifdef AUTOCONFIG #ifdef AUTOCONFIG
if (opcode == 0xFF0D) { if (opcode == 0xFF0D && inrt) {
if (inrom) { /* User-mode STOP replacement */
/* This is from the dummy Kickstart replacement */ m68k_setstopped ();
uae_u16 arg = get_iword (2); return 4;
m68k_incpc (4);
ersatz_perform (arg);
fill_prefetch ();
return 4;
} else if (inrt) {
/* User-mode STOP replacement */
m68k_setstopped ();
return 4;
}
} }
if ((opcode & 0xF000) == 0xA000 && inrt) { if ((opcode & 0xF000) == 0xA000 && inrt) {
......
...@@ -102,6 +102,9 @@ static struct romheader romheaders[] = { ...@@ -102,6 +102,9 @@ static struct romheader romheaders[] = {
{ "X", 0, 0, 0, 0, 0, size, id, 0, 0, flags, (grp << 16) | num, 0, pn, crc32, a, b, c, d, e }, { "X", 0, 0, 0, 0, 0, size, id, 0, 0, flags, (grp << 16) | num, 0, pn, crc32, a, b, c, d, e },
static struct romdata roms[] = { static struct romdata roms[] = {
{ " AROS KS ROM (built-in)", 0, 0, 0, 0, "AROS\0", 524288 * 2, 66, 0, 0, ROMTYPE_KICK, 0, 0, NULL,
0xffffffff, 0, 0, 0, 0, 0, "AROS" },
{ "Cloanto Amiga Forever ROM key", 0, 0, 0, 0, 0, 2069, 0, 0, 1, ROMTYPE_KEY, 0, 0, NULL, { "Cloanto Amiga Forever ROM key", 0, 0, 0, 0, 0, 2069, 0, 0, 1, ROMTYPE_KEY, 0, 0, NULL,
0x869ae1b1, 0x801bbab3,0x2e3d3738,0x6dd1636d,0x4f1d6fa7,0xe21d5874 }, 0x869ae1b1, 0x801bbab3,0x2e3d3738,0x6dd1636d,0x4f1d6fa7,0xe21d5874 },
{ "Cloanto Amiga Forever 2006 ROM key", 0, 0, 0, 0, 0, 750, 48, 0, 1, ROMTYPE_KEY, 0, 0, NULL, { "Cloanto Amiga Forever 2006 ROM key", 0, 0, 0, 0, 0, 750, 48, 0, 1, ROMTYPE_KEY, 0, 0, NULL,
......
...@@ -505,6 +505,7 @@ void restore_state (const TCHAR *filename) ...@@ -505,6 +505,7 @@ void restore_state (const TCHAR *filename)
chunk = restore_chunk (f, name, &len, &totallen, &filepos); chunk = restore_chunk (f, name, &len, &totallen, &filepos);
if (!chunk || _tcsncmp (name, "ASF ", 4)) { if (!chunk || _tcsncmp (name, "ASF ", 4)) {
write_log ("%s is not an AmigaStateFile\n", filename);
gui_message ("Cannot restore state from '%s'.\nIt is not an AmigaStateFile.\n", filename); gui_message ("Cannot restore state from '%s'.\nIt is not an AmigaStateFile.\n", filename);
goto error; goto error;
} }
...@@ -739,6 +740,7 @@ void savestate_restore_finish (void) ...@@ -739,6 +740,7 @@ void savestate_restore_finish (void)
restore_a2065_finish (); restore_a2065_finish ();
#endif #endif
restore_cia_finish (); restore_cia_finish ();
restore_debug_memwatch_finish ();
savestate_state = 0; savestate_state = 0;
init_hz_full (); init_hz_full ();
audio_activate (); audio_activate ();
......
...@@ -84,6 +84,7 @@ int sd = -1; ...@@ -84,6 +84,7 @@ int sd = -1;
#endif #endif
uae_u16 serper=0,serdat; uae_u16 serper=0,serdat;
int seriallog = 0, log_sercon = 0;
void SERPER (uae_u16 w) void SERPER (uae_u16 w)
{ {
......
...@@ -16,6 +16,32 @@ ...@@ -16,6 +16,32 @@
* Some code to put status information on the screen. * Some code to put status information on the screen.
*/ */
void statusline_getpos (int *x, int *y, int width, int height)
{
if (currprefs.osd_pos.x >= 20000) {
if (currprefs.osd_pos.x >= 30000)
*y = width * (currprefs.osd_pos.x - 30000) / 1000;
else
*y = width - (width * (30000 - currprefs.osd_pos.y) / 1000);
} else {
if (currprefs.osd_pos.x >= 0)
*x = currprefs.osd_pos.x;
else
*x = -currprefs.osd_pos.x + 1;
}
if (currprefs.osd_pos.y >= 20000) {
if (currprefs.osd_pos.y >= 30000)
*y = (height - TD_TOTAL_HEIGHT) * (currprefs.osd_pos.y - 30000) / 1000;
else
*y = (height - TD_TOTAL_HEIGHT) - ((height - TD_TOTAL_HEIGHT) * (30000 - currprefs.osd_pos.y) / 1000);
} else {
if (currprefs.osd_pos.y >= 0)
*y = height - TD_TOTAL_HEIGHT - currprefs.osd_pos.y;
else
*y = -currprefs.osd_pos.y + 1;
}
}
static const char *numbers = { /* ugly 0123456789CHD%+- */ static const char *numbers = { /* ugly 0123456789CHD%+- */
"+++++++--++++-+++++++++++++++++-++++++++++++++++++++++++++++++++++++++++++++-++++++-++++----++---+--------------" "+++++++--++++-+++++++++++++++++-++++++++++++++++++++++++++++++++++++++++++++-++++++-++++----++---+--------------"
"+xxxxx+--+xx+-+xxxxx++xxxxx++x+-+x++xxxxx++xxxxx++xxxxx++xxxxx++xxxxx++xxxx+-+x++x+-+xxx++-+xx+-+x---+----------" "+xxxxx+--+xx+-+xxxxx++xxxxx++x+-+x++xxxxx++xxxxx++xxxxx++xxxxx++xxxxx++xxxx+-+x++x+-+xxx++-+xx+-+x---+----------"
......
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