PUAE 2.6.0b16

This commit is contained in:
Mustafa Tufan 2013-04-13 18:35:15 +03:00
parent d7f9ce1d4d
commit 9856d7fe1b
12 changed files with 87 additions and 81 deletions

2
README
View File

@ -47,7 +47,7 @@ See the docs/compiling.txt
i use
imac, xcode 4.3.3, sdl 1.2.15, macosx 10.7.5
macbook pro, xcode 4.5.2, sdl 1.2.15, macosx 10.8.2
macbook pro, xcode 4.6, sdl 1.2.15, macosx 10.8.3
(build_macos_cocoa)

View File

@ -3,13 +3,12 @@
# 2006-2013 Mustafa TUFAN (aka GnoStiC/BRONX)
#
#
#
base=" --with-sdl --with-sdl-gl --with-sdl-gfx --with-sdl-sound --enable-drvsnd "
cd32=" --enable-cd32 "
a600=" --enable-gayle "
scsi=" --enable-scsi-device --enable-ncr --enable-a2091 "
other=" --with-caps --enable-amax --enable-gccopt --enable-serial-port "
debug=""
#debug="--enable-profiling"
#
#
./bootstrap.sh

View File

@ -1,19 +0,0 @@
# P-UAE
#
# 2006-2011 Mustafa TUFAN (aka GnoStiC/BRONX)
#
#
#
base=" --with-sdl --with-sdl-gl --with-sdl-gfx --with-sdl-sound --enable-drvsnd "
cd32=" --enable-cd32 "
a600=" --enable-gayle "
scsi=" --enable-scsi-device --enable-ncr --enable-a2091 "
other=" --with-caps --enable-amax --enable-serial-port "
serial=" --enable-serial-port "
#debug="--enable-profiling"
#
#
./bootstrap.sh
./configure $debug $serial $base $cd32 $a600 $scsi $other CFLAGS="-m32" LDFLAGS="-m32" CPPFLAGS="-m32"
make clean
make

View File

@ -1,17 +0,0 @@
# P-UAE
#
# 2006-2011 Mustafa TUFAN (aka GnoStiC/BRONX)
#
#
#
base=" --with-sdl --with-sdl-gl --with-sdl-gfx --with-sdl-sound --enable-drvsnd "
cd32=" --enable-cd32 "
a600=" --enable-gayle "
scsi=" --enable-scsi-device --enable-ncr --enable-a2091 "
other=" --with-caps --enable-amax "
#
#
./bootstrap.sh
./configure $base $cd32 $a600 $scsi $other --target=i586 CFLAGS="-m32" LDFLAGS="-m32" CPPFLAGS="-m32"
make clean
make

View File

