static void blitter_line_minterm(uae_u16 dat)
{
- int ashift = bltcon0 >> 12;
- int bshift = bltcon1 >> 12;
-
uae_u16 mask = blt_info.bltafwm;
if (dat & BLITTER_PIPELINE_LAST) {
mask &= blt_info.bltalwm;
}
+ int ashift = bltcon0 >> 12;
uae_u16 blitahold = (blt_info.bltadat & mask) >> ashift;
if (bltcon0 & BLTCHB) {
// B special case if enabled
+ int bshift = bltcon1 >> 12;
blineb = (((uae_u32)blt_info.bltbold << 16) | blt_info.bltbdat) >> bshift;
}
blt_info.bltbhold = (blineb & 0x0001) ? 0xFFFF : 0;
static void blitter_line_proc_apt(void)
{
if (bltcon0 & BLTCHA) {
- if (bltcon1 & BLTSIGN)
+ bool sign = (bltcon1 & BLTSIGN) != 0;
+ if (sign)
bltapt += (uae_s16)blt_info.bltbmod;
else
bltapt += (uae_s16)blt_info.bltamod;
}
}
+static void blitter_line_ovf(void)
+{
+ uae_u16 ashift = bltcon0 >> 12;
+ ashift += blit_ovf;
+ ashift &= 15;
+ bltcon0 &= 0x0fff;
+ bltcon0 |= ashift << 12;
+ blit_ovf = 0;
+}
+
static void blitter_line_incx(void)
{
uae_u16 ashift = bltcon0 >> 12;
blit_ovf = -1;
}
-static void blitter_line_ovf(void)
-{
- uae_u16 ashift = bltcon0 >> 12;
- ashift += blit_ovf;
- ashift &= 15;
- bltcon0 &= 0x0fff;
- bltcon0 |= ashift << 12;
- blit_ovf = 0;
-}
-
static void blitter_line_decy(void)
{
if (bltcon0 & BLTCHC) {
static void blitter_line_proc_cpt_y(void)
{
- if (!(bltcon1 & BLTSIGN)) {
+ bool sign = (bltcon1 & BLTSIGN) != 0;
+
+ if (!sign) {
if (bltcon1 & BLTSUD) {
if (bltcon1 & BLTSUL)
blitter_line_decy();
static void blitter_line_proc_cpt_x(void)
{
- if (!(bltcon1 & BLTSIGN)) {
+ bool sign = (bltcon1 & BLTSIGN) != 0;
+
+ if (!sign) {
if (!(bltcon1 & BLTSUD)) {
if (bltcon1 & BLTSUL)
blitter_line_decx();
if (blitline) {
do {
blitter_line_proc_status();
- blitter_line_sign();
blitter_line_proc_apt();
if (blt_info.hblitsize > 1) {
blitter_line_read_b();
blitter_line_proc_cpt_x();
}
if (blt_info.hblitsize > 2) {
- if (!(bltcon1 & BLTSUD) && blitlineloop) {
+ if (blitlineloop && !(bltcon1 & BLTSUD)) {
blitter_line_proc_cpt_y();
blitlineloop = 0;
}
blitlineloop = 0;
}
}
+ blitter_line_sign();
blitter_nxline();
if (blitlinepixel) {
blitter_line_write();
written = decide_blitter_idle(hpos, until_hpos, addr, value);
if (dat & BLITTER_PIPELINE_FIRST) {
blitter_line_proc_status();
- blitter_line_sign();
blitter_line_proc_apt();
}
blitter_line_ovf();
if (blt_info.hblitsize == 1) {
blitter_line_proc_status();
- blitter_line_sign();
} else {
if (blitlineloop) {
blitter_line_proc_cpt_y();
blitlineloop = 0;
}
}
+ blitter_line_sign();
blitter_nxline();
/* onedot mode and no pixel = bus write access is skipped */
bltdpt = bltcpt;
blitter_line_minterm(dat);
-#if 0
- if (blt_info.hblitsize == 1) {
- blitter_line_proc_cpt_x();
- blitter_line_proc_cpt_y();
- }
-#endif
+
} else {
// normal mode channels
bltcon0 = 0;
bltcon1 = 0;
blitter_start_init();
+ blt_info.blit_main = 0;
+ blt_info.blit_pending = 0;
+ blt_info.blit_finald = 0;
+ blt_info.blit_queued = 0;
}
#ifdef SAVESTATE