| |
8bitforever Account closed
Registered: Oct 2009 Posts: 48 |
Smooth horizontal bitmap scroller ($d016)
8bitforever is back after a 14 month coding break.
I´m trying hard to develop a $d016 bitmap (koala pic) scroller. But it flickers sporadicly.
The jitter/flicker is a 1 char movement of the bitmap.
<-<-<-<-<-
__________
|JJOKOKOK|
|JJOKOKOK|
|JJOKOKOK|
|JJOKOKOK|
__________
JJ=Jitter or flicker area. This can happen in 15-25% of the screen area.
OK=Perfect smooth scrolling of the bitmap (koala pic).
<-=Horizontal Scroll direction.
No VSP/HSP suggestions please.
1) Why do I have jitter/flicker in 15-25% of the screen area ?
2) Suggestions on how get rid of the jitter/flicker ?
|
|
| |
FATFrost Account closed
Registered: Sep 2003 Posts: 211 |
Did you check codebase64 for infos? maybe something there, if not just rip it and cred the original author, should be cool.
Also optimising will help a lot, and it will also help to look at other peoples scroller code to see what tricks are performed. ;) |
| |
JackAsser
Registered: Jun 2002 Posts: 2014 |
Stupid question, but I must ask since you drew that IJJOK-picture so nice: Have you set the display to 38-column mode? (bit 3 of $d016) |
| |
turtle Account closed
Registered: Mar 2005 Posts: 44 |
remember to not let the rutine eat ratertime there you scroll ($d016)
that was my problem then i made my bitmap scroller |
| |
8bitforever Account closed
Registered: Oct 2009 Posts: 48 |
Yes, Jackasser,
the display is set to 38-column mode (bit 3 of $d016).
I only touch the last bits 0-2 of $d016 to smooth scroll. |
| |
SIDWAVE Account closed
Registered: Apr 2002 Posts: 2238 |
copy the chars+colors at the correct time ?
also, use an unrolled loop. |
| |
JackAsser
Registered: Jun 2002 Posts: 2014 |
Quote: Yes, Jackasser,
the display is set to 38-column mode (bit 3 of $d016).
I only touch the last bits 0-2 of $d016 to smooth scroll.
Ok good, also please notice that you can't scroll a full bitmap without glitches using only the CPU unless you double buffer it. remeber lda+sta = 8c. 8*10000 = 80000 cycles. So what you need to do is to copy 1/8 of that amount each frame and on the 8th frame switch buffer ($dd00). During the 8th frame you must also copy the whole $d800 memory in one quick go properly synced to the raster line otherwise you'll get color-glitches. |
| |
Ed
Registered: May 2004 Posts: 173 |
Quote: Ok good, also please notice that you can't scroll a full bitmap without glitches using only the CPU unless you double buffer it. remeber lda+sta = 8c. 8*10000 = 80000 cycles. So what you need to do is to copy 1/8 of that amount each frame and on the 8th frame switch buffer ($dd00). During the 8th frame you must also copy the whole $d800 memory in one quick go properly synced to the raster line otherwise you'll get color-glitches.
And it is even possible to load during meanwhile if you do it proper. I used to load demo parts with a 1-bit loader when I scrolled my bitmaps in Courtesy of Soviet.... |
| |
8bitforever Account closed
Registered: Oct 2009 Posts: 48 |
Jackasser,
Actually it´s only a four char high bitmap.
So I don´t undeerstand why I cannot get rid of the jitter/flicker ? |
| |
JackAsser
Registered: Jun 2002 Posts: 2014 |
Quote: Jackasser,
Actually it´s only a four char high bitmap.
So I don´t undeerstand why I cannot get rid of the jitter/flicker ?
4 char high bitmap with colors = (320+80)*4 = 1600. lda+sta = 8c => 1600*8 = 12800 ~= 69% cpu usage completly unrolled. Are you 100% sure you copy fast enough and also do it behind the raster beam?
1) Copy fast, really fast.
2) Start the copy just when the raster beam have passed those 4 chars.
3) update $d016 before you reach the chars again. |
| |
8bitforever Account closed
Registered: Oct 2009 Posts: 48 |
Thanks Jackasser,
going to check the code tonight again. |
| |
Skate
Registered: Jul 2003 Posts: 494 |
it's been already said but problem is not about scrolling bitmap. you can have the same problem with a standard 1x1 char scroller as well. it's all about $d012. put a "inc $d020" before scroll routine and "dec $d020" after scroll routine and see if scrolling area is clean.
4 character lines (32 raster lines) are ideal for playing music. use that area for music and start scrolling from the bottom of that area.
if you try to scroll 4 char lines high bitmap using standard loops ( no unrolled code), you're gonna need 16410 cycles which takes %83.5 CPU. Since 4 character area means ~%10 CPU and it's enough for playing music, if you don't have much more things going on in the screen, you don't need to spend too much memory. |
| |
TWW
Registered: Jul 2009 Posts: 545 |
You should/could still double-buffer it though if you are planning to do something more on that screen...
frame 1: Flipp buffer and scroll $d800 data
frame 2-7: Pull 2'nd buffer (bitmap & $0400 collors)
frame 8: flipp buffer and scroll $d800 data
frame 9-15: Pull 1'st buffer (Bitmap $ $0400 collors)
do from beginning!
You need to place out the graphics to scroll in both buffers aswell and in the correct time. Buit seeing your nice ascii gfx up there I'm sure you'll figgure it out 8-D
You should get away with a fraction of the raster time needed distributing it on 8 frames instead of doing it all on one.
Ofcourse it would eat more R-Time the faster the scroller goes (i.e scrolling 2 pixels at the time means you need to move the gfx faster)...
anyways, where was I.... |
| |
Digger
Registered: Mar 2005 Posts: 437 |
Or slow everything down (let's say you increment $D016 every 50 frames) and then trace carefully what happens in each shift. You'll get the point where the jitter appears and then it's easy to investigate further from there. |
| |
8bitforever Account closed
Registered: Oct 2009 Posts: 48 |
Thank you very much,
problem solved due to your excellent suggestions !
Thank you once again ! |
| |
Nitro Account closed
Registered: Aug 2008 Posts: 13 |
About Digger's post: there's much better method, pressing ALT plus + enters pause mode, where you can step through individual frames by again using ALT and +.
Alt+Pause resumes normal work. |
| |
Digger
Registered: Mar 2005 Posts: 437 |
@Nitro: Nice, is this in VICE? |
| |
Zielok
Registered: Mar 2009 Posts: 6 |
Yes, this is in Vice. |