diff --git a/src/arch/linux/main.c b/src/arch/linux/main.c index 42231d8..3e6ab64 100644 --- a/src/arch/linux/main.c +++ b/src/arch/linux/main.c @@ -265,6 +265,7 @@ void register_sdl_devices(VM *vm) { &keyboard_ops); } +#ifdef ASM_DEBUG const char *opcode_to_string(Opcode op) { static const char *names[] = {[OP_HALT] = "halt", [OP_JMP] = "jump", @@ -344,6 +345,7 @@ const char *opcode_to_string(Opcode op) { const char *name = names[op]; return name ? name : ""; } +#endif i32 main(i32 argc, char *argv[]) { bool gui_mode = false; diff --git a/test/box.asm.lisp b/test/box.asm.lisp index 1e68567..94ac2cf 100644 --- a/test/box.asm.lisp +++ b/test/box.asm.lisp @@ -8,93 +8,121 @@ ; draw to the device because otherwise the screen wont open (syscall WRITE $0 $0 $0) - ; first row - (load $1 &BLACK) - (push $1) - (load-immediate $1 1) - (push $1) - (load-immediate $1 1) - (push $1) - (call &draw-outlined-swatch) + (load-immediate $16 &mouse-namespace) + (load-immediate $3 12) ; malloc sizeof mouse data + (malloc $4 $3) - (load $1 &WHITE) - (push $1) - (load-immediate $1 21) - (push $1) - (load-immediate $1 1) - (push $1) - (call &draw-outlined-swatch) + (label draw-loop + ; load mouse click data + (syscall READ $16 $2 $3 $4) + (load-immediate $5 4) ; offset for x + (add-nat $6 $5 $2) + (load-r $7 $6) ; load x + (load-immediate $5 8) ; offset for y + (add-nat $6 $5 $2) + (load-r $8 $6) ; load y + (load-immediate $5 12) ; offset for btn1 + (add-nat $6 $5 $2) + (load-r8 $9 $6) ; load btn1 pressed + (load-immediate $5 13) ; offset for btn2 + (add-nat $6 $5 $2) + (load-r8 $10 $6) ; load btn2 pressed - ; row 2 - (load $1 &CHARCOAL) - (push $1) - (load-immediate $1 30) - (push $1) - (load-immediate $1 40) - (push $1) - (call &draw-outlined-swatch) + ; first row + (load $1 &BLACK) + (push $1) + (load-immediate $1 1) + (push $1) + (load-immediate $1 1) + (push $1) + (call &draw-outlined-swatch) - (load $1 &DARK-GRAY) - (push $1) - (load-immediate $1 10) - (push $1) - (load-immediate $1 40) - (push $1) - (call &draw-outlined-swatch) + (load $1 &WHITE) + (push $1) + (load-immediate $1 21) + (push $1) + (load-immediate $1 1) + (push $1) + (call &draw-outlined-swatch) - ; row 3 - (load $1 &RED) - (push $1) - (load-immediate $1 30) - (push $1) - (load-immediate $1 60) - (push $1) - (call &draw-outlined-swatch) + ; row 2 + (load $1 &CHARCOAL) + (push $1) + (load-immediate $1 1) + (push $1) + (load-immediate $1 21) + (push $1) + (call &draw-outlined-swatch) - (load $1 &ORANGE) - (push $1) - (load-immediate $1 10) - (push $1) - (load-immediate $1 60) - (push $1) - (call &draw-outlined-swatch) + (load $1 &DARK-GRAY) + (push $1) + (load-immediate $1 21) + (push $1) + (load-immediate $1 21) + (push $1) + (call &draw-outlined-swatch) - ; row 3 - (load $1 &YELLOW) - (push $1) - (load-immediate $1 30) - (push $1) - (load-immediate $1 80) - (push $1) - (call &draw-outlined-swatch) + ; row 3 + (load $1 &RED) + (push $1) + (load-immediate $1 1) + (push $1) + (load-immediate $1 41) + (push $1) + (call &draw-outlined-swatch) - (load $1 &GREEN) - (push $1) - (load-immediate $1 10) - (push $1) - (load-immediate $1 80) - (push $1) - (call &draw-outlined-swatch) + (load $1 &ORANGE) + (push $1) + (load-immediate $1 21) + (push $1) + (load-immediate $1 41) + (push $1) + (call &draw-outlined-swatch) - ; row 4 - (load $1 &BLUE) - (push $1) - (load-immediate $1 30) - (push $1) - (load-immediate $1 100) - (push $1) - (call &draw-outlined-swatch) + ; row 3 + (load $1 &YELLOW) + (push $1) + (load-immediate $1 1) + (push $1) + (load-immediate $1 61) + (push $1) + (call &draw-outlined-swatch) - (load $1 &PURPLE) - (push $1) - (load-immediate $1 10) - (push $1) - (load-immediate $1 100) - (push $1) - (call &draw-outlined-swatch) + (load $1 &GREEN) + (push $1) + (load-immediate $1 21) + (push $1) + (load-immediate $1 61) + (push $1) + (call &draw-outlined-swatch) + + ; row 4 + (load $1 &BLUE) + (push $1) + (load-immediate $1 1) + (push $1) + (load-immediate $1 81) + (push $1) + (call &draw-outlined-swatch) + + (load $1 &PURPLE) + (push $1) + (load-immediate $1 21) + (push $1) + (load-immediate $1 81) + (push $1) + (call &draw-outlined-swatch) + + (syscall WRITE $0 $0 $0) + (jump-eq-nat &draw-loop $9 $11) + + ; if click on box then switch color + + ; else draw the pixel + + (jump-eq-nat &draw-loop $10 $11)) ; Flush and halt - (syscall WRITE $0 $0 $0) (halt)) (label draw-outlined-swatch @@ -146,6 +174,10 @@ (load-immediate $1 12) ; offset for width (add-nat $19 $18 $1) (load-r $2 $19) ; load width + (load-immediate $1 4) ; offset for width + (add-nat $19 $18 $1) + (load-r $21 $19) ; load base pointer + (add-nat $21 $21 $1) ; need to add offset for fat pointer size ; Constants (load-immediate $1 1) ; increment @@ -153,6 +185,7 @@ ; Compute start address: base + y*640 + x (mul-int $15 $13 $2) ; $15 = y * 640 (add-int $15 $15 $11) ; $15 += x + (add-nat $15 $21 $15) ; $15 = base + pixel_offset (register-move $4 $15) ; Outer loop: height times diff --git a/test/window.asm.lisp b/test/window.asm.lisp index 5bc1b06..c7b4658 100644 --- a/test/window.asm.lisp +++ b/test/window.asm.lisp @@ -12,6 +12,10 @@ (load-immediate $1 12) ; offset for width (add-nat $19 $18 $1) (load-r $20 $19) ; load width + (load-immediate $1 4) ; offset for width + (add-nat $19 $18 $1) + (load-r $21 $19) ; load base pointer + (add-nat $21 $21 $1) ; need to add offset for fat pointer size (load-immediate $16 &mouse-namespace) (load-immediate $3 12) ; malloc sizeof mouse data @@ -32,33 +36,13 @@ (load-immediate $5 13) ; offset for btn2 (add-nat $6 $5 $2) (load-r8 $10 $6) ; load btn2 pressed - (load-r $12 $5) ; load x (jump-eq-nat &draw-loop $9 $11) - ;;(nat-to-string $1 $7) - ;;(push $1) - ;;(call &println) - ;; - ;;(nat-to-string $1 $8) - ;;(push $1) - ;;(call &println) - ;; - ;;(nat-to-string $1 $9) - ;;(push $1) - ;;(call &println) -;; - ;;(nat-to-string $1 $10) - ;;(push $1) - ;;(call &println) - ;; - ;;(nat-to-string $1 $12) - ;;(push $1) - ;;(call &println) - ; Compute start address: y*width + x (mul-nat $15 $8 $20) ; $15 = y * width (add-nat $15 $15 $7) ; $15 += x + (add-nat $15 $21 $15) ; $15 = base + pixel_offset (load $3 &WHITE) ; color (store-8 $15 $3) ; draw color at screen [x,y]