@ -333,7 +333,7 @@ extern int is_bitplane_dma (int hpos);
STATIC_INLINE int canblit (int hpos)
{
if (!dmaen (DMA_BLITTER))
return 0;
return -1;
if (is_bitplane_dma (hpos))
return 0;
if (cycle_line[hpos] & CYCLE_MASK)
@ -711,7 +711,7 @@ static void decide_blitter_line (int hsync, int hpos)
break;
}
if (!v) {
if (v <= 0) {
blit_misscyclecounter++;
blitter_nasty++;
break;
@ -1001,7 +1001,7 @@ static void do_startcycles (int hpos)
while (vhpos < hpos) {
int v = canblit (vhpos);
vhpos++;
if (v) {
if (v >= 0) {
blit_startcycles--;
if (blit_startcycles == 0) {
if (blit_faulty)
@ -1070,7 +1070,7 @@ void decide_blitter (int hpos)
}
// idle cycles require free bus..
// (CPU can still use this cycle)
if (c == 0 && v == 0) {
if ((c == 0 && v == 0) || v < 0) {
blitter_nasty++;
blit_misscyclecounter++;
break;

View File

@ -935,6 +935,7 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type)
cfgfile_write (f, _T("gfx_refreshrate"), _T("%d"), p->gfx_apmode[0].gfx_refreshrate);
cfgfile_dwrite (f, _T("gfx_refreshrate_rtg"), _T("%d"), p->gfx_apmode[1].gfx_refreshrate);
cfgfile_write_bool (f, _T("gfx_autoresolution"), p->gfx_autoresolution);
cfgfile_dwrite (f, _T("gfx_autoresolution_delay"), _T("%d"), p->gfx_autoresolution_delay);
cfgfile_dwrite (f, _T("gfx_autoresolution_min_vertical"), vertmode[p->gfx_autoresolution_minv + 1]);
cfgfile_dwrite (f, _T("gfx_autoresolution_min_horizontal"), horizmode[p->gfx_autoresolution_minh + 1]);
@ -974,6 +975,7 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type)
if (p->gfx_filtermask[i + MAX_FILTERSHADERS][0])
cfgfile_write_str (f, _T("gfx_filtermask_post"), p->gfx_filtermask[i + MAX_FILTERSHADERS]);
}
cfgfile_dwrite_str (f, _T("gfx_filter_mask"), p->gfx_filtermask[2 * MAX_FILTERSHADERS - 1]);
if (p->gfx_filtershader[0][0] && p->gfx_api) {
cfgfile_dwrite (f, _T("gfx_filter"), _T("D3D:%s"), p->gfx_filtershader[0]);
} else if (p->gfx_filter > 0) {
@ -1015,7 +1017,6 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type)
cfgfile_dwrite (f, _T("gfx_luminance"), _T("%d"), p->gfx_luminance);
cfgfile_dwrite (f, _T("gfx_contrast"), _T("%d"), p->gfx_contrast);
cfgfile_dwrite (f, _T("gfx_gamma"), _T("%d"), p->gfx_gamma);
cfgfile_dwrite_str (f, _T("gfx_filter_mask"), p->gfx_filtermask[2 * MAX_FILTERSHADERS - 1]);
if (p->gfx_filteroverlay[0]) {
cfgfile_dwrite (f, _T("gfx_filter_overlay"), _T("%s%s"),
p->gfx_filteroverlay, _tcschr (p->gfx_filteroverlay, ',') ? _T(",") : _T(""));
@ -1662,6 +1663,7 @@ static int cfgfile_parse_host (struct uae_prefs *p, TCHAR *option, TCHAR *value)
|| cfgfile_intval (option, value, _T("gfx_refreshrate"), &p->gfx_apmode[APMODE_NATIVE].gfx_refreshrate, 1)
|| cfgfile_intval (option, value, _T("gfx_refreshrate_rtg"), &p->gfx_apmode[APMODE_RTG].gfx_refreshrate, 1)
|| cfgfile_yesno (option, value, _T("gfx_autoresolution"), &p->gfx_autoresolution)
|| cfgfile_intval (option, value, _T("gfx_autoresolution_delay"), &p->gfx_autoresolution_delay, 1)
|| cfgfile_intval (option, value, _T("gfx_backbuffers"), &p->gfx_apmode[APMODE_NATIVE].gfx_backbuffers, 1)
|| cfgfile_intval (option, value, _T("gfx_backbuffers_rtg"), &p->gfx_apmode[APMODE_RTG].gfx_backbuffers, 1)
|| cfgfile_yesno (option, value, _T("gfx_interlace"), &p->gfx_apmode[APMODE_NATIVE].gfx_interlaced)
@ -1999,6 +2001,25 @@ cfgfile_path (option, value, _T("floppy0soundext"), p->floppyslots[0].dfxclickex
return 1;
}
if (_tcscmp (option, _T("gfx_filtermask_pre")) == 0 || _tcscmp (option, _T("gfx_filtermask_post")) == 0) {
if (_tcscmp (option, _T("gfx_filtermask_pre")) == 0) {
for (int i = 0; i < MAX_FILTERSHADERS; i++) {
if (p->gfx_filtermask[i][0] == 0) {
_tcscpy (p->gfx_filtermask[i], value);
break;
}
}
} else {
for (int i = 0; i < MAX_FILTERSHADERS; i++) {
if (p->gfx_filtermask[i + MAX_FILTERSHADERS][0] == 0) {
_tcscpy (p->gfx_filtermask[i + MAX_FILTERSHADERS], value);
break;
}
}
}
return 1;
}
if (_tcscmp (option, _T("gfx_filter_pre")) == 0 || _tcscmp (option, _T("gfx_filter_post")) == 0) {
TCHAR *s = _tcschr (value, ':');
if (s) {

View File

@ -1997,8 +1997,9 @@ STATIC_INLINE void decide_line (int hpos)
return;
if (fetch_state == fetch_not_started && (diwstate == DIW_waiting_stop || (currprefs.chipset_mask & CSMASK_ECS_AGNUS))) {
int start = (currprefs.chipset_mask & CSMASK_ECS_AGNUS) ? plfstrt - 4 : HARD_DDF_START_REAL - 2;
int ok = 0;
if (last_decide_line_hpos < plfstrt_start && hpos >= plfstrt_start) {
if (last_decide_line_hpos < start && hpos >= start) {
if (plf_state == plf_idle || plf_state == plf_end)
plf_state = plf_start;
}
@ -3308,27 +3309,18 @@ static void calcdiw (void)
plfstrt = ddfstrt;
plfstop = ddfstop;
/* probably not the correct place.. should use plf_state instead */
if (currprefs.chipset_mask & CSMASK_ECS_AGNUS) {
if (!bpldmawasactive) {
/* ECS/AGA and ddfstop > maxhpos == always-on display */
if (plfstop > maxhpos)
plfstrt = 0;
if (plfstrt < HARD_DDF_START)
plfstrt = HARD_DDF_START;
plfstrt_start = plfstrt - 4;
} else {
plfstrt_start = plfstrt;
}
/* ECS/AGA and ddfstop > maxhpos == always-on display */
if (plfstop > maxhpos)
plfstrt = 0;
if (plfstrt < HARD_DDF_START)
plfstrt = HARD_DDF_START;
} else {
if (!bpldmawasactive) {
/* OCS and ddfstrt >= ddfstop == ddfstop = max */
if (plfstrt >= plfstop && plfstrt >= HARD_DDF_START)
plfstop = 0xff;
plfstrt_start = HARD_DDF_START_REAL - 2;
} else {
plfstrt_start = plfstrt;
}
/* OCS and ddfstrt >= ddfstop == ddfstop = max */
if (plfstrt >= plfstop && plfstrt >= HARD_DDF_START)
plfstop = 0xff;
}
diw_change = 2;
}

View File

@ -712,7 +712,7 @@ STATIC_INLINE xcolnr getbgc (bool blank)
return xcolors[0x0f0];
else if (hposblank == 3)
return xcolors[0x00f];
else if ( colors_for_drawing.borderblank)
else if (colors_for_drawing.borderblank)
return xcolors[0x880];
//return colors_for_drawing.acolors[0];
return xcolors[0xf0f];
@ -728,6 +728,7 @@ static void pfield_init_linetoscr (void)
/* First, get data fetch start/stop in DIW coordinates. */
int ddf_left = dp_for_drawing->plfleft * 2 + DIW_DDF_OFFSET;
int ddf_right = dp_for_drawing->plfright * 2 + DIW_DDF_OFFSET;
int leftborderhidden;
/* Compute datafetch start/stop in pixels; native display coordinates. */
native_ddf_left = coord_hw_to_window_x (ddf_left);
@ -744,11 +745,12 @@ static void pfield_init_linetoscr (void)
playfield_start = linetoscr_diw_start;
playfield_end = linetoscr_diw_end;
#if 0
if (playfield_start < native_ddf_left)
playfield_start = native_ddf_left;
if (playfield_end > native_ddf_right)
playfield_end = native_ddf_right;
#endif
unpainted = visible_left_border < playfield_start ? 0 : visible_left_border - playfield_start;
ham_src_pixel = MAX_PIXELS_PER_LINE + res_shift_from_window (playfield_start - native_ddf_left);
unpainted = res_shift_from_window (unpainted);
@ -776,6 +778,8 @@ static void pfield_init_linetoscr (void)
if (end < playfield_start && end > linetoscr_diw_start) {
playfield_start = end;
can_have_bordersprite = true;
} else {
can_have_bordersprite = false;
}
} else {
can_have_bordersprite = dp_for_drawing->bordersprite_seen;
@ -822,7 +826,11 @@ static void pfield_init_linetoscr (void)
ddf_left -= DISPLAY_LEFT_SHIFT;
pixels_offset = MAX_PIXELS_PER_LINE - (ddf_left << bplres);
ddf_left <<= bplres;
src_pixel = MAX_PIXELS_PER_LINE + res_shift_from_window (playfield_start - native_ddf_left);
leftborderhidden = playfield_start - native_ddf_left;
if (hblank_left_start > playfield_start)
leftborderhidden += hblank_left_start - playfield_start;
src_pixel = MAX_PIXELS_PER_LINE + res_shift_from_window (leftborderhidden);
if (dip_for_drawing->nr_sprites == 0)
return;
@ -1175,8 +1183,6 @@ static int NOINLINE linetoscr_16_shrink1f_sh (int spix, int dpix, int stoppos, i
return spix;
}
static int NOINLINE linetoscr_32_shrink2_sh (int spix, int dpix, int stoppos, int spr)
{
uae_u32 *buf = (uae_u32 *) xlinebuffer;
@ -2281,7 +2287,9 @@ static void pfield_draw_line (int lineno, int gfx_ypos, int follow_ypos)
* full line. */
decode_ham (visible_left_border, visible_right_border, false);
} else /* Argh. */ {
int ohposblank = hposblank;
do_color_changes (dummy_worker, decode_ham, lineno);
hposblank = ohposblank;
adjust_drawing_colors (dp_for_drawing->ctable, dp_for_drawing->ham_seen || bplehb);
}
bplham = dp_for_drawing->ham_at_start;
@ -2484,7 +2492,6 @@ static void center_image (void)
center_reset = false;
}
#define FRAMES_UNTIL_RES_SWITCH 1
static int frame_res_cnt;
static void init_drawing_frame (void)
{
@ -2493,7 +2500,7 @@ static void init_drawing_frame (void)
static int frame_res_old;
if (currprefs.gfx_autoresolution && frame_res >= 0 && frame_res_lace >= 0) {
if (FRAMES_UNTIL_RES_SWITCH > 0 && frame_res_old == frame_res * 2 + frame_res_lace) {
if (frame_res_cnt > 0 && frame_res_old == frame_res * 2 + frame_res_lace) {
frame_res_cnt--;
if (frame_res_cnt == 0) {
int m = frame_res * 2 + frame_res_lace;
@ -2543,11 +2550,13 @@ static void init_drawing_frame (void)
}
m++;
}
frame_res_cnt = FRAMES_UNTIL_RES_SWITCH;
frame_res_cnt = currprefs.gfx_autoresolution_delay;
}
} else {
frame_res_old = frame_res * 2 + frame_res_lace;
frame_res_cnt = FRAMES_UNTIL_RES_SWITCH;
frame_res_cnt = currprefs.gfx_autoresolution_delay;
if (frame_res_cnt <= 0)
frame_res_cnt = 1;
}
}
frame_res = -1;
@ -3185,7 +3194,7 @@ void reset_drawing (void)
init_drawing_frame ();
notice_screen_contents_lost ();
frame_res_cnt = FRAMES_UNTIL_RES_SWITCH;
frame_res_cnt = currprefs.gfx_autoresolution_delay;
lightpen_y1 = lightpen_y2 = -1;
reset_custom_limits ();

View File

@ -1497,10 +1497,18 @@ static int isa4000t (uaecptr addr)
static uae_u32 REGPARAM2 gayle_lget (uaecptr addr)
{
struct ide_hdf *ide = NULL;
int ide_reg;
uae_u32 v;
#ifdef JIT
special_mem |= S_READ;
#endif
ide_reg = get_gayle_ide_reg (addr, &ide);
if (ide_reg == IDE_DATA) {
v = ide_get_data (ide) << 16;
v |= ide_get_data (ide);
return v;
}
v = gayle_wget (addr) << 16;
v |= gayle_wget (addr + 2);
return v;
@ -1538,9 +1546,17 @@ static uae_u32 REGPARAM2 gayle_bget (uaecptr addr)
static void REGPARAM2 gayle_lput (uaecptr addr, uae_u32 value)
{
struct ide_hdf *ide = NULL;
int ide_reg;
#ifdef JIT
special_mem |= S_WRITE;
#endif
ide_reg = get_gayle_ide_reg (addr, &ide);
if (ide_reg == IDE_DATA) {
ide_put_data (ide, value >> 16);
ide_put_data (ide, value & 0xffff);
return;
}
gayle_wput (addr, value >> 16);
gayle_wput (addr + 2, value & 0xffff);
}

View File

@ -332,6 +332,7 @@ struct uae_prefs {
struct wh gfx_size_win_xtra[6];
struct wh gfx_size_fs_xtra[6];
bool gfx_autoresolution;
int gfx_autoresolution_delay;
int gfx_autoresolution_minv, gfx_autoresolution_minh;
bool gfx_scandoubler;
struct apmode gfx_apmode[2];

View File

@ -4434,16 +4434,22 @@ int inputdevice_get_compatibility_input (struct uae_prefs *prefs, int index, int
while (inputdevice_get_device_status (devnum) >= 0) {
for (int j = 0; j < inputdevice_get_widget_num (devnum); j++) {
for (int sub = 0; sub < MAX_INPUT_SUB_EVENT; sub++) {
int port, k;
int port, k, l;
uae_u64 flags;
bool ignore = false;
int evtnum2 = inputdevice_get_mapping (devnum, j, &flags, &port, NULL, NULL, sub);
if (port - 1 != index)
continue;
for (k = 0; axistable[k] >= 0; k++) {
if (evtnum2 == axistable[k])
break;
for (k = 0; axistable[k] >= 0; k += 3) {
if (evtnum2 == axistable[k] || evtnum2 == axistable[k + 1] || evtnum2 == axistable[k + 2]) {
for (l = 0; inputlist[l] >= 0; l++) {
if (inputlist[l] == axistable[k] || inputlist[l] == axistable[k + 1] || inputlist[l] == axistable[k + 1]) {
ignore = true;
}
}
}
}
if (axistable[k] < 0) {
if (!ignore) {
for (k = 0; inputlist[k] >= 0; k++) {
if (evtnum2 == inputlist[k])
break;

View File

@ -224,9 +224,7 @@ void fixup_prefs_dimensions (struct uae_prefs *prefs)
ap->gfx_vflip = 1;
if (!i && ap->gfx_backbuffers == 2)
ap->gfx_vflip = 1;
if (ap->gfx_vflip) {
ap->gfx_strobo = prefs->lightboost_strobo;
}
ap->gfx_strobo = prefs->lightboost_strobo;
} else {
// legacy vsync: always wait for flip
ap->gfx_vflip = -1;