Salut, Je suis à la recherche d'une routine de scrolling verticale vers le bas, pour l'afichage d'une image. j'ai créé une routine basic:
Code :
10 REM SOFT SCROLLING 15 MODE 1:' LOAD"screen1.BIN",&C000 16 for a=1 to 10:LOCATE a,a:PRINT"*":NEXT 17 NB=0 18 FOR Y=10 TO 0 STEP -1 '16 lignes caract. 20 FOR H=7 TO 0 STEP -1: X =(H*2048)+(Y*&50) 22 FOR Z=&C000+X to (&C000+X)+16:POKE (Z),PEEK(Z-2048): NEXT Z 25 NEXT H 30 NEXT Y 50 IF NB<8*16 then goto 18
Mais, une ligne au niveau du changement de ligne ne s'affiche pas correctement... Alors j'ai fait une routine assembleur... Et je vous la donne pour BIEN illustrer le fait que j'ai déjà perdu pas mal de cheveux!
Code :
org &8000 ;nolist ;;write direct "scroll.bin" ;run loop1
start: LD hl,&FCB0 loop0 LD a,&07 LD BC,2048 loop1 SBC hl,bc PUSH BC CALL L_copy POP BC DEC a JR nz,loop1 LD BC,&C000 SBC HL,BC ret c ; &C000 test. ADD HL,BC ; hl=&C4B0-(8x2048)-LDIR OFF[8] LD BC,&3FB0-8 ADD HL,BC JR loop0 L_copy:
Mais là, je vais aussi avoir le problème de la ligne du bas de caractère. Donc, avez vous été confronté à ce problème de report d'adresse. (qui complique tout!) Le but du jeu, et d'afficher une ligne graphique en partie haute, puis faire un scroll bas. Puis on affiche une autre ligne à la même place, scrolling et ainsi de suite. (La ligne du bas est perdue, et est remplacée par la ligne du haut...)
L'image sera ordonnée pour être affichée de bas en haut, pour éviter le renversement de cette même image.
Donc, scrolling sur une partie de l'écran, avec une répétition égale à la taille de l'image.
J'ai pensé utiliser le Hard scrolling, mais le problème est le même. Merci d'avance pour vos propositions.
Ce type d'affichage me simplifiera les choses, car j'ai en projet de cruncher les datas graphiques, et cette ligne en haut serait mon buffer de décompression! Sinon, un LDIR classique serai plus simple, mais... bon...
J'ai renoncé à débugger ta routine. Elle est bien trop alambiquée pour ce qu'elle n'arrive pas à faire.
Du coup, voila une routine toute neuve, assez courte et pas forcément évidente sans une bonne compréhension de la structure de la mémoire vidéo du CPC. Il te faudra donc afficher chaque ligne de ton image sur la première ligne de l'écran (en &C000 dans l'exemple) après chaque appel à la routine de scroll.
ld bc,CNF_SCREEN_WIDTH ldir ; move up screen-source address by one line ld bc,-&800-CNF_SCREEN_WIDTH add hl,bc bit 6,h jr nz,_scroll_skip ; re-adjust address when crossing a char-line boundary ld bc,&4000 - CNF_SCREEN_WIDTH add hl,bc _scroll_skip pop de
dec a jr nz,_scroll_loop
ret
_________________ Ubi solitudinem faciunt, pacem appellant
Salut Triple-Patte , Tout d'abord, pardon pour ce silence! Je viens de découvrir la réponse... J'ai mis le projet de coté, mais dès que j'ai un peu de temps, je te donne des nouvelles de la routine. Cela me fera avancer sur mon jeu d'aventure. Merci pour ce code!
Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 2 invité(s)
Vous ne pouvez pas publier de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas insérer de pièces jointes dans ce forum