From 1790f7a637bed9ff1d550d74cbf4361b6362f5ed Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Fri, 13 Jun 2014 18:08:40 +0300 Subject: [PATCH] 2810b7 --- custom.cpp | 10 +++++----- drawing.cpp | 10 +++++++--- od-win32/win32.h | 13 ++++++++++--- od-win32/winuaechangelog.txt | 9 +++++++++ 4 files changed, 31 insertions(+), 11 deletions(-) diff --git a/custom.cpp b/custom.cpp index a24fbc72..2260ff29 100644 --- a/custom.cpp +++ b/custom.cpp @@ -3555,7 +3555,7 @@ void compute_vsynctime (void) svpos += 1.0; } double clk = svpos * shpos * fake_vblank_hz; - write_log (_T("SNDRATE %.1f*%.1f*%.6f=%.6f\n"), svpos, shpos, fake_vblank_hz, clk); + //write_log (_T("SNDRATE %.1f*%.1f*%.6f=%.6f\n"), svpos, shpos, fake_vblank_hz, clk); update_sound (clk); } } @@ -5012,10 +5012,8 @@ static void BPLxDAT (int hpos, int num, uae_u16 v) if (num == 0 && hpos >= 8) { bpl1dat_written = true; bpl1dat_written_at_least_once = true; - if (thisline_decision.plfleft < 0) { - thisline_decision.plfleft = hpos; + if (thisline_decision.plfleft < 0) reset_bpl_vars (); - } beginning_of_plane_block (hpos, fetchmode); } } @@ -5749,7 +5747,7 @@ static int customdelay[]= { /* BPLCON0-3,BPLMOD1-2 */ 0,0,0,0,0,0,0,0, /* 8 */ /* BPLxDAT */ - 1,1,1,1,1,1,1,1, /* 8 */ + 0,0,0,0,0,0,0,0, /* 8 */ /* SPRxPTH/SPRxPTL */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 16 */ /* SPRxPOS/SPRxCTL/SPRxDATA/SPRxDATB */ @@ -9578,6 +9576,7 @@ void wait_cpu_cycle_write_ce020 (uaecptr addr, int mode, uae_u32 v) void do_cycles_ce (unsigned long cycles) { + cycles += extra_cycle; while (cycles >= CYCLE_UNIT) { int hpos = current_hpos () + 1; decide_line (hpos); @@ -9588,6 +9587,7 @@ void do_cycles_ce (unsigned long cycles) do_cycles (1 * CYCLE_UNIT); cycles -= CYCLE_UNIT; } + extra_cycle = cycles; } void do_cycles_ce020 (unsigned long cycles) diff --git a/drawing.cpp b/drawing.cpp index 77fd02d6..d0d20fee 100644 --- a/drawing.cpp +++ b/drawing.cpp @@ -742,6 +742,7 @@ All of these are forced into the visible window (VISIBLE_LEFT_BORDER .. VISIBLE_ PLAYFIELD_START and PLAYFIELD_END are in window coordinates. */ static int playfield_start, playfield_end; static int real_playfield_start, real_playfield_end; +static int sprite_playfield_start; static int linetoscr_diw_start, linetoscr_diw_end; static int native_ddf_left, native_ddf_right; @@ -821,8 +822,9 @@ static void pfield_init_linetoscr (bool border) if (playfield_end > visible_right_border) playfield_end = visible_right_border; - real_playfield_end = playfield_end; real_playfield_start = playfield_start; + sprite_playfield_start = playfield_start; + real_playfield_end = playfield_end; // Sprite hpos don't include DIW_DDF_OFFSET and can appear 1 lores pixel // before first bitplane pixel appears. @@ -840,6 +842,7 @@ static void pfield_init_linetoscr (bool border) playfield_start = left; } } else { + sprite_playfield_start = 0; if (playfield_end < linetoscr_diw_end && hblank_right_stop > playfield_end) { playfield_end = linetoscr_diw_end; } @@ -1088,7 +1091,7 @@ static void fill_line_border (void) } #define SPRITE_DEBUG 0 -STATIC_INLINE uae_u8 render_sprites (int pos, int dualpf, uae_u8 apixel, int aga) +static uae_u8 render_sprites (int pos, int dualpf, uae_u8 apixel, int aga) { struct spritepixelsbuf *spb = &spritepixels[pos]; unsigned int v = spb->data; @@ -1101,7 +1104,8 @@ STATIC_INLINE uae_u8 render_sprites (int pos, int dualpf, uae_u8 apixel, int aga maskshift = shift_lookup[apixel]; plfmask = (plf_sprite_mask >> maskshift) >> maskshift; v &= ~plfmask; - if (v != 0 || SPRITE_DEBUG) { + /* Extra 1 sprite pixel at DDFSTRT is only possible if at least 1 plane is active */ + if ((bplplanecnt > 0 || pos >= sprite_playfield_start) && (v != 0 || SPRITE_DEBUG)) { unsigned int vlo, vhi, col; unsigned int v1 = v & 255; /* OFFS determines the sprite pair with the highest priority that has diff --git a/od-win32/win32.h b/od-win32/win32.h index 5d6c0d4a..8e203559 100644 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -20,15 +20,22 @@ #define LANG_DLL_FULL_VERSION_MATCH 0 #if WINUAEPUBLICBETA -#define WINUAEBETA _T("6") +#define WINUAEBETA _T("7") #else #define WINUAEBETA _T("") #endif -#define WINUAEDATE MAKEBD(2014, 6, 7) -#define WINUAEEXTRA _T("") + +#define WINUAEDATE MAKEBD(2014, 6, 13) + //#define WINUAEEXTRA _T("AmiKit Preview") //#define WINUAEEXTRA _T("Amiga Forever Edition") + +#ifndef WINUAEEXTRA +#define WINUAEEXTRA _T("") +#endif +#ifndef WINUAEREV #define WINUAEREV _T("") +#endif #define IHF_WINDOWHIDDEN 6 #define WINUAEAPPNAME _T("Arabuusimiehet.WinUAE") diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index 4d7adbd1..13bdb21d 100644 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -18,6 +18,15 @@ Things that may happen in 2015: - restore only single input target to default. +Beta 7: + +- Yet another BPLxDAT update. If BPL1DAT is written when sprite is already active and no planes enabled in + BPLCON0, "sprites visible 1 lores pixel before first bitplane pixel" feature is not active. Previous + update was not correct and broke some other demos. (Real fix for Rink A Dink / Lemon extra pixel in + rotozoomer part) +- 68000 CE with 8x (or higher) clock multiplier was really fast (270b4) +- AROS ROM updated. + Beta 6: - b2 HAM update was incomplete and broken, nr_color_changes check was not fully working. (b2) -- 2.47.3