Log inRegister an accountBrowse CSDbHelp & documentationFacts & StatisticsThe forumsAvailable RSS-feeds on CSDbSupport CSDb Commodore 64 Scene Database
You are not logged in - nap
CSDb User Forums


Forums > C64 Coding > upscroll: fast code needed.
2012-03-31 10:58
Flavioweb

Registered: Nov 2011
Posts: 447
upscroll: fast code needed.

i'm coding a fullscreen smooth up scroller.
Actually i'm using some unrolled code to use minimum amount of cycles, but i want to know if there is a well-know method to achehive best results.
Someone can point me in the right direction?
 
... 5 posts hidden. Click here to view all posts....
 
2012-03-31 16:05
Flavioweb

Registered: Nov 2011
Posts: 447
Quote: even easier: scroll up each line from top to bottom after it is displayed. Should be more than possible within one frame and without loop unrolling. No need to do that while the raster is off screen.

You mean that:

-start screen scroll using %xxxxx111 in $d011 and count down to %xxxxx000;

-starting from raster line $3b, move up line just displayed (reading data from next one) and go on like this, every 8 lines, until last text line

-put %xxxxx111 in $d011 (under bottom border?) and redo from start.

(of course, putting new content in last line as well...)

Is this what you mean?
2012-03-31 17:15
tlr

Registered: Sep 2003
Posts: 1721
@bitbreaker: If you mean a plain copy then it's not entierly obvious. He wants both screen + color.
lda $0428
sta $0400
lda $d828
sta $d800  ; =16 cycles
...which gives 16*1000 cycles for a full screen, unrolled.

One line unrolled (=40 chars) could work.
2012-04-01 02:19
ChristopherJam

Registered: Aug 2004
Posts: 1380
Only way you're going to get any faster than the techniques mentioned above is by doing something content-aware to take advantage of patterns in the data.

e.g. if your colour ram always has the same colour for adjacent pairs you can halve the number of LDA, or if you are using 2xN tiles where the right hand character IDs are always one higher than the (even) left hand, so you can do an ORA#1 instead of another LDA

Also - do you have "interesting" content the full width of the screen? Or are the first few/last few columns just a tiled background, or perhaps has some useful property like column 0 always having the same value as column 38?

(ps - just noticed that tlr alluded to taking advantage in common colours, so I guess this is not the first comment in this thread on content-aware scrolling after all :)
2012-04-01 04:35
Flavioweb

Registered: Nov 2011
Posts: 447
Quote: Only way you're going to get any faster than the techniques mentioned above is by doing something content-aware to take advantage of patterns in the data.

e.g. if your colour ram always has the same colour for adjacent pairs you can halve the number of LDA, or if you are using 2xN tiles where the right hand character IDs are always one higher than the (even) left hand, so you can do an ORA#1 instead of another LDA

Also - do you have "interesting" content the full width of the screen? Or are the first few/last few columns just a tiled background, or perhaps has some useful property like column 0 always having the same value as column 38?

(ps - just noticed that tlr alluded to taking advantage in common colours, so I guess this is not the first comment in this thread on content-aware scrolling after all :)


I need to scrool full screen width, but for the colors isn't really a problem, because at maximum the color change is done every 2 lines and for 2 lines with same color...
So not problem at all for this.

I coded a scroll like Bitbreaker sayd.
Works just fine. Quite ubeliveable...

Now i just test if can put other things (like music for eg.) because using Bitbreaker method, the cycles not taken from raster time, are distribuited all around the screen...

There are some "cycles" under the border, but i don't know if they are enough to do something...
2012-04-01 05:03
Didi

Registered: Nov 2011
Posts: 479
Play the music in the interrupt and put the move-up routine in normal code triggered by a flag from the interrupt. The rasterline you have to wait for to copy the next line must not be exacly hit and can be higher. Just check on greater not equal.
2012-04-01 06:12
yago

Registered: May 2002
Posts: 332
There is also a way to upscroll without any CPU usage.

You set up every 8 lines an rasterinterrupt, which changes the vic-bank/characterset/screen.

The details are a bit complicated, but then you only need to scroll the colorram.

I have used it in the Drowned Church Part in FLUT.
2012-04-01 07:21
Flavioweb

Registered: Nov 2011
Posts: 447
Quote: There is also a way to upscroll without any CPU usage.

You set up every 8 lines an rasterinterrupt, which changes the vic-bank/characterset/screen.

The details are a bit complicated, but then you only need to scroll the colorram.

I have used it in the Drowned Church Part in FLUT.


i wil give a look at your work, but we are details-hungry here...
;)
2012-04-01 07:52
Repose

Registered: Oct 2010
Posts: 222
I was going to say the same thing. I had considered this raster method to scroll quickly an 80 column screen using custom charsets. You can scroll 80 column text at 9600 baud this way. Just sayin'.
2012-04-01 10:57
Bitbreaker

Registered: Oct 2002
Posts: 500
@flavioweb

no need to trigger an irq each 8 lines, it would most likely also be enough to start copying late enough so that you don't overtake the raster with your copy action (and cause a glitch by that). Just start at let's say $80 first and in case decrease or increase that value, until things look okay. Then you have all the remaining rastertime free in one block.

The other solutions are of course also doable and need way less rastertime, but have a bigger memory footprint. So it is up to you what is needed more :-)
2012-04-02 07:55
yago

Registered: May 2002
Posts: 332
Yes, iirc, the 8th-line upscroller requires 16k alone for the bitmap. Some memory left here and there for sprites, but using them requires more complicated irqs.

the "raw cpu" method is surely better for games
Previous - 1 | 2 - Next
RefreshSubscribe to this thread:

You need to be logged in to post in the forum.

Search the forum:
Search   for   in  
All times are CET.
Search CSDb
Advanced
Users Online
csabanw
kbs/Pht/Lxt
Jammer
celticdesign/G★P/M..
t0m3000/ibex-crew
Guests online: 103
Top Demos
1 Next Level  (9.8)
2 Mojo  (9.7)
3 Coma Light 13  (9.7)
4 Edge of Disgrace  (9.6)
5 Comaland 100%  (9.6)
6 No Bounds  (9.6)
7 Uncensored  (9.6)
8 Wonderland XIV  (9.6)
9 Memento Mori  (9.6)
10 Bromance  (9.5)
Top onefile Demos
1 It's More Fun to Com..  (9.7)
2 Party Elk 2  (9.7)
3 Cubic Dream  (9.6)
4 Copper Booze  (9.5)
5 TRSAC, Gabber & Pebe..  (9.5)
6 Rainbow Connection  (9.5)
7 Dawnfall V1.1  (9.5)
8 Quadrants  (9.5)
9 Daah, Those Acid Pil..  (9.5)
10 Birth of a Flower  (9.5)
Top Groups
1 Nostalgia  (9.3)
2 Oxyron  (9.3)
3 Booze Design  (9.3)
4 Censor Design  (9.3)
5 Crest  (9.3)
Top Swappers
1 Derbyshire Ram  (10)
2 Jerry  (9.8)
3 Violator  (9.8)
4 Acidchild  (9.7)
5 Starlight  (9.6)

Home - Disclaimer
Copyright © No Name 2001-2024
Page generated in: 0.04 sec.