Autre Méthode pour afficher un écran complet le plus rapidement possible a partir d'une image, mais cela nécessite d'encoder les données de l'image source en sens inverse au préalable (avec un petit utilitaire).
ça ne fonctionne pas pour recopier une zone de données vers une autre évidement ;-)
Code:
DEBUTECRANA EQU $0014 * test pour fin stack blasting
FINECRANA EQU $1F40 * fin de la RAM A video
DEBUTECRANB EQU $2014 * test pour fin stack blasting
FINECRANB EQU $3F40 * fin de la RAM B video
DRAW_RAM_DATA_TO_CART_160x200
PSHS U,DP * sauvegarde des registres pour utilisation du stack blast
STS DRAW_RAM_DATA_TO_CART_160x200A_E+2
LDS #FINECRANA * init pointeur au bout de la RAM A video (ecriture remontante)
LDU #$A000
DRAW_RAM_DATA_TO_CART_160x200A
PULU A,B,DP,X,Y
PSHS Y,X,DP,B,A
PULU A,B,DP,X,Y
PSHS Y,X,DP,B,A
PULU A,B,DP,X,Y
PSHS Y,X,DP,B,A
PULU A,B,DP,X,Y
PSHS Y,X,DP,B,A
PULU A,B,DP,X,Y
PSHS Y,X,DP,B,A
PULU A,B,DP,X,Y
PSHS Y,X,DP,B,A
CMPS #DEBUTECRANA
BNE DRAW_RAM_DATA_TO_CART_160x200A
PULU A,B,DP,X,Y
PSHS Y,X,DP,B,A
PULU A,B,DP,X,Y
PSHS Y,X,DP,B,A
PULU B,DP,X,Y
PSHS Y,X,DP,B
LDS #FINECRANB * init pointeur au bout de la RAM B video (ecriture remontante)
LDU #$C000
DRAW_RAM_DATA_TO_CART_160x200B
PULU A,B,DP,X,Y
PSHS Y,X,DP,B,A
PULU A,B,DP,X,Y
PSHS Y,X,DP,B,A
PULU A,B,DP,X,Y
PSHS Y,X,DP,B,A
PULU A,B,DP,X,Y
PSHS Y,X,DP,B,A
PULU A,B,DP,X,Y
PSHS Y,X,DP,B,A
PULU A,B,DP,X,Y
PSHS Y,X,DP,B,A
CMPS #DEBUTECRANB
BNE DRAW_RAM_DATA_TO_CART_160x200B
PULU A,B,DP,X,Y
PSHS Y,X,DP,B,A
PULU A,B,DP,X,Y
PSHS Y,X,DP,B,A
PULU B,DP,X,Y
PSHS Y,X,DP,B
DRAW_RAM_DATA_TO_CART_160x200A_E
LDS #$0000 * rechargement des registres
PULS U,DP
RTS
A lire sur le sujet :
http://blog.moertel.com/posts/2013-12-14-great-old-timey-game-programming-hack.html