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);
}
}
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);
}
}
/* 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 */
void do_cycles_ce (unsigned long cycles)
{
+ cycles += extra_cycle;
while (cycles >= CYCLE_UNIT) {
int hpos = current_hpos () + 1;
decide_line (hpos);
do_cycles (1 * CYCLE_UNIT);
cycles -= CYCLE_UNIT;
}
+ extra_cycle = cycles;
}
void do_cycles_ce020 (unsigned long cycles)
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;
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.
playfield_start = left;
}
} else {
+ sprite_playfield_start = 0;
if (playfield_end < linetoscr_diw_end && hblank_right_stop > playfield_end) {
playfield_end = linetoscr_diw_end;
}
}
#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;
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
#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")
- 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)