6677

DCPU16 Text Editor

Apr 14th, 2012
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;6677's Funky Text Editor
  2.  
  3. ;clear function
  4. :clear
  5. SET [0x8000+A], 0
  6. ADD A, 1
  7. IFG A, 0x200
  8.     SET PC, POP
  9. SET PC, clear
  10.  
  11. :textedit
  12. SET PUSH, A
  13. SET PUSH, B
  14.  
  15. ;Registers A and B can come out to play today, YAY.
  16. ;Done for embedding purposes (such as os'es)
  17.  
  18. ;Clear screen first (replace clear with OS clear function if possible)
  19. JSR clear
  20.  
  21. SET [0x8000], 0xF0DF
  22. SET B, 0
  23. :textedit_loop
  24. SET A, [0x9000]
  25.  
  26. ;check key pressed
  27. IFE A, 0x0
  28.     SET PC, textedit_loop
  29. IFE A, 0x1B
  30.     ;Escape key pressed, quit loop
  31.     SET PC, textedit_exit
  32. IFE A, 0xA
  33.     ;Enter key pressed, move down a row
  34.     SET PC, textedit_newline
  35. IFE A, 8
  36.     ;Backspace pressed
  37.     SET PC, textedit_backspace
  38.  
  39. IFE A, 1
  40.     SET PC, textedit_left
  41. IFE A, 2
  42.     SET PC, textedit_right
  43. IFE A, 3
  44.     SET PC, textedit_up
  45. IFE A, 4
  46.     SET PC, textedit_down
  47.  
  48. ADD A, 0xF000
  49. SET [0x8000 + B], A
  50. SET [0x9000], 0x0
  51. ADD B, 1
  52. SET [0x8000 + B], 0xF0DF
  53. SET PC, textedit_loop
  54.  
  55. :textedit_newline
  56. SET [0x8000 + B], 0x0
  57. SHR B, 5
  58. SHL B, 5
  59. ADD B, 32
  60. SET [0x8000 + B], 0xF0DF
  61. SET [0x9000], 0x0
  62. SET PC, textedit_loop
  63.  
  64. :textedit_backspace
  65. SET [0x8000 + B], 0x0
  66. SUB B, 1
  67. SET [0x8000 + B], 0xF0DF
  68. SET [0x9000], 0x0
  69. SET PC, textedit_loop
  70.  
  71. ;implement in a future update maybe
  72. :textedit_down
  73. SET [0x9000], 0x0
  74. SET PC, textedit_loop
  75. :textedit_up
  76. SET [0x9000], 0x0
  77. SET PC, textedit_loop
  78. :textedit_left
  79. SET [0x9000], 0x0
  80. SET PC, textedit_loop
  81. :textedit_right
  82. SET [0x9000], 0x0
  83. SET PC, textedit_loop
  84.  
  85. :textedit_exit
  86. SET POP, B
  87. SET POP, A
  88. ;The registers had to go home ):
  89. :textedit_end
  90. ;point to allow os'es to skip this program
Advertisement
Add Comment
Please, Sign In to add comment