more syntax refinement
This commit is contained in:
parent
32365a8895
commit
96deaa9ff7
|
|
@ -1,91 +1,92 @@
|
|||
global const str screen_namespace = "/dev/screen/0"
|
||||
global const str mouse_namespace = "/dev/mouse/0"
|
||||
global const str terminal_namespace = "/dev/term/0"
|
||||
global const str new_line = "\n"
|
||||
global const byte WHITE = 255
|
||||
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
|
||||
plex screen is $0
|
||||
plex mouse is $1
|
||||
str tmp_str is $2
|
||||
byte color is $3
|
||||
byte left_down is $4
|
||||
int mode is $5
|
||||
nat offset_temp is $6
|
||||
nat x is $7
|
||||
nat y is $8
|
||||
nat width is $9
|
||||
nat screen_buffer is $10
|
||||
nat buffer_size is $11
|
||||
nat pixel_pos is $12
|
||||
// Open screen
|
||||
// use load immediate because it a pointer to a string, not a value
|
||||
|
||||
load_address &screen_namespace -> tmp_str
|
||||
plex screen $0
|
||||
plex mouse $1
|
||||
str tmp_str $2
|
||||
byte color $3
|
||||
byte left_down $4
|
||||
int mode $5
|
||||
nat offset_temp $6
|
||||
nat x $7
|
||||
nat y $8
|
||||
nat width $9
|
||||
nat screen_buffer $10
|
||||
nat buffer_size $11
|
||||
nat pixel_pos $12
|
||||
|
||||
load_address screen_namespace -> tmp_str
|
||||
load_immediate 0 -> mode
|
||||
syscall OPEN tmp_str mode -> screen # openout Plex screen, in namespace, in flags
|
||||
syscall OPEN tmp_str mode -> screen // open Plex screen, in namespace, in flags
|
||||
|
||||
nat_to_string screen -> tmp_str
|
||||
call &pln tmp_str
|
||||
call pln tmp_str
|
||||
|
||||
load_offset_32 screen 8 -> width # load width
|
||||
load_offset_32 screen 8 -> width // load width
|
||||
nat_to_string width -> tmp_str
|
||||
call &pln tmp_str
|
||||
call pln tmp_str
|
||||
|
||||
load_offset_32 screen 12 -> buffer_size # load size
|
||||
load_offset_32 screen 12 -> buffer_size // load size
|
||||
nat_to_string buffer_size -> tmp_str
|
||||
call &pln tmp_str
|
||||
call pln tmp_str
|
||||
|
||||
load_immediate 16 -> offset_temp # offset for screen buffer
|
||||
load_immediate 16 -> offset_temp // offset for screen buffer
|
||||
add_nat screen offset_temp -> screen_buffer
|
||||
|
||||
nat_to_string screen_buffer -> tmp_str
|
||||
call &pln tmp_str
|
||||
call pln tmp_str
|
||||
|
||||
# open mouse
|
||||
load_address &mouse_namespace -> tmp_str
|
||||
syscall OPEN tmp_str mode -> mouse # openout Plex mouse, in namespace, in flags
|
||||
// open mouse
|
||||
load_address mouse_namespace -> tmp_str
|
||||
syscall OPEN tmp_str mode -> mouse // open Plex mouse, in namespace, in flags
|
||||
|
||||
syscall WRITE screen screen_buffer buffer_size # redraw
|
||||
syscall WRITE screen screen_buffer buffer_size // redraw
|
||||
|
||||
draw_loop:
|
||||
# load mouse click data
|
||||
loop draw_loop
|
||||
// load mouse click data
|
||||
syscall STAT mouse
|
||||
|
||||
load_offset_8 mouse 16 -> left_down # load btn1 pressed
|
||||
load_offset_8 mouse 16 -> left_down // load btn1 pressed
|
||||
|
||||
jump_eq_nat &draw_loop left_down mode # mode is 0 which is an alias for false
|
||||
jump_eq_nat draw_loop left_down mode // mode 0 which an alias for false
|
||||
|
||||
load_offset_32 mouse 8 -> x # load x
|
||||
load_offset_32 mouse 12 -> y # load y
|
||||
load_offset_32 mouse 8 -> x // load x
|
||||
load_offset_32 mouse 12 -> y // load y
|
||||
|
||||
# Compute start address: y*width + x
|
||||
mul_nat y width -> pixel_pos # = y * width
|
||||
add_nat x pixel_pos -> pixel_pos # += x
|
||||
add_nat screen_buffer pixel_pos -> pixel_pos # += pixel_offset
|
||||
load_immediate 4 -> fat_ptr_size # need to add offset for fat pointer size
|
||||
// Compute start address: y*width + x
|
||||
mul_nat y width -> pixel_pos // = y * width
|
||||
add_nat x pixel_pos -> pixel_pos // += x
|
||||
add_nat screen_buffer pixel_pos -> pixel_pos // += pixel_offset
|
||||
load_immediate 4 -> fat_ptr_size // need to add offset for fat pointer size
|
||||
add_nat pixel_pos fat_ptr_size -> pixel_pos
|
||||
|
||||
load_absolute_32 &WHITE -> color
|
||||
store_absolute_8 pixel_pos color # draw color at screen [x,y]
|
||||
syscall WRITE screen screen_buffer buffer_size # redraw
|
||||
load_absolute_32 WHITE -> color
|
||||
store_absolute_8 pixel_pos color // draw color at screen [x,y]
|
||||
syscall WRITE screen screen_buffer buffer_size // redraw
|
||||
|
||||
jump &draw_loop
|
||||
jump draw_loop
|
||||
exit 0
|
||||
|
||||
function pln (str message is $0)
|
||||
str term is $1
|
||||
int msg_length is $2
|
||||
str nl is $3
|
||||
int nl_length is $4
|
||||
int mode is $5
|
||||
function pln (str message $0)
|
||||
str term $1
|
||||
int msg_length $2
|
||||
str nl $3
|
||||
int nl_length $4
|
||||
int mode $5
|
||||
|
||||
load_address &terminal_namespace -> term # get terminal device
|
||||
load_address terminal_namespace -> term // get terminal device
|
||||
load_immediate 0 -> mode
|
||||
syscall OPEN term mode -> term
|
||||
strlen message -> msg_length
|
||||
syscall WRITE term message msg_length
|
||||
load_address &new_line -> nl
|
||||
load_address new_line -> nl
|
||||
strlen nl -> nl_length
|
||||
syscall WRITE term nl nl_length
|
||||
return
|
||||
|
|
|
|||
|
|
@ -0,0 +1,73 @@
|
|||
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
|
||||
|
|
@ -1,73 +0,0 @@
|
|||
global const str screen_namespace = "/dev/screen/0"
|
||||
global const str mouse_namespace = "/dev/mouse/0"
|
||||
global const str terminal_namespace = "/dev/term/0"
|
||||
global const str new_line = "\n"
|
||||
global const byte WHITE = 255
|
||||
|
||||
function main ()
|
||||
# open screen
|
||||
# use load immediate because it is a pointer to a string, not a value
|
||||
|
||||
nat tmp_ptr = load_address screen_namespace
|
||||
int mode = load_immediate 0
|
||||
plex screen = open tmp_ptr, mode
|
||||
|
||||
nat screen_handle = load_offset_32 screen, 4
|
||||
str tmp_str = nat_to_string screen_handle
|
||||
call pln tmp_str
|
||||
|
||||
nat width = load_offset_32 screen, 8
|
||||
tmp_str = nat_to_string width
|
||||
call pln tmp_str
|
||||
|
||||
nat buffer_size = load_offset_32 screen, 12
|
||||
tmp_str = nat_to_string buffer_size
|
||||
call pln tmp_str
|
||||
|
||||
nat offset_temp = load_immediate 16
|
||||
nat screen_buffer = add_nat screen, offset_temp
|
||||
|
||||
tmp_str = nat_to_string screen_buffer
|
||||
call pln tmp_str
|
||||
|
||||
# open mouse
|
||||
tmp_ptr = load_address mouse_namespace
|
||||
plex mouse = open tmp_ptr, mode
|
||||
|
||||
write screen, screen_buffer, buffer_size # redraw
|
||||
|
||||
draw_loop:
|
||||
# load mouse click data
|
||||
stat mouse
|
||||
|
||||
byte left_down = load_offset_8 mouse, 16 # load btn1 pressed
|
||||
|
||||
jump_eq_nat draw_loop, left_down, mode # mode is 0 which is an alias for false
|
||||
|
||||
nat x = load_offset_32 mouse, 8
|
||||
nat y = load_offset_32 mouse, 12
|
||||
|
||||
# Compute start address: y*width + x
|
||||
nat pixel_pos = mul_nat y, width # = y * width
|
||||
pixel_pos = add_nat x, pixel_pos # += x
|
||||
pixel_pos = add_nat screen_buffer, pixel_pos # += pixel_offset
|
||||
nat fat_ptr_size = load_immediate 4 # need to add offset for fat pointer size
|
||||
pixel_pos = add_nat pixel_pos, fat_ptr_size
|
||||
|
||||
byte color = load_absolute_32 WHITE
|
||||
store_absolute_8 pixel_pos, color # draw color at screen [x,y]
|
||||
write screen, screen_buffer, buffer_size # redraw
|
||||
|
||||
jump draw_loop
|
||||
exit 0
|
||||
|
||||
function pln (str message)
|
||||
nat term_ns = load_address terminal_namespace # get terminal device
|
||||
int mode = load_immediate 0
|
||||
plex term = open term_ns, mode
|
||||
int msg_length = strlen message
|
||||
write term, message, msg_length
|
||||
str nl = load_address new_line
|
||||
int nl_length = strlen nl
|
||||
write term, nl, nl_length
|
||||
return
|
||||
|
|
@ -1,72 +1,95 @@
|
|||
const str screen_namespace = "/dev/screen/0";
|
||||
const str mouse_namespace = "/dev/mouse/0";
|
||||
const str terminal_namespace = "/dev/term/0";
|
||||
const str new_line = "\n";
|
||||
const byte WHITE = 255;
|
||||
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 () {
|
||||
/**
|
||||
* Devices
|
||||
*/
|
||||
plex Terminal
|
||||
nat handle
|
||||
|
||||
plex Screen
|
||||
nat handle
|
||||
nat width
|
||||
nat height
|
||||
byte[] buffer
|
||||
|
||||
plex Mouse
|
||||
nat handle
|
||||
nat x
|
||||
nat y
|
||||
bool left
|
||||
bool right
|
||||
bool middle
|
||||
bool btn4
|
||||
nat size
|
||||
|
||||
function main ()
|
||||
// open screen
|
||||
// use load immediate because it is a pointer to a string, not a value
|
||||
|
||||
nat tmp_ptr = &screen_namespace;
|
||||
int mode = 0;
|
||||
plex screen = open(tmp_ptr, mode);
|
||||
nat tmp_ptr = &screen_namespace
|
||||
int mode = 0
|
||||
ptr screen = open(tmp_ptr, mode)
|
||||
|
||||
nat screen_handle = screen.handle;
|
||||
str tmp_str = screen_handle as str;
|
||||
pln(tmp_str);
|
||||
nat screen_handle = screen.handle
|
||||
str tmp_str = nat_to_string(screen_handle)
|
||||
pln(tmp_str)
|
||||
|
||||
nat width = screen.width;
|
||||
tmp_str = width as str;
|
||||
pln(tmp_str);
|
||||
nat width = screen.width
|
||||
tmp_str = nat_to_string(width)
|
||||
pln(tmp_str)
|
||||
|
||||
nat buffer_size = screen.size;
|
||||
tmp_str = buffer_size as str;
|
||||
pln(tmp_str);
|
||||
nat buffer_size = screen.buffer
|
||||
tmp_str = nat_to_string(buffer_size)
|
||||
pln(tmp_str)
|
||||
|
||||
nat screen_buffer = screen.buffer.ptr;
|
||||
tmp_str = screen_buffer as str;
|
||||
pln(tmp_str);
|
||||
nat offset_temp = 16
|
||||
nat screen_buffer = add_nat(screen, offset_temp)
|
||||
|
||||
tmp_str = nat_to_string(screen_buffer)
|
||||
pln(tmp_str)
|
||||
|
||||
// open mouse
|
||||
tmp_ptr = &mouse_namespace;
|
||||
plex mouse = open(tmp_ptr, mode);
|
||||
tmp_ptr = &mouse_namespace
|
||||
ptr mouse = open(tmp_ptr, mode)
|
||||
|
||||
write(screen, screen_buffer, buffer_size); // redraw
|
||||
write(screen, screen_buffer, buffer_size) // redraw
|
||||
|
||||
loop {
|
||||
loop draw_loop
|
||||
// load mouse click data
|
||||
stat(mouse);
|
||||
stat(mouse)
|
||||
|
||||
byte left_down = mouse.left;
|
||||
byte left_down = mouse.left // load btn1 pressed
|
||||
|
||||
if (left_down == 1) {
|
||||
nat x = mouse.x;
|
||||
nat y = mouse.y;
|
||||
jump_eq_nat(&draw_loop, left_down, mode) // mode is 0 which is an alias for false
|
||||
|
||||
nat x = mouse.x
|
||||
nat y = mouse.y
|
||||
|
||||
// Compute start address: y*width + x
|
||||
nat pixel_pos = y * width; // = y * width
|
||||
pixel_pos = x + pixel_pos; // += x
|
||||
pixel_pos = screen_buffer + pixel_pos; // += pixel_offset
|
||||
nat fat_ptr_size = 4; // need to add offset for fat pointer size
|
||||
pixel_pos = pixel_pos + fat_ptr_size;
|
||||
nat pixel_pos = mul_nat(y, width)
|
||||
pixel_pos = add_nat(x, pixel_pos)
|
||||
pixel_pos = add_nat(screen_buffer, pixel_pos)
|
||||
nat fat_ptr_size = 4 // need to add offset for fat pointer size
|
||||
pixel_pos = add_nat(pixel_pos, fat_ptr_size)
|
||||
|
||||
byte color = WHITE;
|
||||
store_absolute_8(pixel_pos, color); // draw color at screen [x,y]
|
||||
write(screen, screen_buffer, buffer_size); // redraw
|
||||
}
|
||||
}
|
||||
exit(0);
|
||||
}
|
||||
byte color = WHITE
|
||||
screen.buffer[pixel_pos] = color // draw color at screen [x,y]
|
||||
write(screen, screen_buffer, buffer_size) // redraw
|
||||
|
||||
function pln (str message) {
|
||||
nat term_ns = &terminal_namespace; // get terminal device
|
||||
int mode = 0;
|
||||
plex term = open(term_ns, mode);
|
||||
int msg_length = message.length;
|
||||
write(term, message, msg_length);
|
||||
str nl = &new_line;
|
||||
int nl_length = nl.length;
|
||||
write(term, nl, nl_length);
|
||||
jump(&draw_loop)
|
||||
exit 0
|
||||
|
||||
function pln (str message)
|
||||
nat term_ns = &terminal_namespace // get terminal device
|
||||
int mode = 0
|
||||
ptr term = open(term_ns, mode)
|
||||
int msg_length = strlen(message)
|
||||
write(term, message, msg_length)
|
||||
str nl = &new_line
|
||||
int nl_length = strlen(nl)
|
||||
write(term, nl, nl_length)
|
||||
return
|
||||
}
|
||||
Loading…
Reference in New Issue