Index du forum




Un petit coup de main... Vous pouvez nous aider à mettre ce site à jour: n'hésitez pas à me contacter !!!

* Connexion   * Inscription

* FAQ
Nous sommes actuellement le 30 Nov 2025, 07:37

Index du forum » Z80 Coding

Le fuseau horaire est UTC+1 heure


[Soft Scrolling] Recherche exemple ASM.

Modérateur: poulette73



Publier un nouveau sujet Répondre au sujet  Page 1 sur 1
 [ 4 message(s) ] 
  Aperçu avant impression Sujet précédent | Sujet suivant 
Auteur Message
Xavier
 Sujet du message : [Soft Scrolling] Recherche exemple ASM.
Message Publié : 15 Déc 2014, 11:46 
Hors-ligne
Rulezz
Rulezz

Inscription : 21 Fév 2011, 17:53
Message(s) : 153
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...


Haut
 Profil  
 
Triple-Patte
 Sujet du message : Re: [Soft Scrolling] Recherche exemple ASM.
Message Publié : 03 Mars 2015, 15:41 
Hors-ligne
Rulez
Rulez
Avatar de l’utilisateur

Inscription : 03 Mars 2015, 08:52
Message(s) : 10
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

_________________
Ubi solitudinem faciunt, pacem appellant


Haut
 Profil  
 
Xavier
 Sujet du message : Re: [Soft Scrolling] Recherche exemple ASM.
Message Publié : 13 Mai 2015, 01:03 
Hors-ligne
Rulezz
Rulezz

Inscription : 21 Fév 2011, 17:53
Message(s) : 153
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!


Haut
 Profil  
 
Xavier
 Sujet du message : Re: [Soft Scrolling] Recherche exemple ASM.
Message Publié : 13 Mai 2015, 06:35 
Hors-ligne
Rulezz
Rulezz

Inscription : 21 Fév 2011, 17:53
Message(s) : 153
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


Vous n’êtes pas autorisé(e) à consulter les fichiers insérés à ce message.


Haut
 Profil  
 
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  Page 1 sur 1
 [ 4 message(s) ] 

Index du forum » Z80 Coding

Le fuseau horaire est UTC+1 heure


Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 23 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

Aller vers :  
cron
Powered by phpBB® Forum Software © phpBB Group
Traduit en français par Maël Soucaze.