Amstrad Plus Index du Forum

Amstrad Plus
Découverte de la gamme Old et Plus des Cpc d'Amstrad.

 FAQFAQ   RechercherRechercher   MembresMembres   GroupesGroupes   S’enregistrerS’enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

*****Scrolling Soft Horizontal

 
Poster un nouveau sujet   Répondre au sujet    Amstrad Plus Index du Forum -> Bienvenue sur ce forum -> Programmation
Sujet précédent :: Sujet suivant  
Auteur Message
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 1 956

MessagePosté le: Lun 2 Mar - 21:29 (2015)    Sujet du message: *****Scrolling Soft Horizontal Répondre en citant

Voici cette fois ci, une approche vers les scrollings softs. C'est seulement une approche pour vous faire comprendre le principe. Je pense qu'on peut faire plus rapide avec la pile, mais, ça reste à voir.


Voici donc le listing, version Winape et version OrgamS.
Code:
; scroll horizontal soft droite à gauche à l'octet.
; Winape Maxam Version
; Ast/iMPACT Mars 2015.

        org #a000
        run $


        ld hl,#c001      ; adresse source du scroll
        ld de,#c000     ; adresse destination
        call copy         ; on transfère le tout !


        ld hl,#c801      ; on passe à la ligne suivante
        ld de,#c800     ; et ainsi de suite...
        Call copy


        ld hl,#d001
        ld de,#d000
        call copy


        ld hl,#d801
        ld de,#d800
        call copy


        ld hl,#e001
        ld de,#e000
        call copy


        ld hl,#e801
        ld de,#e800
        call copy


        ld hl,#f001
        ld de,#f000
        call copy


        ld hl,#f801
        ld de,#f800


copy
        repeat 80   ; nbre de colonnes à décaler.
        ldi         ; copier 80 fois ldi pour 80 caractères
        rend        
        ret

















Le code peut être amélioré surtout avec un calcul rapide des adresses écrans grâce à l'utilisation de set, et res bien placés. On peut aussi supprimer tous les "call copy" et les remplacer par la routine adéquate.
 Je vous laisse y réfléchir, et pourquoi pas, poster ici, votre trouvaille.

Code:

; scroll horizontal soft droite à gauche à l'octet.
; OrgamS Version
; Ast/iMPACT Mars 2015.

        org #a000
        ent $


        ld hl,#c001      ; adresse source du scroll
        ld de,#c000     ; adresse destination
        call copy         ; on transfère le tout !


        ld hl,#c801      ; on passe à la ligne suivante
        ld de,#c800     ; et ainsi de suite...
        Call copy


        ld hl,#d001
        ld de,#d000
        call copy


        ld hl,#d801
        ld de,#d800
        call copy


        ld hl,#e001
        ld de,#e000
        call copy


        ld hl,#e801
        ld de,#e800
        call copy


        ld hl,#f001
        ld de,#f000
        call copy


        ld hl,#f801
        ld de,#f800


copy
         80** LDI   ; nbre de colonnes à décaler.
                    ; copier 80 fois ldi pour 80 caractères                
        ret








_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Revenir en haut
Publicité






MessagePosté le: Lun 2 Mar - 21:29 (2015)    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 1 956

MessagePosté le: Ven 13 Mar - 19:00 (2015)    Sujet du message: Complément d'informations Répondre en citant

Plus je regarde le code et plus je me dis que quelques explications supplémentaires seraient les bienvenue, qu'à cela ne tienne.


Dans l'exemple ci-dessus :
HL est chargé avec #c001, on appelle cela l'adresse source
DE est chargé avec #c000, l'adresse destination
LDi permet le transfert des données pointées par les doubles registres HL et DE. Dans l'exemple, on tranfère 80 fois, ce qui revient à décaler toute 1 ligne sur 80 colonnes, car, en effet, on copie le contenu de #c001 sur #c000, celui de #c002 sur #c001 ... Etc... Et celui de #c04f sur #c04e pour finir et cela sur les 8 premières lignes de l'adresse mémoire écran.


Bien évidement, cette routine doit être appelée tous les 1/50ème de seconde (à la frame), en utilisant la routine système située en #bd19 ou en utilisant sa propre routine.


Code:
frame     Ld b,#f5
             In a,(c)
             rra
             Jr nc,frame+2





Il manque aussi cependant la routine d'affichage. Dans ce cas précis, le gfx devra être positionné à l'adresse #c000+80-1. Je suppose que vous avez compris pourquoi.


Deux possibilités s'offrent à vous, à savoir, utiliser les routines systèmes avec le vecteur #bb5a ou faire soit-même sa routine d'affichage (cf: PrintChar) dont vous pourrez vous inspirer fortement.

Parlons maintenant de la marche à suivre :


10 Frame (#bd19 ou routine frame)
20 Affiche Caractère (Via PrintChar ou #bb5a*)
30 Scroll (routine de scroll au dessus)
40 Goto 10


Si vous avez des questions, lachez vous!

*Le vecteur #bb5a permet d'afficher un caractère comme chacun le sait, mais vous aurez également besoin du vecteur #bb75 pour donner la position x,y du caractère à afficher....
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 03:56 (2017)    Sujet du message: *****Scrolling Soft Horizontal

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Amstrad Plus Index du Forum -> Bienvenue sur ce forum -> Programmation Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  

Index | Panneau d’administration | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com