Forum Oric
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Derniers sujets
» besoin cable coleur et interface de lecture sd card
optimisation scrolling horizontal EmptyJeu 6 Aoû 2020 - 18:55 par kenneth

» le forum fourre tout
optimisation scrolling horizontal EmptyMar 30 Juin 2020 - 13:11 par Admin

» I had a dream .. glOric
optimisation scrolling horizontal EmptySam 6 Juin 2020 - 14:18 par jbperin

» Multi soluces...
optimisation scrolling horizontal EmptyMar 19 Mai 2020 - 12:41 par soft-bug

» Des nouvelles de BAS_ORIC
optimisation scrolling horizontal EmptyMer 6 Mai 2020 - 16:08 par goyo

» 3D walkthrough template en moins de 600 lignes de C
optimisation scrolling horizontal EmptyMer 29 Avr 2020 - 20:43 par Star42

» CB2 micro
optimisation scrolling horizontal EmptySam 11 Avr 2020 - 19:29 par jbperin

» Le bonjour de codeur
optimisation scrolling horizontal EmptyMer 1 Avr 2020 - 15:18 par Invité

» [résolu] Format des fichiers Hyperbasic...
optimisation scrolling horizontal EmptySam 28 Mar 2020 - 19:50 par damien

» [résolu] Récupération contenu disquettes 3 pouces...
optimisation scrolling horizontal EmptyVen 27 Mar 2020 - 15:06 par damien

» Echange de jeux/logiciels
optimisation scrolling horizontal EmptyLun 23 Mar 2020 - 20:15 par Star42

» Ordi Portable Sony VAIO
optimisation scrolling horizontal EmptyDim 22 Mar 2020 - 16:17 par froggy

» une atan2 pour vos lib math
optimisation scrolling horizontal EmptyDim 22 Mar 2020 - 11:30 par drpsy

» nouveau site
optimisation scrolling horizontal EmptyJeu 19 Mar 2020 - 20:02 par Star42

» CEO Mag Spéciaux disponibles
optimisation scrolling horizontal EmptyJeu 19 Mar 2020 - 9:33 par musepat

Qui est en ligne ?
Il y a en tout 4 utilisateurs en ligne :: 0 Enregistré, 0 Invisible et 4 Invités

Aucun

Le record du nombre d'utilisateurs en ligne est de 29 le Mer 25 Fév 2015 - 14:01
Connexion

Récupérer mon mot de passe

Statistiques
Nous avons 209 membres enregistrés
L'utilisateur enregistré le plus récent est HervOric

Nos membres ont posté un total de 8577 messages dans 746 sujets
Portail ORIC



Le Deal du moment : -50%
-50% sur Nike Air Max 200 Winter
Voir le deal
63 €

optimisation scrolling horizontal

Aller en bas

optimisation scrolling horizontal Empty optimisation scrolling horizontal

Message par goyo le Sam 31 Aoû 2019 - 12:42

J'essaie de faire un scrolling horizontal (vers la gauche) le plus performant possible en Hires.

Je déroule une ligne entière de scrolling pour gagner de la vitesse.

