74 lines
2.0 KiB
Plaintext
74 lines
2.0 KiB
Plaintext
global str screen_namespace = "/dev/screen/0"
|
|
global str mouse_namespace = "/dev/mouse/0"
|
|
global str terminal_namespace = "/dev/term/0"
|
|
global str new_line = "\n"
|
|
global byte WHITE = 255
|
|
|
|
function main ()
|
|
// open screen
|
|
// use load immediate because it is a pointer to a string not a value
|
|
|
|
ptr tmp_ptr $0 = &screen_namespace
|
|
int mode $1 = 0
|
|
ptr screen $2 = open tmp_ptr mode
|
|
|
|
nat screen_handle $3 = @memory.u32[screen + 4]
|
|
str tmp_str $4 = nat_to_string screen_handle
|
|
pln(tmp_str)
|
|
|
|
nat width $5 = @memory.u32[screen + 8]
|
|
tmp_str = nat_to_string width
|
|
pln(tmp_str)
|
|
|
|
nat buffer_size $6 = @memory.u32[screen + 12]
|
|
tmp_str = nat_to_string buffer_size
|
|
pln(tmp_str)
|
|
|
|
nat offset_temp $7 = 16
|
|
ptr screen_buffer = add_nat screen offset_temp
|
|
|
|
tmp_str = nat_to_string screen_buffer
|
|
pln(tmp_str)
|
|
|
|
// open mouse
|
|
tmp_ptr = &mouse_namespace
|
|
ptr mouse $8 = open tmp_ptr mode
|
|
|
|
write screen screen_buffer buffer_size // redraw
|
|
|
|
loop draw_loop
|
|
// load mouse click data
|
|
stat mouse
|
|
|
|
bool left_down $9 = @memory.u8[mouse + 16] // load btn1 pressed
|
|
|
|
jump_eq_nat &draw_loop left_down mode // mode is 0 which is an alias for false
|
|
|
|
nat x $10 = @memory.u32[mouse + 8]
|
|
nat y $11 = @memory.u32[mouse + 12]
|
|
|
|
// Compute start address: y*width + x
|
|
nat pixel_pos $12 = mul_nat y width
|
|
pixel_pos = add_nat x pixel_pos
|
|
pixel_pos = add_nat screen_buffer pixel_pos
|
|
nat fat_ptr_size $13 = 4 // need to add offset for fat pointer size
|
|
pixel_pos = add_nat pixel_pos fat_ptr_size
|
|
|
|
byte color $14 = @memory.u8[ &WHITE ]
|
|
@memory.u8[pixel_pos] = color // draw color at screen [xy]
|
|
write screen screen_buffer buffer_size // redraw
|
|
|
|
jump &draw_loop
|
|
exit 0
|
|
|
|
function pln (str message $0)
|
|
nat term_ns $1 = &terminal_namespace // get terminal device
|
|
int mode $2 = 0
|
|
ptr term $3 = open term_ns mode
|
|
int msg_length $4 = strlen message
|
|
write term message msg_length
|
|
str nl $5 = &new_line
|
|
int nl_length $6 = strlen nl
|
|
write term nl nl_length
|
|
return
|