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