Hallo Besucher, der Thread wurde 9,4k mal aufgerufen und enthält 71 Antworten

letzter Beitrag von ThomBraxton am

Fullscreen Smooth Scroll zuckt

  • er muss aber zumindest beim colorram "links" anfangen, sonst überschreibt er sich die eigenen farben


    Oh, stimmt!

    Geht natürlich doch, ist nur etwas unschön:


    ldx #217 ; 255-38
    - [...]
    inx
    bmi -


    Dann müsste aber COLRAM entsprechend 'verbogen' werden (also statt z. B. $D800 -> $D727, also minus 217) oder überall ein '-127' eingefügt werden (mit for-Schleifen bei den move_color_ram-Schleifen wäre das einfacher gewesen, also nur ein Eintrag). Ich würde das jetzt aber auch nicht ändern, wenn nicht unbedingt nötig.

  • Hmm. Es klingt logisch, nur will mein Gehirn dieser Reise nicht folgen ;)

    Wenn es nur um die bildliche Vorstellung geht:
    Stell Dir den Extremfall dieses Schemas vor: In 25 Blöcken, also zeilenweise kopieren.
    Und dann stell Dir das Wettrennen zwischen dem Rasterstrahl und den sich ändernden Zeilen vor.
    Kopierst Du von oben nach unten, dann hast Du einen kompletten Frame + 192(?) =504 Rasterzeilen Zeit.
    Kopierst Du von unten nach oben, dann bleibt Dir eigentlich nur die Zeit des Rahmens, 112 Rasterzeilen.

  • Jetzt hab ich mal versucht das Scrolling von horizontal auf vertikal zu ändern, im Grunde ja kein großes Ding, statt D016 dann D011 und die Kopierschleifen anpassen - dachte ich.
    Aber - es zuckelt fürchterlich!


    Jetzt hab ich mal einen simplen Test in BASIC gemacht, und stelle das gleiche Verhalten fest, wenn man von unten nach oben scrollt. Anders herum ist es sauber. Ist Scrolling von unten nach oben nicht zu gebrauchen?


    Sieht super aus:


    Code
    1. 10 a=16
    2. 20 poke 53265,a
    3. 30 a=a+1
    4. 40 if a=24 then a=16
    5. 50 for i=1 to 500:next
    6. 60 goto 20


    Sieht fürchterlich aus



    Code
    1. 10 a=23
    2. 20 poke 53265,a
    3. 30 a=a-1
    4. 40 if a=15 then a=23
    5. 50 for i=1 to 500:next
    6. 60 goto 20
  • Synchronisier das mal mit dem Bildaufbau. Basic macht die Zugriffe ja "irgendwann", und wenn das im Textfenster passiert, wird

    • beim Runterscrollen irgend eine Pixelzeile doppelt ausgegeben - kein Problem.
    • beim Hochscrollen irgend eine Pixelzeile übersprungen - wenn das nun eine der Badlines ist, werden keine neuen Zeichencodes gelesen und darum wird die Textzeile doppelt ausgegeben, was man sehen kann.
  • Danke MacBacon für die gute Erklärung.


    Synchronisier das mal mit dem Bildaufbau. Basic macht die Zugriffe ja "irgendwann", und wenn das im Textfenster passiert, wird

    Bisher habe ich das Scrolling ja im vblank erledigt, was beim horizontalen Scrolling - bis auf den Verbrauch von zuviel Rasterzeit - auch gut aussieht. Gleiches durch vertikales Scrolling ersetzt bringt aber fürchterliche Effekte


    Der Code ist ansonsten weitestgehend gleich geblieben


  • Ist Scrolling von unten nach oben nicht zu gebrauchen?

    Wie läuft denn deine Kopierschleife beim Scrollen von unten nach oben?
    Wenn du unten anfängst und dich nach oben "vorarbeitest", bekommst du ja zwangsweise Probleme, da so der Rasterstrahl nicht der Kopierschleife folgt, sondern das Kopieren dem Rasterstrahl entgegen läuft.


    Das dürfte bei einem Doublebuffer aber nur das Farbram betreffen.

  • Mac Bacon, guter Tipp!
    In der Initialisierung hatte ich noch einen falschen Wert - ich verstehe nur nicht, wieso der nicht überschrieben wird, wenn ich z.B. $17 in D011 schreibe. Es blieb immer das achte Bit gesetzt.


    Des weiteren den Raster IRQ angepasst, nun scrollt es weich - danke!