CPC Rulez
https://cpcrulez.fr/forum/

[Soft Scrolling] Recherche exemple ASM.
https://cpcrulez.fr/forum/viewtopic.php?f=4&t=5413
Page 1 sur 1

Auteur :  Xavier [ 15 Déc 2014, 11:46 ]
Sujet du message :  [Soft Scrolling] Recherche exemple ASM.

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:

     LD BC,&800
     ADD hl,bc
   LD d,h   
   LD e,l
     SBC hl,bc
   LD BC,&8
   LDIR

   RET

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...

Auteur :  Triple-Patte [ 03 Mars 2015, 15:41 ]
Sujet du message :  Re: [Soft Scrolling] Recherche exemple ASM.

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.

Code :
   ; manual config
   CNF_CRTC_R1      EQU 40
   CNF_CRTC_R6      EQU 25
   CNF_SCREEN_BASE      EQU &C000
   ; auto-config
   CNF_SCREEN_WIDTH   EQU CNF_CRTC_R1*2
   CNF_SCREEN_HEIGHT   EQU CNF_CRTC_R6*8
   ; voodoo
   LET _screen_source = CNF_CRTC_R6 - 1 * CNF_SCREEN_WIDTH + CNF_SCREEN_BASE
   LET _screen_source = &800*6 + _screen_source

   org &4000
scroll
   ld a,CNF_SCREEN_HEIGHT - 1

   ld hl,_screen_source
   ld de,_screen_source + &800

_scroll_loop
   push hl

   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

Auteur :  Xavier [ 13 Mai 2015, 01:03 ]
Sujet du message :  Re: [Soft Scrolling] Recherche exemple ASM.

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!

Auteur :  Xavier [ 13 Mai 2015, 06:35 ]
Sujet du message :  Re: [Soft Scrolling] Recherche exemple ASM.

C'est ok!
Reste à l'intégrer à ma routine d'affichage.
Le sna teste est en pièce jointe.

Pièce jointe :
soft_scroll.SNA

Page 1 sur 1 Le fuseau horaire est UTC+1 heure
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/