WORKING PAINT PROGRAM!
This commit is contained in:
parent
c71254f351
commit
19aa72018e
|
@ -419,16 +419,14 @@ i32 main(i32 argc, char *argv[]) {
|
||||||
|
|
||||||
while (running) {
|
while (running) {
|
||||||
#ifdef ASM_DEBUG
|
#ifdef ASM_DEBUG
|
||||||
printf("| %d %s %d\n", vm.code[vm.pc], opcode_to_string(vm.code[vm.pc]),
|
printf("| %s %d\n", opcode_to_string(vm.code[vm.pc]),vm.pc);
|
||||||
vm.pc);
|
|
||||||
#endif
|
#endif
|
||||||
running = step_vm(&vm);
|
running = step_vm(&vm);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
while (running) {
|
while (running) {
|
||||||
#ifdef ASM_DEBUG
|
#ifdef ASM_DEBUG
|
||||||
printf("| %d %s %d\n", vm.code[vm.pc], opcode_to_string(vm.code[vm.pc]),
|
printf("| %s %d\n", opcode_to_string(vm.code[vm.pc]),vm.pc);
|
||||||
vm.pc);
|
|
||||||
#endif
|
#endif
|
||||||
running = step_vm(&vm);
|
running = step_vm(&vm);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,11 +3,23 @@
|
||||||
; Open screen
|
; Open screen
|
||||||
; use load immediate because it is a pointer to a string, not a value
|
; use load immediate because it is a pointer to a string, not a value
|
||||||
(load-immediate $0 &screen-namespace)
|
(load-immediate $0 &screen-namespace)
|
||||||
(load-immediate $1 0)
|
(load-immediate $11 0)
|
||||||
(syscall OPEN $0 $1)
|
(syscall OPEN $0 $11)
|
||||||
; 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)
|
||||||
|
|
||||||
|
(load-immediate $16 1) ; device info call
|
||||||
|
(load-immediate $17 16) ; sizeof screen device info
|
||||||
|
(malloc $18 $17)
|
||||||
|
(syscall IOCTL $0 $16 $18)
|
||||||
|
(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 $16 &mouse-namespace)
|
||||||
(load-immediate $3 12) ; malloc sizeof mouse data
|
(load-immediate $3 12) ; malloc sizeof mouse data
|
||||||
(malloc $4 $3)
|
(malloc $4 $3)
|
||||||
|
@ -28,103 +40,244 @@
|
||||||
(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-immediate $14 20) ; box size
|
||||||
|
|
||||||
; first row
|
; first row
|
||||||
(load $1 &BLACK)
|
(load $1 &BLACK)
|
||||||
(push $1)
|
(push $1)
|
||||||
(load-immediate $1 1)
|
(load-immediate $12 1)
|
||||||
(push $1)
|
(push $12)
|
||||||
(load-immediate $1 1)
|
(load-immediate $13 1)
|
||||||
(push $1)
|
(push $13)
|
||||||
(call &draw-outlined-swatch)
|
(call &draw-outlined-swatch)
|
||||||
|
|
||||||
|
(push $14) ; box_size (20)
|
||||||
|
(push $13) ; box_y
|
||||||
|
(push $12) ; box_x
|
||||||
|
(push $8) ; click_y
|
||||||
|
(push $7) ; click_x
|
||||||
|
(push $1) ; color
|
||||||
|
(push $9) ; is btn1 clicked?
|
||||||
|
(call &set-color-if-clicked)
|
||||||
|
|
||||||
(load $1 &WHITE)
|
(load $1 &WHITE)
|
||||||
(push $1)
|
(push $1)
|
||||||
(load-immediate $1 21)
|
(load-immediate $12 21)
|
||||||
(push $1)
|
(push $12)
|
||||||
(load-immediate $1 1)
|
(load-immediate $13 1)
|
||||||
(push $1)
|
(push $13)
|
||||||
(call &draw-outlined-swatch)
|
(call &draw-outlined-swatch)
|
||||||
|
|
||||||
|
(push $14) ; box_size (20)
|
||||||
|
(push $13) ; box_y
|
||||||
|
(push $12) ; box_x
|
||||||
|
(push $8) ; click_y
|
||||||
|
(push $7) ; click_x
|
||||||
|
(push $1) ; color
|
||||||
|
(push $9) ; is btn1 clicked?
|
||||||
|
(call &set-color-if-clicked)
|
||||||
|
|
||||||
; row 2
|
; row 2
|
||||||
(load $1 &CHARCOAL)
|
(load $1 &CHARCOAL)
|
||||||
(push $1)
|
(push $1)
|
||||||
(load-immediate $1 1)
|
(load-immediate $12 1)
|
||||||
(push $1)
|
(push $12)
|
||||||
(load-immediate $1 21)
|
(load-immediate $13 21)
|
||||||
(push $1)
|
(push $13)
|
||||||
(call &draw-outlined-swatch)
|
(call &draw-outlined-swatch)
|
||||||
|
|
||||||
|
(push $14) ; box_size (20)
|
||||||
|
(push $13) ; box_y
|
||||||
|
(push $12) ; box_x
|
||||||
|
(push $8) ; click_y
|
||||||
|
(push $7) ; click_x
|
||||||
|
(push $1) ; color
|
||||||
|
(push $9) ; is btn1 clicked?
|
||||||
|
(call &set-color-if-clicked)
|
||||||
|
|
||||||
(load $1 &DARK-GRAY)
|
(load $1 &DARK-GRAY)
|
||||||
(push $1)
|
(push $1)
|
||||||
(load-immediate $1 21)
|
(load-immediate $12 21)
|
||||||
(push $1)
|
(push $12)
|
||||||
(load-immediate $1 21)
|
(load-immediate $13 21)
|
||||||
(push $1)
|
(push $13)
|
||||||
(call &draw-outlined-swatch)
|
(call &draw-outlined-swatch)
|
||||||
|
|
||||||
|
(push $14) ; box_size (20)
|
||||||
|
(push $13) ; box_y
|
||||||
|
(push $12) ; box_x
|
||||||
|
(push $8) ; click_y
|
||||||
|
(push $7) ; click_x
|
||||||
|
(push $1) ; color
|
||||||
|
(push $9) ; is btn1 clicked?
|
||||||
|
(call &set-color-if-clicked)
|
||||||
|
|
||||||
; row 3
|
; row 3
|
||||||
(load $1 &RED)
|
(load $1 &RED)
|
||||||
(push $1)
|
(push $1)
|
||||||
(load-immediate $1 1)
|
(load-immediate $12 1)
|
||||||
(push $1)
|
(push $12)
|
||||||
(load-immediate $1 41)
|
(load-immediate $13 41)
|
||||||
(push $1)
|
(push $13)
|
||||||
(call &draw-outlined-swatch)
|
(call &draw-outlined-swatch)
|
||||||
|
|
||||||
|
(push $14) ; box_size (20)
|
||||||
|
(push $13) ; box_y
|
||||||
|
(push $12) ; box_x
|
||||||
|
(push $8) ; click_y
|
||||||
|
(push $7) ; click_x
|
||||||
|
(push $1) ; color
|
||||||
|
(push $9) ; is btn1 clicked?
|
||||||
|
(call &set-color-if-clicked)
|
||||||
|
|
||||||
(load $1 &ORANGE)
|
(load $1 &ORANGE)
|
||||||
(push $1)
|
(push $1)
|
||||||
(load-immediate $1 21)
|
(load-immediate $12 21)
|
||||||
(push $1)
|
(push $12)
|
||||||
(load-immediate $1 41)
|
(load-immediate $13 41)
|
||||||
(push $1)
|
(push $13)
|
||||||
(call &draw-outlined-swatch)
|
(call &draw-outlined-swatch)
|
||||||
|
|
||||||
|
(push $14) ; box_size (20)
|
||||||
|
(push $13) ; box_y
|
||||||
|
(push $12) ; box_x
|
||||||
|
(push $8) ; click_y
|
||||||
|
(push $7) ; click_x
|
||||||
|
(push $1) ; color
|
||||||
|
(push $9) ; is btn1 clicked?
|
||||||
|
(call &set-color-if-clicked)
|
||||||
|
|
||||||
; row 3
|
; row 3
|
||||||
(load $1 &YELLOW)
|
(load $1 &YELLOW)
|
||||||
(push $1)
|
(push $1)
|
||||||
(load-immediate $1 1)
|
(load-immediate $12 1)
|
||||||
(push $1)
|
(push $12)
|
||||||
(load-immediate $1 61)
|
(load-immediate $13 61)
|
||||||
(push $1)
|
(push $13)
|
||||||
(call &draw-outlined-swatch)
|
(call &draw-outlined-swatch)
|
||||||
|
|
||||||
|
(push $14) ; box_size (20)
|
||||||
|
(push $13) ; box_y
|
||||||
|
(push $12) ; box_x
|
||||||
|
(push $8) ; click_y
|
||||||
|
(push $7) ; click_x
|
||||||
|
(push $1) ; color
|
||||||
|
(push $9) ; is btn1 clicked?
|
||||||
|
(call &set-color-if-clicked)
|
||||||
|
|
||||||
(load $1 &GREEN)
|
(load $1 &GREEN)
|
||||||
(push $1)
|
(push $1)
|
||||||
(load-immediate $1 21)
|
(load-immediate $12 21)
|
||||||
(push $1)
|
(push $12)
|
||||||
(load-immediate $1 61)
|
(load-immediate $13 61)
|
||||||
(push $1)
|
(push $13)
|
||||||
(call &draw-outlined-swatch)
|
(call &draw-outlined-swatch)
|
||||||
|
|
||||||
|
(push $14) ; box_size (20)
|
||||||
|
(push $13) ; box_y
|
||||||
|
(push $12) ; box_x
|
||||||
|
(push $8) ; click_y
|
||||||
|
(push $7) ; click_x
|
||||||
|
(push $1) ; color
|
||||||
|
(push $9) ; is btn1 clicked?
|
||||||
|
(call &set-color-if-clicked)
|
||||||
|
|
||||||
; row 4
|
; row 4
|
||||||
(load $1 &BLUE)
|
(load $1 &BLUE)
|
||||||
(push $1)
|
(push $1)
|
||||||
(load-immediate $1 1)
|
(load-immediate $12 1)
|
||||||
(push $1)
|
(push $12)
|
||||||
(load-immediate $1 81)
|
(load-immediate $13 81)
|
||||||
(push $1)
|
(push $13)
|
||||||
(call &draw-outlined-swatch)
|
(call &draw-outlined-swatch)
|
||||||
|
|
||||||
|
(push $14) ; box_size (20)
|
||||||
|
(push $13) ; box_y
|
||||||
|
(push $12) ; box_x
|
||||||
|
(push $8) ; click_y
|
||||||
|
(push $7) ; click_x
|
||||||
|
(push $1) ; color
|
||||||
|
(push $9) ; is btn1 clicked?
|
||||||
|
(call &set-color-if-clicked)
|
||||||
|
|
||||||
(load $1 &PURPLE)
|
(load $1 &PURPLE)
|
||||||
(push $1)
|
(push $1)
|
||||||
(load-immediate $1 21)
|
(load-immediate $12 21)
|
||||||
(push $1)
|
(push $12)
|
||||||
(load-immediate $1 81)
|
(load-immediate $13 81)
|
||||||
(push $1)
|
(push $13)
|
||||||
(call &draw-outlined-swatch)
|
(call &draw-outlined-swatch)
|
||||||
|
|
||||||
|
(push $14) ; box_size (20)
|
||||||
|
(push $13) ; box_y
|
||||||
|
(push $12) ; box_x
|
||||||
|
(push $8) ; click_y
|
||||||
|
(push $7) ; click_x
|
||||||
|
(push $1) ; color
|
||||||
|
(push $9) ; is btn1 clicked?
|
||||||
|
(call &set-color-if-clicked)
|
||||||
|
|
||||||
(syscall WRITE $0 $0 $0)
|
(syscall WRITE $0 $0 $0)
|
||||||
|
|
||||||
(jump-eq-nat &draw-loop $9 $11)
|
(jump-eq-nat &draw-loop $9 $11)
|
||||||
|
|
||||||
; if click on box then switch color
|
(mul-nat $15 $8 $20) ; $15 = y * width
|
||||||
|
(add-nat $15 $15 $7) ; $15 += x
|
||||||
|
(add-nat $15 $21 $15) ; $15 = base + pixel_offset
|
||||||
|
|
||||||
; else draw the pixel
|
(load $22 &SELECTED-COLOR) ; color
|
||||||
|
(store-8 $15 $22) ; draw color at screen [x,y]
|
||||||
|
|
||||||
(jump-eq-nat &draw-loop $10 $11))
|
(jump-eq-nat &draw-loop $10 $11))
|
||||||
|
|
||||||
; Flush and halt
|
; Flush and halt
|
||||||
(halt))
|
(halt))
|
||||||
|
|
||||||
|
(label set-color-if-clicked
|
||||||
|
; Pop inputs from stack (in reverse order of pushing)
|
||||||
|
(pop $12) ; $12 = btn1 down?
|
||||||
|
(pop $11) ; $11 = color
|
||||||
|
(pop $0) ; $0 = click_x
|
||||||
|
(pop $1) ; $1 = click_y
|
||||||
|
(pop $2) ; $2 = box_x
|
||||||
|
(pop $3) ; $3 = box_y
|
||||||
|
(pop $5) ; $5 = box_size
|
||||||
|
|
||||||
|
; Compute right = box_x + box_size
|
||||||
|
(add-int $6 $2 $5) ; $6 = right edge
|
||||||
|
|
||||||
|
; Compute bottom = box_y + box_size
|
||||||
|
(add-int $7 $3 $5) ; $7 = bottom edge
|
||||||
|
|
||||||
|
; Check 1: click_x >= box_x ?
|
||||||
|
(jump-ge-int &check2 $0 $2)
|
||||||
|
(return)
|
||||||
|
|
||||||
|
(label check2)
|
||||||
|
; Check 2: click_x <= right ?
|
||||||
|
(jump-le-int &check3 $0 $6)
|
||||||
|
(return)
|
||||||
|
|
||||||
|
(label check3)
|
||||||
|
; Check 3: click_y >= box_y ?
|
||||||
|
(jump-ge-int &check4 $1 $3)
|
||||||
|
(return)
|
||||||
|
|
||||||
|
(label check4)
|
||||||
|
; Check 4: click_y <= bottom ?
|
||||||
|
(jump-le-int &check5 $1 $7)
|
||||||
|
(return)
|
||||||
|
|
||||||
|
(label check5) ; if it was selected then set the color
|
||||||
|
(load-immediate $13 1)
|
||||||
|
(jump-eq-int &set-color $12 $13)
|
||||||
|
(return)
|
||||||
|
|
||||||
|
(label set-color)
|
||||||
|
(load-immediate $10 &SELECTED-COLOR)
|
||||||
|
(store-8 $10 $11)
|
||||||
|
(return))
|
||||||
|
|
||||||
(label draw-outlined-swatch
|
(label draw-outlined-swatch
|
||||||
(pop $3) ; y
|
(pop $3) ; y
|
||||||
(pop $2) ; x
|
(pop $2) ; x
|
||||||
|
@ -207,6 +360,7 @@
|
||||||
(data
|
(data
|
||||||
(label screen-namespace "/dev/screen/0")
|
(label screen-namespace "/dev/screen/0")
|
||||||
(label mouse-namespace "/dev/mouse/0")
|
(label mouse-namespace "/dev/mouse/0")
|
||||||
|
(label SELECTED-COLOR 255)
|
||||||
(label BLACK 0)
|
(label BLACK 0)
|
||||||
(label WHITE 255)
|
(label WHITE 255)
|
||||||
(label CHARCOAL 36)
|
(label CHARCOAL 36)
|
||||||
|
|
Loading…
Reference in New Issue