mandel.ssa 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. # Print the Mandelbrot set on the
  2. # terminal line output.
  3. function w $mandel(d %x, d %y) {
  4. @mandel
  5. %cr =d sub %y, d_0.5
  6. %ci =d copy %x
  7. @loop
  8. %i =w phi @mandel 0, @loop1 %i1
  9. %zr =d phi @mandel d_0, @loop1 %zr1
  10. %zi =d phi @mandel d_0, @loop1 %zi1
  11. %i1 =w add 1, %i
  12. %tmp =d mul %zr, %zi
  13. %zr2 =d mul %zr, %zr
  14. %zi2 =d mul %zi, %zi
  15. %zrx =d sub %zr2, %zi2
  16. %zr1 =d add %zrx, %cr
  17. %zix =d add %tmp, %tmp
  18. %zi1 =d add %zix, %ci
  19. %sum =d add %zi2, %zr2
  20. %cmp1 =w cgtd %sum, d_16
  21. jnz %cmp1, @reti, @loop1
  22. @loop1
  23. %cmp2 =w csgtw %i1, 1000
  24. jnz %cmp2, @ret0, @loop
  25. @reti
  26. ret %i1
  27. @ret0
  28. ret 0
  29. }
  30. export
  31. function w $main() {
  32. @main
  33. @loopy
  34. %y =d phi @main d_-1, @loopy1 %y1
  35. @loopx
  36. %x =d phi @loopy d_-1, @loopx1 %x1
  37. %i =w call $mandel(d %x, d %y)
  38. jnz %i, @out, @in
  39. @in
  40. %r0 =w call $putchar(w 42) # '*'
  41. jmp @loopx1
  42. @out
  43. %r1 =w call $putchar(w 32) # ' '
  44. jmp @loopx1
  45. @loopx1
  46. %x1 =d add %x, d_0.032
  47. %cmp1 =w cgtd %x1, d_1
  48. jnz %cmp1, @loopy1, @loopx
  49. @loopy1
  50. %r2 =w call $putchar(w 10) # '\n'
  51. %y1 =d add %y, d_0.032
  52. %cmp2 =w cgtd %y1, d_1
  53. jnz %cmp2, @ret, @loopy
  54. @ret
  55. ret 0
  56. }
  57. # >>> output
  58. # #
  59. # #
  60. # #
  61. # #
  62. # * #
  63. # **** #
  64. # **** #
  65. # *** #
  66. # ***** #
  67. # ********* #
  68. # ************ #
  69. # ***************** #
  70. # **************** #
  71. # *************** #
  72. # **************** #
  73. # **************** #
  74. # ***************** #
  75. # **************** #
  76. # **************** #
  77. # ************** #
  78. # ************* #
  79. # ************ #
  80. # ********* #
  81. # ***** #
  82. # *********** #
  83. # ***************** #
  84. # ********************** #
  85. # * *********************** ** #
  86. # *************************** #
  87. # ***************************** #
  88. # * ******************************* ** #
  89. # ** *********************************** #
  90. # *********************************** * #
  91. # *********************************** #
  92. # ************************************* #
  93. # ************************************* #
  94. # *************************************** #
  95. # *************************************** #
  96. # *************************************** #
  97. # **************************************** #
  98. # * **************************************** #
  99. # ********************************************** **** #
  100. # **************************************************** #
  101. # * ***************************************************** #
  102. # * ***************************************************** #
  103. # ***** **************************************** **** #
  104. # * **************************************** * #
  105. # **************************************** #
  106. # *************************************** #
  107. # **************************************** #
  108. # *************************************** #
  109. # **************************************** #
  110. # ************************************ #
  111. # *********************************** #
  112. # ********************************* #
  113. # ************************************ #
  114. # *** ************* ************** *** #
  115. # *********** ************ ** #
  116. # ******** ******** #
  117. # ** * * #
  118. # #
  119. # #
  120. # #
  121. # <<<