Advertisement
Siapran

DCPU-16 test

Apr 26th, 2012
364
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.58 KB | None | 0 0
  1. ;Test d'interface utilisateur
  2. ;Siapran, le 25/04/2012
  3.  
  4. set a, 0x8000 ;initialisation curseur
  5. :loop ;boucle principale
  6.  
  7. set b, [0x9000] ;détection touche
  8. ife a, 0x8200 ;si le curseur sort de l'écran
  9. jsr scroll ;monter l'écran d'une ligne
  10. set [a], 0xf0df ;dessin du curseur clignotant
  11. ife b, 0xa ;si touche = entrée
  12. jsr jump_line ;appeller jump_line
  13. ife b, 8 ;si touche = backspace
  14. set pc, backspace ;alors goto :backspace
  15. ife b, 0 ;si b=0 (pas de touche)
  16. set pc, loop ;alors on reccommence
  17.  
  18. bor b, 0xf000 ;ajout de la couleur (bor évite l'overflow)
  19. set [a], b ;écriture du caractère
  20. set [0x9000], 0 ;réinitialiser le buffer clavier
  21. add a, 1 ;incrémenter position curseur
  22. set pc, loop ;recommencer
  23.  
  24. ;la fonction :backspace s'éxecute de façon très sale ¬¬
  25. ;il y a surement un moyen de faire mieux avec la pile mais bon flemme
  26.  
  27. :backspace ;fonction :backspace
  28. ife a, 0x8000 ;si a=0 (si on est au début)
  29. set pc, nobackspace ;alors pas de backspace (goto :nobackspace)
  30. set [a], 0 ;effacement du curseur
  31. sub a, 1 ;décrémenter position curseur
  32. set push, b
  33. set b, a
  34. mod b, 32
  35. ife b, 0
  36. set pc, back2line
  37. set b, pop
  38. :nobackspace
  39. set [0x9000], 0 ;réinitialiser le buffer clavier
  40. set pc, loop ;recommencer
  41.  
  42. :back2line
  43. set push, c
  44. set c, 1
  45. set b, a
  46. :back2line_loop
  47. set [b], 0
  48. sub b, 1
  49. add c, 1
  50. ifn [b], 0
  51. set c, 32
  52. ifn c, 32
  53. set pc, back2line_loop
  54. set c, pop
  55. set pc, pop
  56.  
  57. :scroll ;scroll(a)
  58. set a, 0x8000 ;a=début
  59. :scroll_loop ;boucle
  60. set [a], [0x20+a] ;remplacement/décalage
  61. add a, 1 ;incrémentation
  62. ifn a, 0x8200 ;si a/=fin
  63. set pc, scroll_loop ;recommencer
  64. set a, 0x81e0 ;mettre le curseur à la ligne
  65. set pc, pop ;retour(a)
  66.  
  67.  
  68. :jump_line ;jump_line(a)
  69. set [a], 0 ;effacer curseur
  70. div a, 32 ;chopper nb ligne
  71. add a, 1 ;ligne suivante
  72. mul a, 32 ;mettre cuseur à ligne
  73. set [0x9000], 0 ;réinitialiser le buffer clavier
  74. set b, 0
  75. set pc, pop ;retour(a, b
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement