Logicielsmoto.com

Nous sommes le 24 Nov 2020, 08:11

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 88 messages ]  Aller à la page Précédente  1, 2, 3, 4, 5, 6  Suivante
Auteur Message
 Sujet du message: Re: Formats d'image sur TO8
MessagePosté: 04 Jan 2020, 17:06 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 256
maintenant je m'occupe de faire une routine qui convertie la position X,Y vers la bonne adresse écran (en bitmap 16).

genre
0,0 = $4000 ramA
2,0 = $4000 ramB
4,0 = $4001 ramA
etc...

je laisse tomber les valeurs de x impaire car trop compliqué pour moi le décalage de bits pour garder les couleurs des pixels !

je ferais des déplacements de sprite en x tous les 2 pixels (bm16)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Formats d'image sur TO8
MessagePosté: 04 Jan 2020, 17:27 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1302
Localisation: Brest
RAMA correspond à (x & 2)!=0, RAMB si ==0. Après l'adresse c'est (x>>3)+40*y. Le code correspondant pourrait être:
Code:
* entree A,B = coord (A entre 0 et 159. B entre 0 et 199)
    LSRA           
    STA  ,-S        ; savegarde colonne/2 pour plus tard
    LDA  #40
    MUL
    ADDA #$40       ; Ajout rapide de $4000 à D !
    TFR  D,X        ; X = $4000 + 40*ligne (adresse de la ligne)
    LDA  $E7C3      ; recup E7C3
    ANDA #$FE       ; passe b0 à 0
    LDB  ,S+        ; recup colonne/2
    LSRB            ; colonne/4. La retenue sortante est la valeur de (colonne&2)!=0 donnat le choix rama/ramb
    BCS  b0_est_0   ; si C=1 cad (colonne&2)!=0, on garde b0 à 0
    INCA            ; sinon on passe b0 à 1
b0_est_0:
    STA  $E7C3      ; écriture b0 bit RAMA/RAMB
    LSRB            ; colonne/8 enfin!
    ABX             ; X = $4000 + ligne*40 + (colonne/8)
* sortie X = adresse finale et b0 de $E7C3 positionné à la bonne valeur
    RTS

_________________
Good morning, that's a nice Tnetennba


Dernière édition par Samuel Devulder le 05 Jan 2020, 13:21, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Formats d'image sur TO8
MessagePosté: 05 Jan 2020, 12:33 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 256
salut,
j'ai un Register Error sur cette ligne

TFR A,X * X = $4000 + 40*ligne adresse de la ligne


soit A ou X est mal initialisé ?


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Formats d'image sur TO8
MessagePosté: 05 Jan 2020, 13:20 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1302
Localisation: Brest
oh oui j'ai fait une typo :) A est un registre 8bits, et X du 16bits. On peut pas transférer l'un dans l'autre. En fait, c'est TFR D,X qu'il faut utiliser.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Formats d'image sur TO8
MessagePosté: 07 Jan 2020, 14:45 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 256
bonjour,

trop cool, avec contrôle direction au joystick
bon maintenant je dois faire : construire en mémoire puis swap sur memoire écran pour le clignotement.

Image

pff ça fait mal aux yeux lol !


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Formats d'image sur TO8
MessagePosté: 08 Jan 2020, 21:11 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 256
bon j'ai ajouté la commutation de page !

1 coup sur 2 ça fait page noir, je pense normal vu que j'écris rien sur la 2eme page.

par contre je pensais à un truc, du coup si je construis mon screen en mémoire, y'a plus d'histoire de ramA ramB !

c'est remplacé par 2 espaces mémoires entrelacés ?
et du coup au lieu de dessiner à partir de $4000, je dessine à partir de $0000, puis je commute ?


PS: Et en passant, merci à PULS, Prehisto, Sam et à ceux qui contribue à tous ces codes (et les docs!) que je trouve sur internet que je m'efforce d'analyser pour mieux comprendre tous ça :bien:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Formats d'image sur TO8
MessagePosté: 08 Jan 2020, 21:58 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1302
Localisation: Brest
Si tu mappe la zone écran en RAM, disons $A000-$DFFF, il n'y a plus de commutation par E7C3 à faire, mais la RAMA (ou RAMB je les confonds toujours, yaura qu'à inverser A et B si je me trompe dans le noms) se trouve dans les 1er 8ko: de $A000 à $BFFF et la RAMB de $C000 à $DFFF. Si tu la remap en $0000 alors c'est RAMB qui se trouve dan les 1er 8ko de $0000 à $1FFF et l'autre de $2000 à $3FFF. Dans les codes précédent cela revient à remplacer la manip sur $E7C3 par ajouter $2000 à l'adresse memoire ou pas.
Code:
ECRAN set $A000 (ou $0000)
* entree A,B = coord (A entre 0 et 159. B entre 0 et 199)
    LSRA
    STA  ,-S        ; savegarde colonne/2 pour plus tard
    LDA  #40
    MUL
    ADDA #ECRAN<-8       ; Ajout rapide de ECRAN à D ! on peut le retirer si ECRAN=$0000
    TFR  D,X        ; X = ECRAN + 40*ligne (adresse de la ligne)
    LDB  ,S+        ; recup colonne/2
    LSRB
    BCS  b0_est_0
    LEAX $2000,X
b0_est_0
    LSRB           ;  (était manquant)
    ABX             ; X = ECRAN + ligne*40 + (colonne/8) + $2000 * (colonne&4)/4
* sortie X = adresse finale
    RTS

_________________
Good morning, that's a nice Tnetennba


Dernière édition par Samuel Devulder le 10 Jan 2020, 08:18, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Formats d'image sur TO8
MessagePosté: 08 Jan 2020, 22:50 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 256
ça veux dire quoi le

<-8


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Formats d'image sur TO8
MessagePosté: 09 Jan 2020, 00:00 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1302
Localisation: Brest
c'est un décalage à gauche de -8, cad à droite de +8. On récupère ainsi la partie haute de ECRAN.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Formats d'image sur TO8
MessagePosté: 09 Jan 2020, 13:57 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 256
Dis donc ça ralentit grave d'effacer toute la zone memoire écran avant la commutation pour redessiner la frame suivante !

le moyen le plus rapide c'est de retenir seulement toute les zones des sprites avant de dessiner les sprites,
pour ensuite redessiner le decors du fond juste à l'endroit des sprites ?

pour infos j'ai utilisé ce bout de code pour l'effacement

Code:
EFF
        LDA #$00  * couleur fond
        LDY #$0000
EFF_RAM
        STA ,Y+
        CMPY #$3FFF
        BNE EFF_RAM
        RTS


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Formats d'image sur TO8
MessagePosté: 09 Jan 2020, 15:53 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1302
Localisation: Brest
Ben pour effacer il y a plusieurs optims possibles. Déjà CMPY est plus lent que CMPX, donc en utilisant X comme pointeur d’adresse tu gagnera un peu au niveau de la comparaison (c'est pareil avec LDX qui et plus rapide que LDY). Bien entendu, tu peux sauver la valeur de X sur la pile durant le temps de l'effacement si tu l'utilises ailleurs dans le programme.

Ensuite tu peux faire plusieurs STA d'affilés (consécutifs) avant de faire un CMP. Ca réduit le poids de la comparaison avec le poids de ce qu'on veut faire vraiment (à savoir mettre de octets à 0). Il faut faire gaffe à prendre un nb de STA qui soit un diviseur du nombre total bien entendu, sinon ca ne tombera pas juste.

Mais avec cela une instruction (STA) ne fait toujours qu'un seul octet à la fois, ca veut dire qu'on a toujours minimum 16000 instructions à exécuter pour effacer l'écran. C'est beaucoup, donc c'est lent! Tu peux diviser ce total par deux en utilisant STD (après avoir initialisé D à 0 bien entendu). STD est certes plus lent que STA, mais faire 8000 STD est plus rapide que 16000 STA, donc on est gagnant. Pas mal, non?

Oui mais...

...Mais le fin du fin est de ne pas passer par X ou Y, mais par U en pushant pleins de registres nuls d'un coup en une seule instruction.
Code:
   PSHS D,X,Y,DP,U ; on sauve les regs qu'on va utiliser
   LDU  #16380   ; 16380=7*2340.
   LDX  #$0000   ; X=0
   TFR  X,D      ; D=0
   TFR  A,DP     ; DP=0
   LEAY ,X       ; Y=0
boucle:
   PSHU DP,D,X,Y ; et bim 7 octets à 0 en une seule instruction
   CMPU #0       ; ok là on pert un peu de temp à comparer plutôt qu'à mettre de la ram à 0, mais voir note 2.
   BNE  boucle
   PULS D,X,Y,U,DP,PC ; <== PC fait gagner un RTS ici!
Notes:
  1. On pouvait prendre U=$4000=16384 au lieu de 16380 et pusher 4 octets nuls au début, mais comme cette zone n'est pas visible, c'est pas grave. Donc autant prendre le plus grand multiple de 7 plus petit que 16384, c'est à dire 16380.
  2. On peut gagner en répétant le PHSU 5 ou 10 de suite fois car 2340 et divisible par 5 ou 10.

Après, oui comme tu l'indiques n'effacer ou ne redessiner que la zone occupée par les sprites utilisera aussi moins d'opérations que les 2000 et quelques de cette dernière boucle. Ce sera donc vraisemblablement plus rapide à exécuter, mais plus complexe à écrire. Il faudra choisir.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Formats d'image sur TO8
MessagePosté: 09 Jan 2020, 16:37 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 256
hoo, ok je vais étudier pour comprendre ça. merci


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Formats d'image sur TO8
MessagePosté: 09 Jan 2020, 20:21 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 256
cool la commutation ça fonctionne, ça clignote plus ;)
mais maintenant j'ai plus 1 col sur 2 d'affichée ! genre seulement les colonne ramA sur l'ecran.

- bon du coup vu que j'affiche plus les sprites directement sur l'écran physique j'ai plus besoin d'appeler "swap_ramab" au moment de "remonte_et_decale" pour tester E7C3 !?!
- faut que je remplace le test ramA ramB par test colonne memoire paire ou impaire ?

ou que je décale de $2000 quant je "remonte_et_decale" !

ça se complique ...

Image


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Formats d'image sur TO8
MessagePosté: 09 Jan 2020, 22:21 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1302
Localisation: Brest
l'ajout de $2000 dans remonte_et_décale me semble être la bonne voie puisque la commutation par $E7C3 ne marche pas sur le zones vidéo remappées en RAM.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Formats d'image sur TO8
MessagePosté: 10 Jan 2020, 01:45 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 256
juste ! dans le post du Wed Jan 08, 2020 21:58

y'aurait pas un LSRB à mettre ?

Code:
...
...
...
b0_est_0
              LSRB    <---- ICI il manque cette instruction ??
             ABX             ; X = ECRAN + ligne*40 + (colonne/8) + $2000 * (colonne&4)/4
* sortie X = adresse finale
             RTS


(ok vu! ta corrigé.)


Dernière édition par adnz le 10 Jan 2020, 14:04, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 88 messages ]  Aller à la page Précédente  1, 2, 3, 4, 5, 6  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
cron
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com