Si quelqu'un peut m'indiquer si je peux encore optimiser ce scrolling (à part dérouler toutes les lignes de l'écran) ?


Code:

_Hleftscroll
sta $FFFF ; only to debug in oricutron
 
 ldx #0
 
suiteLH
 
 lda HiresScreenAdressLow,x
 sta tmp0
 lda HiresScreenAdressHigh,x
 sta tmp0+1
 
 ldy #1
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #2
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #3
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #4
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #5
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #6
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #7
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #8
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #9
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #10
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #11
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #12
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #13
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #14
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #15
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #16
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #17
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #18
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #19
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #20
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #21
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #22
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #23
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #24
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #25
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #26
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #27
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #28
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #29
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #30
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #31
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #32
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #33
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #34
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #35
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #36
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #37
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #38
 lda (tmp0),y
 dey
 sta (tmp0),y
 ldy #39
 lda (tmp0),y
 dey
 sta (tmp0),y
 ;ldy #40
 ;lda (tmp0),y
 ;dey
 ;sta (tmp0),y

 inx
 cpx height
 bcs saut
 jmp suiteLH
 saut
rts

height .byt 200
Fichiers joints
optimisation scrolling horizontal Attachment
hscroll.zip Vous n'avez pas la permission de télécharger les fichiers joints.(14 Ko) Téléchargé 1 fois
goyo
goyo

Messages : 189
Date d'inscription : 02/05/2014
Age : 49
Localisation : Massy

Revenir en haut Aller en bas

optimisation scrolling horizontal Empty Re: optimisation scrolling horizontal

Message par assinie le Sam 31 Aoû 2019 - 13:03

Si tu utilises 2 variables en page zéro tmp0 et tmp1, en mettant dans tmp1 la valeur de tmp0 +1, tu supprimes tous les ldy et tu remplaces les dey par des iny:

Code:

ldy #$00
lda (tmp1),y
sta (tmp0),y
iny
lda (tmp1),y
sta (tmp0),y
iny
...
assinie
assinie

Messages : 264
Date d'inscription : 09/02/2014

Revenir en haut Aller en bas

optimisation scrolling horizontal Empty Re: optimisation scrolling horizontal

Message par goyo le Sam 31 Aoû 2019 - 14:58

assinie a écrit:Si tu utilises 2 variables en page zéro tmp0 et tmp1, en mettant dans tmp1 la valeur de tmp0 +1, tu supprimes tous les ldy et tu remplaces les dey par des iny:

Code:

ldy #$00
lda (tmp1),y
sta (tmp0),y
iny
lda (tmp1),y
sta (tmp0),y
iny
...

Super ! Ça fait gagner 2 points de timer (0x276)
Merci Assinie
goyo
goyo

Messages : 189
Date d'inscription : 02/05/2014
Age : 49
Localisation : Massy

Revenir en haut Aller en bas

optimisation scrolling horizontal Empty Re: optimisation scrolling horizontal

Message par kenneth le Sam 31 Aoû 2019 - 15:55

J ai fait ce bout de code qui tourne sans trop de saccades
Fichiers joints
optimisation scrolling horizontal Attachment
hirescro.txt Vous n'avez pas la permission de télécharger les fichiers joints.(7 Ko) Téléchargé 10 fois

_________________
Archives d'ORICGAMES
Lecteur de cartouches Omose
Projet lecteur SD Erebus
kenneth
kenneth
Modérateur

Messages : 805
Date d'inscription : 13/01/2013
Age : 53
Localisation : 972

Revenir en haut Aller en bas

optimisation scrolling horizontal Empty Re: optimisation scrolling horizontal

Message par Dbug le Sam 31 Aoû 2019 - 19:43

Si quelqu'un peut m'indiquer si je peux encore optimiser ce scrolling (à part dérouler toutes les lignes de l'écran) ?
Vu que tu as déja déroulé le code pour une ligne complete, a mon avis l'alternative la plus rapide c'est de faire a la place un déroulement vertical:
Code:

suiteLH

 lda $a000+1+(40*0),x
 sta $a000+0+(40*0),x

 lda $a000+1+(40*1),x
 sta $a000+0+(40*1),x

 (...)

 lda $a000+1+(40*198),x
 sta $a000+0+(40*198),x

 lda $a000+1+(40*199),x
 sta $a000+0+(40*199),x

 inx
 cpx #39
 bcs saut
 jmp suiteLH
 saut
rts

_________________

Dbug
Dbug

Messages : 248
Date d'inscription : 06/01/2013

Revenir en haut Aller en bas

optimisation scrolling horizontal Empty Re: optimisation scrolling horizontal

Message par assinie le Sam 31 Aoû 2019 - 20:09

Dans la version de Kenneth, le BEQ n'est exécuté qu'à la fin mais fait perdre 2 cycles à chaque fois, donc, si tu remplaces la fin:

Code:
DEX
BEQ $10EF
JMP $100E
par
Code:
DEX
BNE $100E
tu gagnes 2 cycles par ligne (un JMP utilise 3 cycles tout comme le BNE qui est ecécuté à chaque fois)
2 * 200 => 400 cycles gagnés au total.
assinie
assinie

Messages : 264
Date d'inscription : 09/02/2014

Revenir en haut Aller en bas

optimisation scrolling horizontal Empty Re: optimisation scrolling horizontal

Message par kenneth le Sam 31 Aoû 2019 - 21:19

En fait le JMP remplace le saut relatif parce il me semble que la distance de saut est trop grande. Arrow

_________________
Archives d'ORICGAMES
Lecteur de cartouches Omose
Projet lecteur SD Erebus
kenneth
kenneth
Modérateur

Messages : 805
Date d'inscription : 13/01/2013
Age : 53
Localisation : 972

Revenir en haut Aller en bas

optimisation scrolling horizontal Empty Re: optimisation scrolling horizontal

Message par assinie le Sam 31 Aoû 2019 - 21:21

Oups, je n'ai pas vérifié la distance Embarassed
assinie
assinie

Messages : 264
Date d'inscription : 09/02/2014

Revenir en haut Aller en bas

optimisation scrolling horizontal Empty Re: optimisation scrolling horizontal

Message par goyo le Lun 2 Sep 2019 - 10:07

Dbug a écrit:
Si quelqu'un peut m'indiquer si je peux encore optimiser ce scrolling (à part dérouler toutes les lignes de l'écran) ?
Vu que tu as déja déroulé le code pour une ligne complete, a mon avis l'alternative la plus rapide c'est de faire a la place un déroulement vertical:
Code:

suiteLH

 lda $a000+1+(40*0),x
 sta $a000+0+(40*0),x

 lda $a000+1+(40*1),x
 sta $a000+0+(40*1),x

 (...)

 lda $a000+1+(40*198),x
 sta $a000+0+(40*198),x

 lda $a000+1+(40*199),x
 sta $a000+0+(40*199),x

 inx
 cpx #39
 bcs saut
 jmp suiteLH
 saut
rts

Merci Dr Dbug!
Incroyable , un gros gain de vitesse ! je gagne au moins 5 points de vitesse !
J’ai l’impression qu’on peut pas faire mieux
(A l'aide de Python j'ai généré les 400 lignes de code assez facilement)
Fichiers joints
optimisation scrolling horizontal Attachment
hscroll.zip Vous n'avez pas la permission de télécharger les fichiers joints.(12 Ko) Téléchargé 4 fois
goyo
goyo

Messages : 189
Date d'inscription : 02/05/2014
Age : 49
Localisation : Massy

Revenir en haut Aller en bas

optimisation scrolling horizontal Empty Re: optimisation scrolling horizontal

Message par Dbug le Lun 2 Sep 2019 - 20:32

Techniquement on peut faire mieux, en décrémentant:
Code:
   ldx width
(...)
        dex
        bmi saut
Comme ca on évite 40 instructions "cpx width", mais bon, c'est un détail Very Happy

_________________

Dbug
Dbug

Messages : 248
Date d'inscription : 06/01/2013

Revenir en haut Aller en bas

optimisation scrolling horizontal Empty Re: optimisation scrolling horizontal

Message par iss le Lun 2 Sep 2019 - 20:58

Dbug a écrit:Techniquement on peut faire mieux, en décrémentant:
Code:
 ldx width
(...)
        dex
        bmi saut
Comme ca on évite 40 instructions "cpx width", mais bon, c'est un détail Very Happy

I think this will not work Rolling Eyes because it will replicate the last byte 40 times i.e. byte from pos 39 goes to pos 38, on next iteration the same byte will go from pos 38 to pos 37 etc...

PS: this is almost like the difference between memcpy() and memmove() when we have overlapping source and destination Wink.
iss
iss

Messages : 112
Date d'inscription : 30/10/2014

Revenir en haut Aller en bas

optimisation scrolling horizontal Empty Re: optimisation scrolling horizontal

Message par goyo le Lun 2 Sep 2019 - 22:14

Dbug a écrit:Techniquement on peut faire mieux, en décrémentant:
Code:
 ldx width
(...)
        dex
        bmi saut
Comme ca on évite 40 instructions "cpx width", mais bon, c'est un détail Very Happy

Merci, je vais essayer Smile
aussi on peut désactiver l'interruption clavier durant le scrolling :
j'ai cru comprendre qu'elle est appelée 200 fois par seconde...

Code:
poke (782,64);
scrolling();
poke (782,192);
goyo
goyo

Messages : 189
Date d'inscription : 02/05/2014
Age : 49
Localisation : Massy

Revenir en haut Aller en bas

optimisation scrolling horizontal Empty Re: optimisation scrolling horizontal

Message par Dbug le Mar 3 Sep 2019 - 12:49

C'est pas "l'interruption clavier", c'est "l'interruption système", qui entre autre s'occupe du clavier, mais aussi de tout ce qui nécessite un traitement régulier, comme les mises a jour de timers, le curseur clignotant, l'instruction WAIT, etc...

Il me semble qu'elle tourne a 100hz (alors que 50hz serait largement suffisant), et prend environ 20% du temps machine global.

Pour gagner le maximum de vitesse tout en conservant la possibilité d'utiliser les interruptions, l'idéal c'est de faire ca avec un lecteur de disquette, comme ca on peut remplacer directement le vecteur IRQ en haut de ram vu que maintenant on est en mode overlay, ce qui évite de passer par le système de trampoline de la ROM basic qui fait une série d'appels intermédiaires histoire de pouvoir exécuter les routines utilisateur en page 2.

_________________

Dbug
Dbug

Messages : 248
Date d'inscription : 06/01/2013

Revenir en haut Aller en bas

optimisation scrolling horizontal Empty Re: optimisation scrolling horizontal

Message par goyo le Mar 3 Sep 2019 - 18:14

Dbug a écrit:C'est pas "l'interruption clavier", c'est "l'interruption système", qui entre autre s'occupe du clavier, mais aussi de tout ce qui nécessite un traitement régulier, comme les mises a jour de timers, le curseur clignotant, l'instruction WAIT, etc...

Il me semble qu'elle tourne a 100hz (alors que 50hz serait largement suffisant), et prend environ 20% du temps machine global.

Pour gagner le maximum de vitesse tout en conservant la possibilité d'utiliser les interruptions, l'idéal c'est de faire ca avec un lecteur de disquette, comme ca on peut remplacer directement le vecteur IRQ en haut de ram vu que maintenant on est en mode overlay, ce qui évite de passer par le système de trampoline de la ROM basic qui fait une série d'appels intermédiaires histoire de pouvoir exécuter les routines utilisateur en page 2.

Oui pardon tu as raison ça ne gère pas que le clavier.
J'ai quand même essayé cette désactivation dans mon jeu d'action 'rain panic' qui en cours de développement et ça marche. Comme je n'utilise pas le wait et que des compteurs maison, ça passe et j'ai l'impression que ça tourne bien plus vite.
L'Oric avec lecteur de disquette je ne connais pas du tout, pour l'instant je vais rester sur l'Oric atmos simple.
goyo
goyo

Messages : 189
Date d'inscription : 02/05/2014
Age : 49
Localisation : Massy

Revenir en haut Aller en bas

optimisation scrolling horizontal Empty Re: optimisation scrolling horizontal

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum