Advertisement
Guest User

Untitled

a guest
Dec 18th, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 3.06 KB | None | 0 0
  1. @   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
  2. @__________________________________________________________________________________________
  3.  
  4.     .asciz  "PRG"
  5. DEBUT:  push    {r0-r12,lr}
  6.  
  7.     @bl CLS
  8.  
  9.     mov r0,#0xc0000010
  10.     ldr r0,[r0]
  11.  
  12.     mov r1,#-128    @ démarre avec "Line (-128,0)-(512,0)"
  13.     mov r2,#0
  14.     mov r3,#512
  15.     mov r4,#0
  16.     mov r11,#0      @ pour l'instant en noir
  17.    
  18.     mov r5,#1024    @ tout dernier tracé sera "LINE (895,0)-(-1534,1023)
  19. dessin: bl  LINE
  20.     add r1,r1,#1
  21.     sub r3,r3,#2
  22.     add r4,r4,#1
  23.     add r11,r3,r5,lsl#3
  24.     subs    r5,r5,#1
  25.     bne dessin
  26.  
  27.     bl  PAUSE
  28.  
  29.     pop {r0-r12,pc}
  30. @__________________________________________________________________________________________
  31.  
  32. LINE:   tst r1,r3       @ les 2 abscisses sont négatives ?.. ("tst r1,r3" opère un "r1 AND r3" )     
  33.     tstpl   r2,r4       @ ou les 2 ordonnées sont négatives ?..
  34.     bxmi    lr      @ Alors retour!
  35.     push    {r0-r12,lr}
  36.     cmp r1,#320     @ les 2 abscisses >=320 ?..
  37.     cmpge   r3,#320
  38.     popge   {r0-r12,pc} @ Alors retour!
  39.     mov r7,#240
  40.     cmp r2,r7       @ les 2 ordonnées >=240 ?..
  41.     cmpge   r4,r7
  42.     popge   {r0-r12,pc} @ Alors retour!
  43.     mov r8,#1
  44.     subs    r5,r3,r1
  45.     rsbmi   r5,r5,#0    @ il faut que le tracé aille de gauche à droite!
  46.     movmi   r12,r1      @ alors, on va parfois devoir permuter les 2 coordonnées
  47.     movmi   r1,r3
  48.     movmi   r3,r12
  49.     movmi   r12,r2
  50.     movmi   r2,r4
  51.     movmi   r4,r12
  52.     subs    r6,r4,r2
  53.     rsbpl   r6,r6,#0
  54.     movmi   r8,#-1      @ r8=1 si tracé descendant, sinon =-1
  55.     movmi   r7,r8       @ r7=valeur d'ordonnée qui arrive hors-écran (=240 si tracé descendant , sinon =-1)
  56.     add r9,r6,r5
  57.     b   PXLout
  58. nodraw: add r10,r9,r9
  59.     cmp r10,r6
  60.     addge   r9,r9,r6
  61.     addge   r1,r1,#1
  62.     cmp r10,r5
  63.     addle   r9,r9,r5
  64.     addle   r2,r2,r8
  65. PXLout: orrs    r12,r1,r2   @ tant que l'abscisse et/ou l'ordonnée < 0
  66.     bmi nodraw      @ on ne trace rien!
  67.     mov r12,#640    @ pré-calcul de l'adresse-écran. (on n'aura plus qu'à y ajouter l'abscisse*2)
  68.     mla r0,r2,r12,r0    @ r12=640 ou -640 (selon la direction du tracé).
  69.     mul r12,r8,r12  @ afin d'optimiser, on va travailler directement avec cette adresse-écran ;)
  70. draw:   cmp r1,#320     @ (ainsi, adresse-écran+/-640 dès que l'ordonnée bouge) abscisse >=320 ?
  71.     cmpcc   r2,r7       @ ou ordonnée qui part hors-écran ?
  72.     popcs   {r0-r12,pc} @ Alors c'est terminé!
  73.     cmp r2,#240     @ bien sûr, si l'ordonnée est encore hors-écran...(parfois lors d'1 tracé de bas en haut)
  74.     addlt   r10,r0,r1,lsl#1 @ il faut s'abstenir de tracer...
  75.     strlth  r11,[r10]   @ le moindre pixel.
  76.     cmp r1,r3
  77.     cmpeq   r2,r4
  78.     popeq   {r0-r12,pc}
  79.     add r10,r9,r9
  80.     cmp r10,r6
  81.     addge   r9,r9,r6
  82.     addge   r1,r1,#1
  83.     cmp r10,r5
  84.     addle   r9,r9,r5
  85.     addle   r2,r2,r8
  86.     addle   r0,r0,r12
  87.     b   draw
  88. @__________________________________________________________________________________________
  89.  
  90. PAUSE:  push    {r0,lr}
  91.     mov r0,#0x8000000
  92. L0098:  subs    r0,r0,#1
  93.     bne L0098
  94.     pop {r0,pc}
  95. @__________________________________________________________________________________________
  96.  
  97. CLS:    push    {r0-r2,lr}
  98.     mov r0,#0xc0000010
  99.     ldr r0,[r0]
  100.     mov r1,#76800
  101.     mov r2,#15
  102. L00b8:  strh    r2,[r0],#2
  103.     subs    r1,r1,#1
  104.     bne L00b8
  105.     pop {r0-r2,pc}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement