Guest User

sand timing

a guest
Aug 22nd, 2013
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.16 KB | None | 0 0
  1. HEX
  2.  
  3. *****************
  4. *** IOX setup ***
  5. *****************
  6. Z axis control
  7. 1 Z+init, 2 Z+go , 4 Z-init , 8 Z-go
  8. --
  9. 16 -- , 32 -- , 64 -- , 128 --
  10. Tools
  11. 256 sand , 512 -- , 1024 break , 2048 --
  12. --
  13. 4096 -- , 8192 -- , 16384 -- , 32768 --
  14.  
  15.  
  16. ***********************************************************
  17. *** Actual code, HEX, movement-related low-level stuff ***
  18. ***********************************************************
  19.  
  20. HEX
  21.  
  22. \\ Holds the current arm length
  23. VARIABLE ZLENGTH
  24.  
  25. \\ Initialize with the correct value
  26. <ZLENGTH> ZLENGTH !
  27.  
  28. \\ Extend old: 1BCA new: 1ED6
  29. : Z+ ( -- )
  30. 2 IOX! 12 TICKS \\ Extend
  31. 1 IOX! TICK TICK \\ Replace block
  32. 0 IOX! ;
  33.  
  34. \\ Retract old: 1BE2 new: 1EFC
  35. : Z- ( -- )
  36. 4 IOX! TICK TICK \\ Remove block
  37. 8 IOX! 12 TICKS \\ Retract
  38. 0 IOX! ;
  39.  
  40. *******************************************************
  41. *** Actual code, HEX, TOOL-related low-level stuff ***
  42. *******************************************************
  43.  
  44. \\ Deploy and push sand
  45. : SAND ( -- )
  46. 100 IOX! TICK TICK
  47. 200 IOX! TICK TICK TICK TICK
  48. 0 IOX! ;
  49.  
  50. \\ Break a block
  51. : BREAK ( -- )
  52. 400 IOX! TICK TICK
  53. 0 IOX! ;
  54.  
  55. **********************************************************
  56. *** Actual code, HEX, TOOL-related higher-level stuff ***
  57. **********************************************************
  58.  
  59. \\ Collect the tree at current position
  60. : HARVEST ( -- )
  61. ZLENGTH @
  62. DUP 0 DO SAND 6 TICKS LOOP
  63. TICK TICK
  64. 400 SWAP \\ Timing array
  65. 0 DO BREAK DUP C@ TICKS 1+ LOOP
  66. DROP ;
  67.  
  68. *******************************************
  69. *** Actual code, HEX, rest of the words ***
  70. *******************************************
  71.  
  72. : DRAW ( -- )
  73. PAGE
  74. 400 3 1
  75. ZLENGTH @ 1 DO
  76. 2DUP AT-XY 1+
  77. ROT
  78. DUP C@ . 1+
  79. -ROT
  80. LOOP
  81. 1+ AT-XY
  82. DROP
  83. ZLENGTH @ .
  84. CR
  85. ;
  86.  
  87. : UPDOWN ( KEY X Y - KEY X newY )
  88. 2 PICK 80 = IF \\ ↑ : move cursor up
  89. DUP 1 > IF \\ Boundary check
  90. 1- 2DUP AT-XY
  91. THEN
  92. THEN
  93. 2 PICK 81 = IF \\ ↓ : more curdor down
  94. DUP ZLENGTH @ 1+ < IF \\ Boundary check
  95. 1+ 2DUP AT-XY
  96. THEN
  97. THEN ;
  98.  
  99. \\ Decrease/increase value based on KEY + enforce limits
  100. : V+- ( VAL KEY -- new_VAL )
  101. 82 = IF \\ ← : decrease
  102. DUP 2 > IF \\ Limit
  103. 1- THEN
  104. ELSE \\ → : increase
  105. DUP F < IF \\ Limit
  106. 1+ THEN
  107. THEN ;
  108.  
  109. \\ Extend old: 1BCA new: 1ED6
  110. \\ Retract old: 1BE2 new: 1EFC
  111.  
  112. \\ Decrease/increase value of ZLENGTH
  113. : Z+- ( Y KEY -- new_Y )
  114. ZLENGTH @ SWAP \\ Make it ZLENGTH KEY
  115. 82 = IF \\ ← : decrease
  116. DUP 2 > IF \\ Limit
  117. 1- Z- THEN
  118. ELSE
  119. DUP 1F < IF \\ → : increase
  120. 1+ Z+ THEN \\ Limit
  121. THEN
  122. DUP ZLENGTH ! \\ Store new ZLENGTH
  123. NIP 1+ ; \\ Update Y
  124.  
  125. \\ Redraws the end during a ZLENGTH change
  126. : REDRAW ( X Y -- )
  127. 2 - \\ Point Y at the last value in the list
  128. 2DUP AT-XY \\
  129. DUP 3FF + C@ \\ Find it (Y + 3FF)
  130. SPACE SPACE . \\ Print it
  131.  
  132. 1+ \\ Restore empty line
  133. 2DUP AT-XY
  134. SPACE SPACE SPACE
  135.  
  136. 1+ \\ Point Y at the ZLENGTH
  137. 2DUP AT-XY \\ Print the new ZLENGTH value
  138. SPACE SPACE ZLENGTH @ .
  139.  
  140. 1+ AT-XY \\ Restore final empty line
  141. SPACE SPACE SPACE
  142. ;
  143.  
  144.  
  145. : LEFTRIGHT ( KEY X Y -- KEY X Y )
  146. 2 PICK FE AND \\ Unify ← and →
  147. 82 = IF
  148. ZLENGTH @
  149. 2DUP <> IF \\ Ignore if on blank line
  150. OVER > IF \\ Regular change
  151. DUP 3FF + \\ Address of the place
  152. DUP C@ \\ Get current value
  153. 4 PICK V+- \\ Apply +-
  154. DUP ROT C! \\ Store the new value
  155.  
  156. SPACE SPACE . \\ Print the new value
  157. ELSE
  158. 2 PICK Z+- \\ Apply +-
  159. 2DUP REDRAW
  160. THEN
  161. ELSE DROP THEN \\ Drop unused ZLENGTH
  162. 2DUP AT-XY \\ Return cursor
  163. THEN
  164. ;
  165.  
  166. ********************************************
  167. *** Actual code, HEX, Main program loop ***
  168. ********************************************
  169.  
  170. \\ Main program loop
  171. : MAIN
  172. 400 20 8 FILL \\ Initialize all to 8
  173. DRAW
  174. 1 1 2DUP AT-XY
  175. BEGIN
  176. KEY -ROT
  177. 2 PICK D = IF \\ ENTER : run test
  178. HARVEST THEN
  179. UPDOWN \\ choose a value
  180. LEFTRIGHT \\ +/- a value
  181. ROT 20 = UNTIL \\ SPACE : quit
  182. 2DROP
  183. 3 ZLENGTH @ 2 + AT-XY CR
  184. ;
Advertisement
Add Comment
Please, Sign In to add comment