Derniers sujets
» Aux couleurs de l'Atmos
optimisation scrolling horizontal EmptyAujourd'hui à 7:23 par Voyageur

» Problème sur mix BASIC / ASM
optimisation scrolling horizontal EmptyHier à 17:30 par jbperin

» ?Syntax error
optimisation scrolling horizontal EmptyDim 17 Nov 2019 - 21:11 par Symoon

» jeu Rain Panic
optimisation scrolling horizontal EmptyDim 17 Nov 2019 - 16:17 par Dom50

» GRANDAD
optimisation scrolling horizontal EmptyDim 17 Nov 2019 - 15:45 par Dom50

» rs
optimisation scrolling horizontal EmptySam 16 Nov 2019 - 6:42 par kenneth

» basic & lib ASM___[RESOLU]
optimisation scrolling horizontal EmptyJeu 14 Nov 2019 - 13:58 par Dbug

» La quête des anneaux
optimisation scrolling horizontal EmptyJeu 14 Nov 2019 - 0:50 par Ladywasky

» I had a dream .. glOric
optimisation scrolling horizontal EmptyMar 12 Nov 2019 - 18:22 par Dbug

» **NEW** EDGE for ORIC !!!!
optimisation scrolling horizontal EmptyLun 11 Nov 2019 - 12:21 par jbperin

» Listings de l'ORIC-1 Manual
optimisation scrolling horizontal EmptySam 9 Nov 2019 - 21:35 par jbperin

» Atmos à vendre
optimisation scrolling horizontal EmptySam 9 Nov 2019 - 16:56 par Dbug

» Musique de Goldorak sur Oric
optimisation scrolling horizontal EmptySam 9 Nov 2019 - 16:52 par Dbug

» Nombres négatifs 16 bits via DEEK
optimisation scrolling horizontal EmptyVen 8 Nov 2019 - 23:46 par jbperin

» CEO-MAG 354
optimisation scrolling horizontal EmptyVen 8 Nov 2019 - 16:22 par jbperin

Qui est en ligne ?
Il y a en tout 2 utilisateurs en ligne :: 0 Enregistré, 0 Invisible et 2 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 199 membres enregistrés
L'utilisateur enregistré le plus récent est fminisini

Nos membres ont posté un total de 8154 messages dans 704 sujets
Portail ORIC




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 : 181
Date d'inscription : 02/05/2014
Age : 48
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 : 254
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 : 181
Date d'inscription : 02/05/2014
Age : 48
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
kenneth
kenneth
Modérateur

Messages : 749
Date d'inscription : 13/01/2013
Age : 52
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 : 223
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 : 254
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
kenneth
kenneth
Modérateur

Messages : 749
Date d'inscription : 13/01/2013
Age : 52
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 : 254
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 : 181
Date d'inscription : 02/05/2014
Age : 48
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 : 223
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 : 105
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 : 181
Date d'inscription : 02/05/2014
Age : 48
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 : 223
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 : 181
Date d'inscription : 02/05/2014
Age : 48
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