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 

Copier une zone écran, en faire un sprite.

 
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
Steph


Hors ligne

Inscrit le: 24 Juil 2015
Messages: 3

MessagePosté le: Ven 24 Juil - 15:57 (2015)    Sujet du message: Copier une zone écran, en faire un sprite. Répondre en citant

Bonjour à tous.

Avant de tester les sprites j'ai pu me rendre compte de l'organisation video/codage pixels en bougeant un pixel entre &C000 et &C04F en mode 0.

Je n'arrive pas à générer un sprite en capturant directement ce qu'il y a sur l'écran.
Par exemple j'affiche "7" en mode 0 tout en haut à droite. Je copie la première ligne en &4000, ne prend que la largeur du caractère. A prioris il y a un petit trait horizontal en mémoire. (le haut du "7")


 
Code:

 nolist
org &6000
run $

; Set border and Mode 0
call &bc38
or a
call &bc0e

; Do the sprite myself! Print "7"
ld hl,&0100
call &bb75
ld a,"7"
call &bb5a


; Grab the sprite, line 1, 8 pixels
ld HL, &c000    ;Copy screen
ld DE, &4000    ;to RAM
ld BC, &4    ;size
ldir

; Clear the screen
CALL &BC14

ld HL, &4000     ;Copy RAM
ld DE, &c000      ;to screen
ld BC, &4    ;size
ldir
 
jp $



Revenir en haut
Publicité






MessagePosté le: Ven 24 Juil - 15:57 (2015)    Sujet du message: Publicité

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

En ligne

Inscrit le: 05 Sep 2014
Messages: 2 321

MessagePosté le: Ven 24 Juil - 19:54 (2015)    Sujet du message: Copier une zone écran, en faire un sprite. Répondre en citant

Salut Steph,


C'est bien plus complexe que cela n'y paraît, la mêmoire écran du Cpc.
Déjà, dans une config normale (80 caractères en mode 2, 40 en mode 1 et 20 en mode 0), si la mémoire vidéo
commence en #c000, pour aller sur la ligne d'en bas on ajoutera #800, l'adresse sera donc #c800 pour la ligne 2 et ainsi de suite jusqu'à la ligne 7.
Pour calculer la ligne 8, il suffit d'ajouter 80 à l'adresse de départ, soit la ligne 8 est #c000+80 soit #c050.
Ton programme ne fait que copier les 4 premiers octets de la 1ère ligne de la mémoire écran et réaffiche donc, la même chose.


Pour info :


Ligne 0 : #c000....#c04f
Ligne 1 : #c800....#c84f
Ligne 2 : #d000....#d04f
Ligne 3 : #d800....#d84f
....
Ligne 7 : #f800....#f84f
Ligne 8 : #c050....#c09f
....
Et ainsi de suite...
_________________
Ast/iMP4CT

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


Revenir en haut
Steph


Hors ligne

Inscrit le: 24 Juil 2015
Messages: 3

MessagePosté le: Ven 24 Juil - 21:22 (2015)    Sujet du message: Copier une zone écran, en faire un sprite. Répondre en citant

Salut Ast.

Merci pour ton aide!

J'ai vu effectivement qu'il faut sauter de &800 puis ca remonte à &C050 +&800 etc.

Mais ce que je veux faire c'est juste copier quelque pixels sur la ligne 0.
Capturer le haut du caractère "7" (il faut enlever mon CLS pour le voir)
Je ne réussi pas à sauver cela en RAM (&4000 dans mon exemple)

Mon code affiche "7" en mode 0, sauve 4 octets de la première ligne écran vers &4000, fait un CLS, puis tente d'afficher le "sprite" en &C000 de nouveau.


Revenir en haut
Ast
Administrateur

En ligne

Inscrit le: 05 Sep 2014
Messages: 2 321

MessagePosté le: Ven 24 Juil - 22:17 (2015)    Sujet du message: Copier une zone écran, en faire un sprite. Répondre en citant

Je pense que le problème vient du vecteur #bc14, remplace le par une routine maison du style :


Code:

Clearscreen
Ld hl,#c000
Ld d,h
Ld bc,#3fff
Ld e,1
Ld (hl),l
Ldir
Ret



Ps : je viens de faire l'essai et ca fonctionne.
_________________
Ast/iMP4CT

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


Revenir en haut
Steph


Hors ligne

Inscrit le: 24 Juil 2015
Messages: 3

MessagePosté le: Ven 24 Juil - 23:16 (2015)    Sujet du message: Copier une zone écran, en faire un sprite. Répondre en citant

Merci pour la routine Ast.

Le problème venait au moins de mon locate (ld hl,&0100 ; CALL &bb75) et du curseur peut être. L'écran semble avoir scrollé, et peut être cela a changé son adressage?
Je vois maintenant le haut d'un caractère, je vais tenter d'afficher "7" entièrement.
Cool
Wink


Revenir en haut
Ast
Administrateur

En ligne

Inscrit le: 05 Sep 2014
Messages: 2 321

MessagePosté le: Ven 24 Juil - 23:26 (2015)    Sujet du message: Copier une zone écran, en faire un sprite. Répondre en citant

Je n'utilise pas vraiment les vecteurs systèmes. Si j'ai pu être utile, tant mieux.
_________________
Ast/iMP4CT

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


Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 16:00 (2017)    Sujet du message: Copier une zone écran, en faire un sprite.

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 + 1 Heure
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