Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @ arm-linux-gnueabihf-as -aln -mcpu=arm926ej-s -o temp.o draw4.s && arm-linux-gnueabihf-objcopy -O binary temp.o draw4.prg.tns && rm temp.o
- @__________________________________________________________________________________________
- .asciz "PRG"
- DEBUT: push {r0-r12,lr}
- @bl CLS
- mov r0,#0xc0000010
- ldr r0,[r0]
- mov r1,#-128 @ démarre avec "Line (-128,0)-(512,0)"
- mov r2,#0
- mov r3,#512
- mov r4,#0
- mov r11,#0 @ pour l'instant en noir
- mov r5,#1024 @ tout dernier tracé sera "LINE (895,0)-(-1534,1023)
- dessin: bl LINE
- add r1,r1,#1
- sub r3,r3,#2
- add r4,r4,#1
- add r11,r3,r5,lsl#3
- subs r5,r5,#1
- bne dessin
- bl PAUSE
- pop {r0-r12,pc}
- @__________________________________________________________________________________________
- LINE: tst r1,r3 @ les 2 abscisses sont négatives ?.. ("tst r1,r3" opère un "r1 AND r3" )
- tstpl r2,r4 @ ou les 2 ordonnées sont négatives ?..
- bxmi lr @ Alors retour!
- push {r0-r12,lr}
- cmp r1,#320 @ les 2 abscisses >=320 ?..
- cmpge r3,#320
- popge {r0-r12,pc} @ Alors retour!
- mov r7,#240
- cmp r2,r7 @ les 2 ordonnées >=240 ?..
- cmpge r4,r7
- popge {r0-r12,pc} @ Alors retour!
- mov r8,#1
- subs r5,r3,r1
- rsbmi r5,r5,#0 @ il faut que le tracé aille de gauche à droite!
- movmi r12,r1 @ alors, on va parfois devoir permuter les 2 coordonnées
- movmi r1,r3
- movmi r3,r12
- movmi r12,r2
- movmi r2,r4
- movmi r4,r12
- subs r6,r4,r2
- rsbpl r6,r6,#0
- movmi r8,#-1 @ r8=1 si tracé descendant, sinon =-1
- movmi r7,r8 @ r7=valeur d'ordonnée qui arrive hors-écran (=240 si tracé descendant , sinon =-1)
- add r9,r6,r5
- b PXLout
- nodraw: add r10,r9,r9
- cmp r10,r6
- addge r9,r9,r6
- addge r1,r1,#1
- cmp r10,r5
- addle r9,r9,r5
- addle r2,r2,r8
- PXLout: orrs r12,r1,r2 @ tant que l'abscisse et/ou l'ordonnée < 0
- bmi nodraw @ on ne trace rien!
- mov r12,#640 @ pré-calcul de l'adresse-écran. (on n'aura plus qu'à y ajouter l'abscisse*2)
- mla r0,r2,r12,r0 @ r12=640 ou -640 (selon la direction du tracé).
- mul r12,r8,r12 @ afin d'optimiser, on va travailler directement avec cette adresse-écran ;)
- draw: cmp r1,#320 @ (ainsi, adresse-écran+/-640 dès que l'ordonnée bouge) abscisse >=320 ?
- cmpcc r2,r7 @ ou ordonnée qui part hors-écran ?
- popcs {r0-r12,pc} @ Alors c'est terminé!
- cmp r2,#240 @ bien sûr, si l'ordonnée est encore hors-écran...(parfois lors d'1 tracé de bas en haut)
- addlt r10,r0,r1,lsl#1 @ il faut s'abstenir de tracer...
- strlth r11,[r10] @ le moindre pixel.
- cmp r1,r3
- cmpeq r2,r4
- popeq {r0-r12,pc}
- add r10,r9,r9
- cmp r10,r6
- addge r9,r9,r6
- addge r1,r1,#1
- cmp r10,r5
- addle r9,r9,r5
- addle r2,r2,r8
- addle r0,r0,r12
- b draw
- @__________________________________________________________________________________________
- PAUSE: push {r0,lr}
- mov r0,#0x8000000
- L0098: subs r0,r0,#1
- bne L0098
- pop {r0,pc}
- @__________________________________________________________________________________________
- CLS: push {r0-r2,lr}
- mov r0,#0xc0000010
- ldr r0,[r0]
- mov r1,#76800
- mov r2,#15
- L00b8: strh r2,[r0],#2
- subs r1,r1,#1
- bne L00b8
- pop {r0-r2,pc}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement