Vamiga: Blitter test sblit<n>f and sblit<n>f2 fail

Created on 17 Nov 2019  路  5Comments  路  Source: dirkwhoffmann/vAmiga

I've added test cases that run the Blitter in fill mode. Here is sblit9f:

UAE:

sblit9f_uae_ecs

vAmiga: 馃檲

sblit9f_vAmiga

I did expect timing to be different, because I haven't yet implemented the magic ancient spells from the rune table excavated by Mithrendal.

But I didn't expect to see the following on a real A500+: 馃槼

sblit9f_A500+

Bummer!

To be honest, I can't really beliebe that UAE has the fill logic wrong, especially because the UAE picture matches what the HRM preaches.

Maybe I have a screwed up test case with uninitialised pointers? But the same test case works well if the fill bit is cleared (which is the only difference between sblit9 and sblit9f. 馃

Blitter Bug

All 5 comments

As expected, I did screw up the test cases. I didn't initialise the BLTREGA to BLTREGC.

Using the updated tests, UAE looks correct: 馃憤

sblit9f_uae

SAE has timing issues, but computes the correct picture: 馃憤

Bildschirmfoto 2019-11-22 um 18 38 33

vAmiga is broken: 馃檲

Bildschirmfoto 2019-11-22 um 18 35 23

Almost good now, except for a timing mismatch in the large Emoji blit. The small blits seem to be time accurate.

Bildschirmfoto 2019-12-02 um 15 18 32

Fixed.

Old micro-program for mode 9 fill copy blits:

            {   // Full execution, fill
                &Blitter::exec <FETCH_A | FILL | HOLD_D | BUS>,
                &Blitter::exec <WRITE_D | HOLD_A | HOLD_B | BUS>,
                &Blitter::exec <REPEAT>,

                &Blitter::exec <FILL | HOLD_D>,
                &Blitter::exec <WRITE_D | BUS | BLTDONE>
            }

Bug fix:

           {   // Full execution, fill
                &Blitter::exec <FETCH_A | FILL | HOLD_D | BUS>,
                &Blitter::exec <WRITE_D | HOLD_A | HOLD_B | BUS>,
                &Blitter::exec <BUSIDLE | REPEAT>,

                &Blitter::exec <FILL | HOLD_D>,
                &Blitter::exec <WRITE_D | BUS | BLTDONE>
            }

Bildschirmfoto 2019-12-03 um 16 19 30

Wow this looks very good! The blitter microprograms are so beautiful. Now the SlowBlitter is in a very good shape. I have to read and learn about the microprograms in the source code now, so interesting stuff...馃

Pursuing a micro-program based approach was the right decision I think. It's so flexible that nearly all oddities of the real machine can be imitated with little effort. Furthermore, there is no real runtime penalty, because it's completely template based. This means that vAmiga doesn't need to interpret the micro-programs at runtime. All programs are "compiled" by the C++ during app building. This is a very strong feature of C++ templates, of which I am a big fan now.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

dirkwhoffmann picture dirkwhoffmann  路  3Comments

dirkwhoffmann picture dirkwhoffmann  路  5Comments

dirkwhoffmann picture dirkwhoffmann  路  3Comments

Alessandro1970 picture Alessandro1970  路  4Comments

dirkwhoffmann picture dirkwhoffmann  路  3Comments