int vcmp, hcmp;
int strobe; /* COPJMP1 / COPJMP2 accessed */
- int last_write, last_write_hpos;
int moveaddr, movedata, movedelay;
};
if (cop_state.ignore_next)
reg = 0x1fe;
- cop_state.last_write = reg;
- cop_state.last_write_hpos = old_hpos;
if (reg == 0x88) {
cop_state.strobe = 1;
cop_state.state = COP_strobe_delay1;
plfstrt_sprite = 0xff;
/* See if there's a chance of a copper wait ending this line. */
cop_state.hpos = 0;
- cop_state.last_write = 0;
compute_spcflag_copper (maxhpos);
serial_hsynchandler ();
memset (&spixstate, 0, sizeof spixstate);
cop_state.state = COP_stop;
+ cop_state.movedelay = 0;
+ cop_state.strobe = 0;
+ cop_state.ignore_next = 0;
diwstate = DIW_waiting_start;
dmal = 0;
static int native_ddf_left, native_ddf_right;
static int pixels_offset;
-static int src_pixel, ham_src_pixel;
+static int src_pixel;
/* How many pixels in window coordinates which are to the left of the left border. */
static int unpainted;
#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);
int first_x = sprite_first_x;
{
int unpainted_amiga = unpainted;
- ham_decode_pixel = ham_src_pixel;
+ ham_decode_pixel = src_pixel;
ham_lastcolor = color_reg_get (&colors_for_drawing, 0);
if (!bplham) {
}
}
-static void decode_ham_border(int pix, int stoppos, bool blank)
+static void erase_ham_right_border(int pix, int stoppos, bool blank)
{
+ if (stoppos < playfield_end)
+ return;
+ // erase right border in HAM modes or old HAM data may be visible
+ // if DDFSTOP < DIWSTOP (Uridium II title screen)
int todraw_amiga = res_shift_from_window (stoppos - pix);
while (todraw_amiga-- > 0)
ham_linebuf[ham_decode_pixel++] = 0;
if (lastpos >= endpos)
break;
}
+#if 1
if (vp < visible_top_start || vp >= visible_bottom_stop) {
// outside of visible area
// Just overwrite with black. Above code needs to run because of custom registers,
// not worth the trouble for separate code path just for max 10 lines or so
(*worker_border) (visible_left_border, visible_left_border + gfxvidinfo.drawbuffer.inwidth, true);
}
-
+#endif
}
-STATIC_INLINE bool have_color_changes(struct draw_info *di)
+STATIC_INLINE bool is_color_changes(struct draw_info *di)
{
- return (di->nr_color_changes == 0 || (di->nr_color_changes == 1 && curr_color_changes[di->first_color_change].regno == -1));
+ int regno = curr_color_changes[di->first_color_change].regno;
+ int changes = di->nr_color_changes;
+ return changes > 1 || (changes == 1 && regno != 0xffff && regno != -1);
}
enum double_how {
static int warned = 0;
int border = 0;
int do_double = 0;
+ bool have_color_changes;
enum double_how dh;
dp_for_drawing = line_decisions + lineno;
break;
}
+ have_color_changes = is_color_changes(dip_for_drawing);
+
dh = dh_line;
xlinebuffer = gfxvidinfo.drawbuffer.linemem;
if (xlinebuffer == 0 && do_double
- && (border == 0 || dip_for_drawing->nr_color_changes > 0))
+ && (border == 0 || have_color_changes))
xlinebuffer = gfxvidinfo.drawbuffer.emergmem, dh = dh_emerg;
if (xlinebuffer == 0)
xlinebuffer = row_map[gfx_ypos], dh = dh_buf;
adjust_drawing_colors (dp_for_drawing->ctable, dp_for_drawing->ham_seen || bplehb || ecsshres);
- /* The problem is that we must call decode_ham() BEFORE we do the
- sprites. */
+ /* The problem is that we must call decode_ham() BEFORE we do the sprites. */
if (dp_for_drawing->ham_seen) {
+ int ohposblank = hposblank;
init_ham_decoding ();
- if (!have_color_changes(dip_for_drawing)) {
- /* The easy case: need to do HAM decoding only once for the
- * full line. */
- decode_ham (visible_left_border, visible_right_border, false);
- } else /* Argh. */ {
- int ohposblank = hposblank;
- do_color_changes (decode_ham_border, decode_ham, lineno);
- hposblank = ohposblank;
- // reset colors to state before above do_color_changes()
- adjust_drawing_colors (dp_for_drawing->ctable, (dp_for_drawing->ham_seen || bplehb) ? -1 : 0);
+ do_color_changes (dummy_worker, decode_ham, lineno);
+ if (have_color_changes) {
+ // do_color_changes() did color changes, reset colors back to original state
+ adjust_drawing_colors (dp_for_drawing->ctable, -1);
pfield_expand_dp_bplcon ();
}
+ hposblank = ohposblank;
+ ham_decode_pixel = src_pixel;
bplham = dp_for_drawing->ham_at_start;
}
}
#endif
- if (!dosprites && have_color_changes(dip_for_drawing)) {
+ if (!dosprites && !have_color_changes) {
if (dp_for_drawing->plfleft < -1) {
// blanked border line
int tmp = hposblank;
// normal border line
fill_line_border ();
}
+
do_flush_line (vb, gfx_ypos);
if (do_double) {
if (dh == dh_buf) {
if (dh == dh_emerg)
memcpy (row_map[gfx_ypos], xlinebuffer + linetoscr_x_adjust_bytes, gfxvidinfo.drawbuffer.pixbytes * gfxvidinfo.drawbuffer.inwidth);
-
do_flush_line (vb, gfx_ypos);
if (do_double) {
if (dh == dh_emerg)
#define IDS_SLIRP_INBOUND 399
#define IDS_FILTER_PAL_EXTRA 400
#define IDS_FILTER_3D_EXTRA 401
+#define IDS_ALWAYS_ON 402
+#define IDS_DISPLAY_ATTRIBUTES 403
#define IDS_QS_MODELS 1000
#define IDS_QS_MODEL_A500 1001
#define IDS_QS_MODEL_A500P 1002
BEGIN
IDS_FILTER_PAL_EXTRA "Brightness\nContrast\nSaturation\nGamma\nScanlines\nBlurriness\nNoise\n"
IDS_FILTER_3D_EXTRA "Point/Bilinear\nScanline opacity\nScanline level\n"
+ IDS_ALWAYS_ON "Always on"
+ IDS_DISPLAY_ATTRIBUTES "Brightness\nContrast\nGamma"
END
#endif // English resources
#define LANG_DLL_FULL_VERSION_MATCH 0
#if WINUAEPUBLICBETA
-#define WINUAEBETA _T("5")
+#define WINUAEBETA _T("6")
#else
#define WINUAEBETA _T("")
#endif
-#define WINUAEDATE MAKEBD(2014, 6, 3)
+#define WINUAEDATE MAKEBD(2014, 6, 7)
#define WINUAEEXTRA _T("")
//#define WINUAEEXTRA _T("AmiKit Preview")
//#define WINUAEEXTRA _T("Amiga Forever Edition")
for (int j = 0; j < 2; j++) {
struct gfx_filterdata *gf = &currprefs.gf[j];
struct gfx_filterdata *gfc = &changed_prefs.gf[j];
+
+ c |= gf->gfx_filter != gfc->gfx_filter ? (2|8) : 0;
+
for (int i = 0; i <= 2 * MAX_FILTERSHADERS; i++) {
c |= _tcscmp (gf->gfx_filtershader[i], gfc->gfx_filtershader[i]) ? (2|8) : 0;
c |= _tcscmp (gf->gfx_filtermask[i], gfc->gfx_filtermask[i]) ? (2|8) : 0;
}
-
- c |= gf->gfx_filter != gfc->gfx_filter ? (2|8) : 0;
c |= _tcscmp (gf->gfx_filteroverlay, gfc->gfx_filteroverlay) ? (2|8) : 0;
- c |= gf->gfx_filter_filtermode != gfc->gfx_filter_filtermode ? (2|8) : 0;
- c |= gf->gfx_filter_bilinear != gfc->gfx_filter_bilinear ? (2|8) : 0;
+
+ c |= gf->gfx_filter_scanlines != gfc->gfx_filter_scanlines ? (1|8) : 0;
+ c |= gf->gfx_filter_scanlinelevel != gfc->gfx_filter_scanlinelevel ? (1|8) : 0;
+ c |= gf->gfx_filter_scanlineratio != gfc->gfx_filter_scanlineratio ? (1|8) : 0;
+
c |= gf->gfx_filter_horiz_zoom_mult != gfc->gfx_filter_horiz_zoom_mult ? (1) : 0;
c |= gf->gfx_filter_vert_zoom_mult != gfc->gfx_filter_vert_zoom_mult ? (1) : 0;
+
+ c |= gf->gfx_filter_filtermode != gfc->gfx_filter_filtermode ? (2|8) : 0;
+ c |= gf->gfx_filter_bilinear != gfc->gfx_filter_bilinear ? (2|8) : 0;
c |= gf->gfx_filter_noise != gfc->gfx_filter_noise ? (1) : 0;
c |= gf->gfx_filter_blur != gfc->gfx_filter_blur ? (1) : 0;
- c |= gf->gfx_filter_scanlines != gfc->gfx_filter_scanlines ? (1|8) : 0;
- c |= gf->gfx_filter_scanlinelevel != gfc->gfx_filter_scanlinelevel ? (1|8) : 0;
- c |= gf->gfx_filter_scanlineratio != gfc->gfx_filter_scanlineratio ? (1|8) : 0;
+
c |= gf->gfx_filter_aspect != gfc->gfx_filter_aspect ? (1) : 0;
c |= gf->gfx_filter_keep_aspect != gfc->gfx_filter_keep_aspect ? (1) : 0;
c |= gf->gfx_filter_keep_autoscale_aspect != gfc->gfx_filter_keep_autoscale_aspect ? (1) : 0;
for (int j = 0; j < 2; j++) {
struct gfx_filterdata *gf = &currprefs.gf[j];
struct gfx_filterdata *gfc = &changed_prefs.gf[j];
- for (int i = 0; i <= 2 * MAX_FILTERSHADERS; i++) {
- _tcscpy (gf->gfx_filtershader[i], gfc->gfx_filtershader[i]);
- _tcscpy (gf->gfx_filtermask[i], gfc->gfx_filtermask[i]);
- }
- gf->gfx_filter = gfc->gfx_filter;
- gf->gfx_filter_scanlines = gfc->gfx_filter_scanlines;
- gf->gfx_filter_scanlinelevel = gfc->gfx_filter_scanlinelevel;
- gf->gfx_filter_scanlineratio = gfc->gfx_filter_scanlineratio;
- _tcscpy (gf->gfx_filteroverlay, gfc->gfx_filteroverlay);
- gf->gfx_filter_filtermode = gfc->gfx_filter_filtermode;
- gf->gfx_filter_bilinear = gfc->gfx_filter_bilinear;
- gf->gfx_filter_horiz_zoom_mult = gfc->gfx_filter_horiz_zoom_mult;
- gf->gfx_filter_vert_zoom_mult = gfc->gfx_filter_vert_zoom_mult;
- gf->gfx_filter_noise = gfc->gfx_filter_noise;
- gf->gfx_filter_blur = gfc->gfx_filter_blur;
- gf->gfx_filter_aspect = gfc->gfx_filter_aspect;
- gf->gfx_filter_keep_aspect = gfc->gfx_filter_keep_aspect;
- gf->gfx_filter_keep_autoscale_aspect = gfc->gfx_filter_keep_autoscale_aspect;
- gf->gfx_filter_luminance = gfc->gfx_filter_luminance;
- gf->gfx_filter_contrast = gfc->gfx_filter_contrast;
- gf->gfx_filter_saturation = gfc->gfx_filter_saturation;
- gf->gfx_filter_gamma = gfc->gfx_filter_gamma;
- gf->gfx_filter_autoscale = gfc->gfx_filter_autoscale;
- //gf->gfx_filter_ = gfc->gfx_filter_;
+ memcpy(gf, gfc, sizeof(struct gfx_filterdata));
}
currprefs.rtg_horiz_zoom_mult = changed_prefs.rtg_horiz_zoom_mult;
void init_da (HWND hDlg)
{
int *p;
+ TCHAR tmp[MAX_DPATH], *p1, *p2;
+
+ WIN32GUI_LoadUIString(IDS_DISPLAY_ATTRIBUTES, tmp, sizeof tmp / sizeof (TCHAR));
SendDlgItemMessage(hDlg, IDC_DA_MODE, CB_RESETCONTENT, 0, 0);
- SendDlgItemMessage(hDlg, IDC_DA_MODE, CB_ADDSTRING, 0, (LPARAM)_T("Brightness"));
- SendDlgItemMessage(hDlg, IDC_DA_MODE, CB_ADDSTRING, 0, (LPARAM)_T("Contrast"));
- SendDlgItemMessage(hDlg, IDC_DA_MODE, CB_ADDSTRING, 0, (LPARAM)_T("Gamma"));
+ _tcscat (tmp, _T("\n"));
+ p1 = tmp;
+ for (;;) {
+ p2 = _tcschr (p1, '\n');
+ if (p2 && _tcslen (p2) > 0) {
+ *p2++ = 0;
+ SendDlgItemMessage (hDlg, IDC_DA_MODE, CB_ADDSTRING, 0, (LPARAM)p1);
+ p1 = p2;
+ } else
+ break;
+ }
if (da_mode_selected == CB_ERR)
da_mode_selected = 0;
SendDlgItemMessage (hDlg, IDC_DA_MODE, CB_SETCURSEL, da_mode_selected, 0);
SendDlgItemMessage (hDlg, IDC_LORES, CB_SETCURSEL, workprefs.gfx_resolution, 0);
SendDlgItemMessage(hDlg, IDC_AUTORESOLUTIONSELECT, CB_RESETCONTENT, 0, 0);
- SendDlgItemMessage(hDlg, IDC_AUTORESOLUTIONSELECT, CB_ADDSTRING, 0, (LPARAM)_T("Disabled"));
- SendDlgItemMessage(hDlg, IDC_AUTORESOLUTIONSELECT, CB_ADDSTRING, 0, (LPARAM)_T("Always on"));
+
+
+ WIN32GUI_LoadUIString(IDS_DISABLED, buffer, sizeof buffer / sizeof (TCHAR));
+ SendDlgItemMessage(hDlg, IDC_AUTORESOLUTIONSELECT, CB_ADDSTRING, 0, (LPARAM)buffer);
+ WIN32GUI_LoadUIString(IDS_ALWAYS_ON, buffer, sizeof buffer / sizeof (TCHAR));
+ SendDlgItemMessage(hDlg, IDC_AUTORESOLUTIONSELECT, CB_ADDSTRING, 0, (LPARAM)buffer);
SendDlgItemMessage(hDlg, IDC_AUTORESOLUTIONSELECT, CB_ADDSTRING, 0, (LPARAM)_T("10%"));
SendDlgItemMessage(hDlg, IDC_AUTORESOLUTIONSELECT, CB_ADDSTRING, 0, (LPARAM)_T("33%"));
SendDlgItemMessage(hDlg, IDC_AUTORESOLUTIONSELECT, CB_ADDSTRING, 0, (LPARAM)_T("66%"));
- restore only single input target to default.
+Beta 6:
+
+- b2 HAM update was incomplete and broken, nr_color_changes check was not fully working. (b2)
+- Display panel missing translations added (autoresolution and brightness/contrast/gamma)
+- Some file operations (zipped files, possibly something else too) didn't support recently introduced
+ relative "..\" path part update.
+- Copper emulation state was not fully reset when restoring state file, in some situations copper
+ may have modified restored custom register in next cycle after state was restored.
+
Beta 5:
- Relative path improvement broke CDFS CD mounting in some configurations.
_tcscpy (name, pname);
i = _tcslen (name) - 2;
while (i > 0) {
- if (name[i] == '/' || name[i] == '\\' && i > 4) {
+ if ((name[i] == '/' || name[i] == '\\') && i > 4) {
v = name[i];
name[i] = 0;
for (j = 0; plugins_7z[j]; j++) {
root->volume = zv;
root->type = ZNODE_DIR;
i = 0;
- if (name[0] != '/' && name[0] != '\\' && _tcsncmp (name, _T(".\\"), 2) != 0) {
+ if (name[0] != '/' && name[0] != '\\' && _tcsncmp(name, _T(".\\"), 2) != 0 && _tcsncmp(name, _T("..\\"), 3) != 0) {
if (_tcschr (name, ':') == 0) {
for (i = _tcslen (name) - 1; i > 0; i--) {
if (name[i] == FSDB_DIR_SEPARATOR) {