113 lines
2.7 KiB
Common Lisp
113 lines
2.7 KiB
Common Lisp
((code
|
|
(label main
|
|
; open terminal for debug
|
|
(load-immediate $32 &terminal-namespace)
|
|
(load-immediate $11 0)
|
|
(syscall OPEN $32 $32 $11)
|
|
|
|
; Open screen
|
|
; use load immediate because it is a pointer to a string, not a value
|
|
(load-immediate $0 &screen-namespace)
|
|
(syscall OPEN $18 $0 $11) ; open(out Plex screen, in namespace, in flags)
|
|
|
|
(load-immediate $1 4) ; offset for handle
|
|
(add-nat $19 $18 $1)
|
|
(get $0 $19) ; load handle
|
|
|
|
(nat-to-string $5 $0)
|
|
(push $32)
|
|
(push $5)
|
|
(call &pln)
|
|
|
|
(load-immediate $1 8) ; offset for width
|
|
(add-nat $19 $18 $1)
|
|
(get $20 $19) ; load width
|
|
|
|
(nat-to-string $5 $20)
|
|
(push $32)
|
|
(push $5)
|
|
(call &pln)
|
|
|
|
(load-immediate $1 12) ; offset for size
|
|
(add-nat $19 $18 $1)
|
|
(get $22 $19) ; load size
|
|
|
|
(nat-to-string $5 $22)
|
|
(push $32)
|
|
(push $5)
|
|
(call &pln)
|
|
|
|
(load-immediate $1 16) ; offset for screen buffer
|
|
(add-nat $21 $18 $1)
|
|
|
|
(nat-to-string $5 $21)
|
|
(push $32)
|
|
(push $5)
|
|
(call &pln)
|
|
|
|
; open mouse
|
|
(load-immediate $16 &mouse-namespace)
|
|
(syscall OPEN $15 $16 $11) ; open(out Plex mouse, in namespace, in flags)
|
|
|
|
(load-immediate $1 4) ; offset for handle
|
|
(add-nat $19 $15 $1)
|
|
|
|
(nat-to-string $5 $19)
|
|
(push $32)
|
|
(push $5)
|
|
(call &pln)
|
|
(get $16 $19) ; load handle
|
|
|
|
(syscall WRITE $0 $21 $22) ; redraw
|
|
|
|
(load-immediate $3 16)
|
|
(label draw-loop
|
|
; load mouse click data
|
|
(syscall READ $16 $2 $3 $15)
|
|
(load-immediate $5 16) ; offset for btn1
|
|
(add-nat $6 $15 $5)
|
|
(get-8 $9 $6) ; load btn1 pressed
|
|
|
|
(jump-eq-nat &draw-loop $9 $11)
|
|
|
|
(load-immediate $5 8) ; offset for x
|
|
(add-nat $6 $5 $2)
|
|
(get $7 $6) ; load x
|
|
(load-immediate $5 12) ; offset for y
|
|
(add-nat $6 $5 $2)
|
|
(get $8 $6) ; load y
|
|
|
|
; Compute start address: y*width + x
|
|
(mul-nat $30 $8 $20) ; $15 = y * width
|
|
(add-nat $30 $30 $7) ; $15 += x
|
|
(add-nat $30 $30 $21) ; $15 += pixel_offset
|
|
(load-immediate $1 4) ; need to add offset for fat pointer size
|
|
(add-nat $30 $30 $1)
|
|
|
|
(load $3 &WHITE) ; color
|
|
(store-8 $30 $3) ; draw color at screen [x,y]
|
|
(syscall WRITE $0 $21 $22) ; redraw
|
|
|
|
(jump &draw-loop))
|
|
(halt))
|
|
(label pln
|
|
(load-immediate $3 &new-line)
|
|
(pop $1)
|
|
(pop $0)
|
|
|
|
(load-immediate $5 4) ; offset for handle
|
|
(add-nat $6 $0 $5)
|
|
(get $7 $6) ; load handle
|
|
|
|
(string-length $2 $1)
|
|
(syscall WRITE $7 $1 $2)
|
|
(string-length $4 $3)
|
|
(syscall WRITE $7 $3 $4)
|
|
(return)))
|
|
(data
|
|
(label screen-namespace "/dev/screen/0")
|
|
(label mouse-namespace "/dev/mouse/0")
|
|
(label terminal-namespace "/dev/term/0")
|
|
(label new-line "\n")
|
|
(label WHITE 255)))
|