Dasm e' public domain, e i sorgenti liberi mi hanno permesso di farne modifiche a mio piacimento, tra queste l'implementazione di comandi presenti in C64asm che mi hanno permesso di disfarmi di quest'ultimo che per colpa dei bachi di mala-implementazione mi stava diventando stretto. Sul mio sito trovi la mia versione, comprensiva di dox ampliati con le aggiunte da me apportate.
Per quanto riguarda lo scrolling, puoi evitare di creare un generatore di codice ma farlo in modo semplice tramite l'uso di macro:
N SET 24
REPEAT 24
M SET 39
REPEAT 40
lda $0400 + [40 * [N-1]]+M
sta $0400 + [40 * N] +M
lda $d800 + [40 * [N-1]]+M
sta $d800 + [40 * N] +M
M SET M - 1
REPEND
N SET N - 1
REPEND
a discapito pero' dell'occupazione del codice risultante (11kb solo per il coarse scrolling che quindi sfora oltre $cfff se fai partire il codice da $c000)
Purtroppo occorre temporizzare bene il momento in cui si effettua il coarse: riportando lo smooth scrolling a 0 lo schermo "torna su" di quasi una riga, lo spostamento delle righe da 0-24 a 1-25 deve avvenire il piu' velocemente possibile e anche facendo attenzione che il raster sia oltre il bordo inferiore puo' non bastare.
Su C= Hacking #7 c'e' un articolo che parla di FLD (Flexible line distance) che puo' essere sfruttato se lo scopo e' solo quello di far sparire verso il basso lo schermo (o farlo apparire dal basso verso l'alto) con questo trucco che fa si' che non sia necessario il coarse.
Se pero' lo scopo e' quello di fare che so, un SEU vericale, cioe' quando si muove giu' di una riga , una nuova riga deva apparire alla riga 0, beh non resta che la via del codice unrolled per il coarse e una bella routine cycle exact che usi una o piu' raster interrupt. Buon divertimento