gfxtest3.l 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. (def fb (mmap "/framebuffer"))
  2. (def f (open "/framebuffer"))
  3. (def draw-bg (fn c (do
  4. (let c (+ 1 c))
  5. (let b 1080)
  6. (while b
  7. (do
  8. (let b (- b 1))
  9. (let a 1920)
  10. (while a (do
  11. (let a (- a 1))
  12. (put32 fb (+ a (+ a (* b 3840))) (* 0x1000 (* a (+ c b))))
  13. ))))
  14. )))
  15. (def mario [0000 0000 0000 00f0 00f0 00f0 00f0 00f0 0000 0000 0000 0000
  16. 0000 0000 00f0 00f0 00f0 00f0 00f0 00f0 00f0 00f0 00f0 0000
  17. 0000 0000 0088 0088 0088 00ff 00ff 0088 00ff 0000 0000 0000
  18. 0000 0088 00ff 0088 00ff 00ff 00ff 0088 00ff 00ff 00ff 0000
  19. 0000 0088 00ff 0088 0088 00ff 00ff 00ff 0088 00ff 00ff 00ff
  20. 0000 0088 0088 00ff 00ff 00ff 00ff 0088 0088 0088 0088 0000
  21. 0000 0000 0000 00ff 00ff 00ff 00ff 00ff 00ff 00ff 0000 0000
  22. 0000 0000 00f0 00f0 f000 00f0 00f0 00f0 00f0 0000 0000 0000
  23. 0000 00f0 00f0 00f0 f000 00f0 00f0 f000 00f0 00f0 00f0 0000
  24. 00f0 00f0 00f0 00f0 f000 f000 f000 f000 00f0 00f0 00f0 00f0
  25. ffff ffff 00f0 f000 00ff f000 f000 00ff f000 00f0 ffff ffff
  26. ffff ffff ffff f000 f000 f000 f000 f000 f000 ffff ffff ffff
  27. ffff ffff f000 f000 f000 f000 f000 f000 f000 f000 ffff ffff
  28. 0000 0000 f000 f000 f000 0000 0000 f000 f000 f000 0000 0000
  29. 0000 0088 0088 0088 0000 0000 0000 0000 0088 0088 0088 0000
  30. 0088 0088 0088 0088 0000 0000 0000 0000 0088 0088 0088 0088
  31. ])
  32. (def clear [0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  33. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  34. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  35. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  36. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  37. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  38. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  39. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  40. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  41. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  42. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  43. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  44. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  45. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  46. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  47. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000])
  48. (def sprite mario)
  49. (def sprite-w 12)
  50. (def sprite-h 16)
  51. (def line (fn x y sy (do
  52. (let x1 (* 2 x))
  53. (let x2 (- (* 2 (+ x sprite-w)) 2))
  54. (let ofs (* y 3840))
  55. (let x3 (* sy 24))
  56. (while (lt x1 x2) (do
  57. (let color (get32 sprite x3))
  58. (put32 fb (+ ofs x1) color)
  59. (let x1 (+ x1 2))
  60. (let x3 (+ x3 2))
  61. )) )))
  62. (def blit (fn x y (do
  63. (let y1 y)
  64. (let y2 (+ y sprite-h))
  65. (let sy 0)
  66. (while (lt y1 y2) (do
  67. (line x y1 sy)
  68. (let y1 (+ y1 1))
  69. (let sy (+ sy 1)) ))
  70. )))
  71. (def main (fn (while 1 (do
  72. (draw-bg 0)
  73. (let offset-x 500)
  74. (let offset-y 500)
  75. (let dx 1)
  76. (let dy 1)
  77. (let tick 0)
  78. (while 1 (do
  79. (def sprite clear)
  80. (blit offset-x offset-y)
  81. (let offset-x (+ offset-x dx))
  82. (let offset-y (+ offset-y dy))
  83. (if (gt offset-x 1800) (let dx -1) 0)
  84. (if (gt offset-y 900) (let dy -1) 0)
  85. (if (lt offset-x 100) (let dx 1) 0)
  86. (if (lt offset-y 100) (let dy 1) 0)
  87. ; draw marios
  88. (def sprite mario)
  89. (blit (+ offset-x 0) (+ offset-y 0))
  90. ; collect garbage
  91. (let tick (+ tick 1))
  92. (if (gt tick 5) (do
  93. (gc)
  94. (let tick 0)
  95. (print "gc!")) 0)
  96. ))
  97. ))))
  98. (main)