π
<-
Chat plein-écran
[^]

Problème avec une routine pour tracer des lignes

Assembleur, Axe, C/C++, ICE...

Problème avec une routine pour tracer des lignes

Message non lude Dark coco » 15 Juin 2017, 20:44

Bonsoir, aujourd'hui j'ai eu un petit problème avec une routine qui permet de tracer des lignes que MMBC_Chris a eu la gentillesse de retranscrire en ti basic afin que moi même je la fasse en asm. Bon vous vous douté que si elle fonctionnait j'aurais pas écris ce message :) .

Bon voici, le code en ti basic (il fonctionne très bien):
Code: Tout sélectionner
EffDess
0→Xmin
0→Ymin
164→Ymax
264→Xmax
1→A
1→B
50→C
10→D
AxesNAff
Pt-Aff(A,B
Pt-Aff(C,D
abs(C-A)→E
­abs(D-B)→F
If A<C:1→X
If A>C:­1→X
If B<D:1→Y
If B>D:­1→Y
E+F→G
0→I
1→H
While H
Pt-Aff(A,B
If A=C et B=D
Goto E
2G→I
If I≥F:Then
G+F→G
A+X→A
End
If I≤E:Then
G+E→G
B+Y→B
End
End
Lbl E



Voici celui en asm:
Code: Tout sélectionner
;routine aff line
;aff point 1 et 2 pour test

   ld bc,(X1)
   ld a,(Y1)
   call Routine_aff_point
   ld (hl),$FF
   ld bc,(X1)
   ld a,(Y1)
   call Routine_aff_point
   ld (hl),$FF
   
;calcules des deltas   
   
   ld hl,(X2)         ;delta X
   ld bc,(X1)
   or a,a
   sbc hl,bc
   jp p,$+11         ;4+1+1+2+2+1   
      ex de,hl
      or a,a
      sbc hl,hl
      sbc hl,de
      inc hl
   ld (Delta_X),hl
   ld a,(Y1)         ;delta Y
   ld c,a
   ld a,(Y2)
   sub a,c
   jp m,$+6         ;4+1+1
      xor a,%11111111
      inc a
   ld (Delta_Y),a
   
;test sur la nature de la ligne

   ld hl,(X1)         ;vars x
   ld bc,(X1)
   or a,a
   sbc hl,bc
   jp p,$+8         ;4+1+2+1
      or a,a
      sbc hl,hl
      dec hl         ;-1 dans hl
      jr $+6         ;2+1+2+1
         or a,a
         sbc hl,hl
         inc hl      ;1 dans hl
   ld (Vars_X),hl      ;hl dans Vars_X
   
   ld a,(Y1)         ;vars Y
   ld c,a
   ld a,(Y2)
   sub a,c
   jp p,$+8         ;4+1+1+2
      xor a,a
      dec a         ;-1 dans a
      jr $+4         ;2+1+1
         xor a,a
         inc a      ;1 dans a
   ld (Vars_Y),a
   
;calcule de la variable G

   ld hl,(Delta_X)
   ld bc,(Delta_Y)
   add hl,bc         ;hl contient G
   
Boucle_aff_line:
   push hl            ;save hl soit G
   ld bc,(X1)
   ld a,(Y1)
   call Routine_aff_point      ;aff le point
   ld (hl),28         ;couleur du point
   
   ld a,(Y1)         ;teste si on reste ou non dans la boucle
   ld c,a
   ld a,(Y2)
   jr nz,$+16         ;2+4+5+1+2+2
      ld hl,(X1)
      ld bc,(X2)
      or a,a
      sbc hl,bc
      jr z,Fin_Boucle_aff_line
   pop hl
   push hl            ;save hl soit G
   add hl,hl         ;calcule de la variable I soit 2G
   pop de            ;G dans de
   push hl            ;save hl soit I
   
   ld bc,0            ;test si I=>F
   ld a,(Delta_Y)
   ld c,a
   sbc hl,bc
   jp m,$+21         ;4+1+1+1+4+5+1+4
      ex de,hl
      add hl,bc      ;G+F->G
      ex de,hl
      ld hl,(X1)
      ld bc,(Vars_X)
      add hl,bc      ;A+X->A
      ld (X1),hl
   pop bc            ;test si E=>I
   ld hl,(Delta_X)
   or a,a
   sbc hl,bc      
   jp m,$+26         ;4+1+5+1+1+4+1+4+1+4
      ex de,hl
      ld bc,(Delta_X)
      add hl,bc      ;G+E->G
      ex de,hl
      ld a,(Vars_Y)   
      ld c,a
      ld a,(Y1)
      add a,c         ;B+Y->B
      ld (Y1),a
   ex de,hl
   jr Boucle_aff_line
   
   
Fin_Boucle_aff_line:
   call _getkey
   
   ret
   
Routine_aff_point:         ;argument X=bc [1,320] et Y=a [1,240]
   ld hl,$D40000
   ld de,320
Boucle_aff_point:
   add hl,de
   dec a
   jr nz,Boucle_aff_point
   or a,a
   sbc hl,de
   add hl,bc
   dec hl
   ret


et enfin voici un scrn de ce qui se passe:

Image

Si vous avez une idée je suis à l'écoute. Car ça fais un petit moment que je suis dessus et le problème est assez compliquer :? .

Merci beaucoup
(21:48:26) Hamza.S: Dark_coco : tu a écris 2 phrases sans faute
(19:15:10) Hayleia: ah ça je confirme que t'as appris à écrire à l'école de baptiste_leprovost :troll:
Avatar de l’utilisateur
Dark cocoProgrammeur
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 65.8%
 
Messages: 95
Inscription: 15 Jan 2017, 14:39
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: dut gte

Re: Problème avec une routine pour tracer des lignes

Message non lude clifward » 15 Juin 2017, 20:49

bah ça a tracé une belle ligne rouge, quel est le problème ? :troll:
Image
Avatar de l’utilisateur
clifwardMembre UPECS
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 26.4%
 
Messages: 593
Images: 6
Inscription: 20 Sep 2015, 17:50
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: CentraleSupelec

Re: Problème avec une routine pour tracer des lignes

Message non lude MMBC » 15 Juin 2017, 20:50

Le problème c'est ton intervention :troll:
(Je déconneuh)
ImageImage
Image
Avatar de l’utilisateur
MMBCModo
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 66.7%
 
Messages: 107
Images: 1
Inscription: 16 Mai 2017, 19:20
Genre: Femme
Calculatrice(s):
MyCalcs profile
Classe: Ex prof
YouTube: Eyone
Facebook: Emma Cadet

Re: Problème avec une routine pour tracer des lignes

Message non lude Dark coco » 15 Juin 2017, 20:51

C'est que je ne voulais pas une droites qui trace l'axe des ordonnées :troll:
(21:48:26) Hamza.S: Dark_coco : tu a écris 2 phrases sans faute
(19:15:10) Hayleia: ah ça je confirme que t'as appris à écrire à l'école de baptiste_leprovost :troll:
Avatar de l’utilisateur
Dark cocoProgrammeur
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 65.8%
 
Messages: 95
Inscription: 15 Jan 2017, 14:39
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: dut gte

Re: Problème avec une routine pour tracer des lignes

Message non lude MMBC » 15 Juin 2017, 20:58

Pour ceux qui auraient pas compris le problème, il y a certes une magnifique ligne...
Mais pas celle espérée... D:
ImageImage
Image
Avatar de l’utilisateur
MMBCModo
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 66.7%
 
Messages: 107
Images: 1
Inscription: 16 Mai 2017, 19:20
Genre: Femme
Calculatrice(s):
MyCalcs profile
Classe: Ex prof
YouTube: Eyone
Facebook: Emma Cadet

Re: Problème avec une routine pour tracer des lignes [Résolu

Message non lude MMBC » 03 Aoû 2017, 13:37

Bon, j'ai tout réécris depuis le début :P

Et ça marche :D

Voilà le code avec un example d'utilisation ;)

Code: Tout sélectionner
.nolist
#include "ti84pce.inc"
.list

   .assume ADL=1
   .org UserMem-2
   .db tExtTok,tAsm84CeCmp
   
   call _ClrLCDFull
   ld a, $27
   ld ($E30018), a
   
   ld hl, $0
   ld (mpLCDPalette), hl
   ld hl, $F5A4
   ld (mpLCDPalette+2), hl
   
   ld hl, 11 ; x0
   push hl
   ld hl, 51 ; x1
   push hl
   ld ix, 0
   add ix, sp
   ld a, 39 ; y0
   ld (ix+5), a
   ld a, 34 ; y1
   ld (ix+2), a
   ld a, 1 ; couleur
   call __Line_NoClip_ASM
   pop hl
   pop hl
   
   ld a, $2D
   ld ($E30018), a
   
   ret
   
__Line_NoClip_ASM:
   ; arg0: y1 (1byte) x1 (2bytes)
   ; arg2: y2 (1byte) x2 (2bytes)
   ; a = color
   ld (color), a
   ld ix, 3
   add ix, sp
   or a
   sbc hl, hl
   push hl
   pop bc
   ld l, (ix+0)
   ld h, (ix+1)
   ld c, (ix+3)
   ld b, (ix+4)
   ld a, c
   ld (x), a
   ld a, b
   ld (x+1), a
   ld a, 1
   sbc hl, bc
   jp p, +_
   sub a, 2
_:   ld (sx), a
   ex de, hl
   call _abs24de
   push hl
   or a
   sbc hl, hl
   push hl
   pop bc
   ld l, (ix+2)
   ld c, (ix+5)
   ld a, c
   ld (y), a
   ld a, 1
   sbc hl, bc
   jp p, +_
   sub a, 2
_:   ld (sy), a
   ex de, hl
   call _abs24de
   ex de, hl
   or a
   sbc hl, hl
   sbc hl, de
   pop de
   push de
   add hl, de
   ld (err), hl
   or a
   sbc hl, de
   push hl
_:
   ld hl, (x)
   ex.s de, hl
   ld a, (y)
   ld l, a
   ld h, 160
   mlt hl
   add hl, hl
   add hl, de
   ld bc, $D40000
   add hl, bc
color=$+1
   ld (hl), a
   
   
   ld de, (x)
   ld hl, (ix)
   or a, a
   sbc hl, de
   jp z, +_
   
   ld hl, (err)
   add hl, hl
   ld (e2), hl
   
   pop bc
   push bc
   or a, a
   sbc hl, bc
   jp m, e2dx
   ld hl, (err)
   add hl, bc
   ld (err), hl
   ld hl, (x)
   ex.s de, hl
   ex de, hl
   ld a, (sx)
   add a, 2
   ld e, a
   ld d, 0
   dec de
   dec de
   add hl, de
   ld a, l
   ld (x), a
   ld a, h
   ld (x+1), a

e2dx:
   pop bc
   pop de
   push de
   push bc
   ld hl, (e2)
   sbc hl, de
   jp p, eol
   ld hl, (err)
   add hl, de
   ld (err), hl
   ld a, (y)
   ld h, a
   ld a, (sy)
   add a, h
   ld (y), a
   
eol:
   jp -_
_:
   pop bc
   pop bc
   ret
sx:
   nop
sy:
   nop
x:
   nop
   nop
y:
   nop
err:
   nop
   nop
   nop
e2:
   nop
   nop
   nop

   nop
   nop
   nop

_abs24de:
   sbc hl, hl
   adc hl, de
   ret p
   or a, a
   sbc hl, hl
   sbc hl,de
   ret
Dernière édition par MMBC le 03 Aoû 2017, 13:42, édité 1 fois.
ImageImage
Image
Avatar de l’utilisateur
MMBCModo
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 66.7%
 
Messages: 107
Images: 1
Inscription: 16 Mai 2017, 19:20
Genre: Femme
Calculatrice(s):
MyCalcs profile
Classe: Ex prof
YouTube: Eyone
Facebook: Emma Cadet

Re: Problème avec une routine pour tracer des lignes

Message non lude PT_ » 03 Aoû 2017, 13:39

Optimizations by: PT_ :troll:

Code: Tout sélectionner
   add hl, hl
   add hl, de
   ld bc, $D40000
   add hl, bc
color = $+1
   ld (hl), 0

Even more opts :D
Age of CEmpires I - In progress!
40%
Avatar de l’utilisateur
PT_Programmeur
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Prochain niv.: 57.2%
 
Messages: 259
Inscription: 09 Fév 2016, 23:06
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Problème avec une routine pour tracer des lignes

Message non lude grosged » 03 Aoû 2017, 14:19

Si cela peut vous être utile, j'avais , l'an dernier, commencé à optimiser une routine de tracé de ligne :
voir viewtopic.php?f=12&t=18225#p199676

(mais ça ne gérait qu'un cas de figure)
Avatar de l’utilisateur
grosgedVIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 30.2%
 
Messages: 770
Images: 75
Inscription: 14 Sep 2011, 12:29
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: Problème avec une routine pour tracer des lignes

Message non lude MMBC » 03 Aoû 2017, 14:20

grosged j'avais vu, mais moi je voulais une qui gère tout les cas :P
ImageImage
Image
Avatar de l’utilisateur
MMBCModo
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 66.7%
 
Messages: 107
Images: 1
Inscription: 16 Mai 2017, 19:20
Genre: Femme
Calculatrice(s):
MyCalcs profile
Classe: Ex prof
YouTube: Eyone
Facebook: Emma Cadet


Retourner vers Langages alternatifs

Qui est en ligne

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

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1333 utilisateurs:
>1311 invités
>18 membres
>4 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)