wip drawing apps

This commit is contained in:
zongor 2025-10-04 18:01:42 -07:00
parent 77033e121b
commit c71254f351
3 changed files with 116 additions and 97 deletions

View File

@ -265,6 +265,7 @@ void register_sdl_devices(VM *vm) {
&keyboard_ops); &keyboard_ops);
} }
#ifdef ASM_DEBUG
const char *opcode_to_string(Opcode op) { const char *opcode_to_string(Opcode op) {
static const char *names[] = {[OP_HALT] = "halt", static const char *names[] = {[OP_HALT] = "halt",
[OP_JMP] = "jump", [OP_JMP] = "jump",
@ -344,6 +345,7 @@ const char *opcode_to_string(Opcode op) {
const char *name = names[op]; const char *name = names[op];
return name ? name : "<unknown-opcode>"; return name ? name : "<unknown-opcode>";
} }
#endif
i32 main(i32 argc, char *argv[]) { i32 main(i32 argc, char *argv[]) {
bool gui_mode = false; bool gui_mode = false;

View File

@ -8,93 +8,121 @@
; draw to the device because otherwise the screen wont open ; draw to the device because otherwise the screen wont open
(syscall WRITE $0 $0 $0) (syscall WRITE $0 $0 $0)
; first row (load-immediate $16 &mouse-namespace)
(load $1 &BLACK) (load-immediate $3 12) ; malloc sizeof mouse data
(push $1) (malloc $4 $3)
(load-immediate $1 1)
(push $1)
(load-immediate $1 1)
(push $1)
(call &draw-outlined-swatch)
(load $1 &WHITE) (label draw-loop
(push $1) ; load mouse click data
(load-immediate $1 21) (syscall READ $16 $2 $3 $4)
(push $1) (load-immediate $5 4) ; offset for x
(load-immediate $1 1) (add-nat $6 $5 $2)
(push $1) (load-r $7 $6) ; load x
(call &draw-outlined-swatch) (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 ; first row
(load $1 &CHARCOAL) (load $1 &BLACK)
(push $1) (push $1)
(load-immediate $1 30) (load-immediate $1 1)
(push $1) (push $1)
(load-immediate $1 40) (load-immediate $1 1)
(push $1) (push $1)
(call &draw-outlined-swatch) (call &draw-outlined-swatch)
(load $1 &DARK-GRAY) (load $1 &WHITE)
(push $1) (push $1)
(load-immediate $1 10) (load-immediate $1 21)
(push $1) (push $1)
(load-immediate $1 40) (load-immediate $1 1)
(push $1) (push $1)
(call &draw-outlined-swatch) (call &draw-outlined-swatch)
; row 3 ; row 2
(load $1 &RED) (load $1 &CHARCOAL)
(push $1) (push $1)
(load-immediate $1 30) (load-immediate $1 1)
(push $1) (push $1)
(load-immediate $1 60) (load-immediate $1 21)
(push $1) (push $1)
(call &draw-outlined-swatch) (call &draw-outlined-swatch)
(load $1 &ORANGE) (load $1 &DARK-GRAY)
(push $1) (push $1)
(load-immediate $1 10) (load-immediate $1 21)
(push $1) (push $1)
(load-immediate $1 60) (load-immediate $1 21)
(push $1) (push $1)
(call &draw-outlined-swatch) (call &draw-outlined-swatch)
; row 3 ; row 3
(load $1 &YELLOW) (load $1 &RED)
(push $1) (push $1)
(load-immediate $1 30) (load-immediate $1 1)
(push $1) (push $1)
(load-immediate $1 80) (load-immediate $1 41)
(push $1) (push $1)
(call &draw-outlined-swatch) (call &draw-outlined-swatch)
(load $1 &GREEN) (load $1 &ORANGE)
(push $1) (push $1)
(load-immediate $1 10) (load-immediate $1 21)
(push $1) (push $1)
(load-immediate $1 80) (load-immediate $1 41)
(push $1) (push $1)
(call &draw-outlined-swatch) (call &draw-outlined-swatch)
; row 4 ; row 3
(load $1 &BLUE) (load $1 &YELLOW)
(push $1) (push $1)
(load-immediate $1 30) (load-immediate $1 1)
(push $1) (push $1)
(load-immediate $1 100) (load-immediate $1 61)
(push $1) (push $1)
(call &draw-outlined-swatch) (call &draw-outlined-swatch)
(load $1 &PURPLE) (load $1 &GREEN)
(push $1) (push $1)
(load-immediate $1 10) (load-immediate $1 21)
(push $1) (push $1)
(load-immediate $1 100) (load-immediate $1 61)
(push $1) (push $1)
(call &draw-outlined-swatch) (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 ; Flush and halt
(syscall WRITE $0 $0 $0)
(halt)) (halt))
(label draw-outlined-swatch (label draw-outlined-swatch
@ -146,6 +174,10 @@
(load-immediate $1 12) ; offset for width (load-immediate $1 12) ; offset for width
(add-nat $19 $18 $1) (add-nat $19 $18 $1)
(load-r $2 $19) ; load width (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 ; Constants
(load-immediate $1 1) ; increment (load-immediate $1 1) ; increment
@ -153,6 +185,7 @@
; Compute start address: base + y*640 + x ; Compute start address: base + y*640 + x
(mul-int $15 $13 $2) ; $15 = y * 640 (mul-int $15 $13 $2) ; $15 = y * 640
(add-int $15 $15 $11) ; $15 += x (add-int $15 $15 $11) ; $15 += x
(add-nat $15 $21 $15) ; $15 = base + pixel_offset
(register-move $4 $15) (register-move $4 $15)
; Outer loop: height times ; Outer loop: height times

View File

@ -12,6 +12,10 @@
(load-immediate $1 12) ; offset for width (load-immediate $1 12) ; offset for width
(add-nat $19 $18 $1) (add-nat $19 $18 $1)
(load-r $20 $19) ; load width (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 $16 &mouse-namespace)
(load-immediate $3 12) ; malloc sizeof mouse data (load-immediate $3 12) ; malloc sizeof mouse data
@ -32,33 +36,13 @@
(load-immediate $5 13) ; offset for btn2 (load-immediate $5 13) ; offset for btn2
(add-nat $6 $5 $2) (add-nat $6 $5 $2)
(load-r8 $10 $6) ; load btn2 pressed (load-r8 $10 $6) ; load btn2 pressed
(load-r $12 $5) ; load x
(jump-eq-nat &draw-loop $9 $11) (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 ; Compute start address: y*width + x
(mul-nat $15 $8 $20) ; $15 = y * width (mul-nat $15 $8 $20) ; $15 = y * width
(add-nat $15 $15 $7) ; $15 += x (add-nat $15 $15 $7) ; $15 += x
(add-nat $15 $21 $15) ; $15 = base + pixel_offset
(load $3 &WHITE) ; color (load $3 &WHITE) ; color
(store-8 $15 $3) ; draw color at screen [x,y] (store-8 $15 $3) ; draw color at screen [x,y]