Derniers sujets
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
Statistiques
Nous avons 242 membres enregistrésL'utilisateur enregistré le plus récent est AIRBUS44
Nos membres ont posté un total de 8922 messages dans 811 sujets
optimisation scrolling horizontal
5 participants
Forum Oric :: Forums :: Forum Public :: Assembleur
Page 1 sur 1
optimisation scrolling horizontal
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) ?
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
goyo- Messages : 199
Date d'inscription : 02/05/2014
Age : 52
Localisation : Massy
Re: optimisation scrolling horizontal
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- Messages : 271
Date d'inscription : 09/02/2014
Re: optimisation scrolling horizontal
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- Messages : 199
Date d'inscription : 02/05/2014
Age : 52
Localisation : Massy
Re: optimisation scrolling horizontal
J ai fait ce bout de code qui tourne sans trop de saccades
- Fichiers joints
kenneth- Modérateur
- Messages : 879
Date d'inscription : 13/01/2013
Age : 56
Localisation : 63
Re: optimisation scrolling horizontal
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:Si quelqu'un peut m'indiquer si je peux encore optimiser ce scrolling (à part dérouler toutes les lignes de l'écran) ?
- 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- Messages : 248
Date d'inscription : 06/01/2013
Re: optimisation scrolling horizontal
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:
2 * 200 => 400 cycles gagnés au total.
- Code:
DEX
BEQ $10EF
JMP $100E
- Code:
DEX
BNE $100E
2 * 200 => 400 cycles gagnés au total.
assinie- Messages : 271
Date d'inscription : 09/02/2014
Re: optimisation scrolling horizontal
En fait le JMP remplace le saut relatif parce il me semble que la distance de saut est trop grande.
kenneth- Modérateur
- Messages : 879
Date d'inscription : 13/01/2013
Age : 56
Localisation : 63
Re: optimisation scrolling horizontal
Oups, je n'ai pas vérifié la distance
assinie- Messages : 271
Date d'inscription : 09/02/2014
Re: optimisation scrolling horizontal
Dbug a écrit: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:Si quelqu'un peut m'indiquer si je peux encore optimiser ce scrolling (à part dérouler toutes les lignes de l'écran) ?
- 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
goyo- Messages : 199
Date d'inscription : 02/05/2014
Age : 52
Localisation : Massy
Re: optimisation scrolling horizontal
Techniquement on peut faire mieux, en décrémentant:
- Code:
ldx width
(...)
dex
bmi saut
Dbug- Messages : 248
Date d'inscription : 06/01/2013
Re: optimisation scrolling horizontal
Dbug a écrit:Techniquement on peut faire mieux, en décrémentant:Comme ca on évite 40 instructions "cpx width", mais bon, c'est un détail
- Code:
ldx width
(...)
dex
bmi saut
I think this will not work 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 .
iss- Messages : 112
Date d'inscription : 30/10/2014
Re: optimisation scrolling horizontal
Dbug a écrit:Techniquement on peut faire mieux, en décrémentant:Comme ca on évite 40 instructions "cpx width", mais bon, c'est un détail
- Code:
ldx width
(...)
dex
bmi saut
Merci, je vais essayer
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- Messages : 199
Date d'inscription : 02/05/2014
Age : 52
Localisation : Massy
Re: optimisation scrolling horizontal
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.
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- Messages : 248
Date d'inscription : 06/01/2013
Re: optimisation scrolling horizontal
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- Messages : 199
Date d'inscription : 02/05/2014
Age : 52
Localisation : Massy
Sujets similaires
» Scrolling en mode HIRES
» scrolling en mode Text
» problème d'affichage écriture dans adresse mémoire écran, routine de scrolling
» scrolling en mode Text
» problème d'affichage écriture dans adresse mémoire écran, routine de scrolling
Forum Oric :: Forums :: Forum Public :: Assembleur
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|
Dim 31 Mar 2024 - 14:35 par kenneth
» Bla Bla général du Jury
Jeu 21 Mar 2024 - 8:51 par Dom50
» carte mère Oric (re)tracée
Mar 5 Mar 2024 - 18:54 par kenneth
» Meurtre à Grande Vitesse
Dim 25 Fév 2024 - 5:09 par Iurius
» ORIC-1 sur LE BON COIN
Ven 23 Fév 2024 - 23:01 par Mcar
» ORIC ATMOS sur LE BON COIN
Dim 4 Fév 2024 - 12:06 par kiwilevrai
» Problème d'affichage des couleurs avec un Oric Atmos
Sam 27 Jan 2024 - 1:26 par pierbail
» Bienvenue dans le Forum des Oriciens
Mar 9 Jan 2024 - 12:33 par Dom50
» Rencontre avec Laurant Weill, co-fondateur de Loriciel, et mon garçon de 12 ans
Ven 29 Déc 2023 - 14:13 par Arcade-des-Monts
» Bonnes fêtes
Mar 26 Déc 2023 - 10:21 par Dom50
» Murders in Venice / Meutres à Venise
Sam 18 Nov 2023 - 22:44 par retroric
» Un clavier PS/2 pour tester un ORIC
Dim 27 Aoû 2023 - 9:49 par Voyageur
» Disquette 3" Sedoric
Mar 1 Aoû 2023 - 14:22 par AtomeX
» faire un 6502 avec des phototransistor
Dim 16 Juil 2023 - 17:26 par Voyageur
» Oricutron linux et DSK
Jeu 29 Juin 2023 - 18:34 par Voyageur