It's possible to stop the flicker. You need a decent interrupt loop setup linked to vblank to time when to do the reset of the smooth scroll register. I have a whole screen of colour bitmap scrolling down the screen and depending on when I start the scrolling I get none, some or all flicker. When there is none it looks lovely. I need to experiment with exactly what the timing needs to be in relation to vblank so I can consistently get no flicker.
I think I am confident it's possible though. BTW, whole screen scrolling in colour bitmap.
Cool... weather text or bitmap, if you can publish results of WHEN to update scroll-register to avoid flicker, the entire C128 community will thank you (at least me).
In other words, I agree the problem is when... EXACTLY... you need to update the register(s)...
I also agree it will (probably) be a PITA because there is no hardware interrupt, or even a simple raster register... you will have to laboriously track the V-Blank bit (simple, but time consuming), or else sync a CIA timer with the VDC (more work to setup, but less CPU resources). I think most of know that Risen From Oblivion uses CIA sync'd to VDC (so a good place to start)...
I played with the colorscroll v2.5 program a little. The 'flicker' only occurs if you put the text in line 1 of the screen, in lines 2-25 the scroll is smooth as expected. My guess is there is too little time between vsync and display of the first line, to both copy the screen data and color data. (16k PAL VDC)
EDIT: hm, if you display 2 lines of text, the first line is flickering, the second is not. So probably a 'hardware' bug of the VDC?
ScrollText byte $fe text 'this is a test of ' byte $fe text 'the ' byte $fe text 'scrolling demo... ' byte $fe text 'flash ' byte $fe text 'underline ' byte $fe text 'reverse ' byte $fe text 'charSET ' byte $ff
ColorData byte $0f,$0d,$0c,$1c,$2c,$4a,$86 I changed and added some lines in the scroll and movetext subroutines. This will get rid of the flickering in the first line.