update paint programs
This commit is contained in:
parent
54fc748d8d
commit
5d8688446e
|
|
@ -19,26 +19,16 @@
|
|||
(load-offset-32 $16 $15 4) ; load handle
|
||||
|
||||
; outline_swatch(screen, BLACK, 1, 1);
|
||||
(push $21)
|
||||
(push $20)
|
||||
(load-absolute-32 $1 &BLACK)
|
||||
(push $1)
|
||||
(load-immediate $12 1)
|
||||
(push $12)
|
||||
(load-immediate $13 1)
|
||||
(push $13)
|
||||
(call &draw-outlined-swatch)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
|
||||
; outline_swatch(screen, WHITE, 1, 1);
|
||||
(push $21)
|
||||
(push $20)
|
||||
(load-absolute-32 $1 &WHITE)
|
||||
(push $1)
|
||||
(load-immediate $12 21)
|
||||
(push $12)
|
||||
(load-immediate $13 1)
|
||||
(push $13)
|
||||
(call &draw-outlined-swatch)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
|
||||
; screen.draw();
|
||||
(syscall WRITE $0 $21 $22)
|
||||
|
|
@ -57,45 +47,26 @@
|
|||
(load-immediate $14 20) ; box size
|
||||
|
||||
; first row
|
||||
(push $21)
|
||||
(push $20)
|
||||
(load-absolute-32 $1 &BLACK)
|
||||
(push $1)
|
||||
(load-immediate $12 1)
|
||||
(push $12)
|
||||
(load-immediate $13 1)
|
||||
(push $13)
|
||||
(call &draw-outlined-swatch)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
|
||||
; set_color_if_clicked(box_size, box_y, box_x, click_y, click_x, color)
|
||||
(call &set-color-if-clicked ($7 $8 $12 $13 $14 $5) nil)
|
||||
(call &set-color-if-clicked ($7 $8 $12 $13 $1 $14) nil)
|
||||
|
||||
(push $21)
|
||||
(push $20)
|
||||
(load-absolute-32 $1 &WHITE)
|
||||
(push $1)
|
||||
(load-immediate $12 21)
|
||||
(push $12)
|
||||
(load-immediate $13 1)
|
||||
(push $13)
|
||||
(call &draw-outlined-swatch)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
|
||||
; set_color_if_clicked(box_size, box_y, box_x, click_y, click_x, color)
|
||||
(call &set-color-if-clicked ($7 $8 $12 $13 $14 $5) nil)
|
||||
(call &set-color-if-clicked ($7 $8 $12 $13 $1 $14) nil)
|
||||
|
||||
(syscall WRITE $0 $21 $22)
|
||||
|
||||
(load-absolute-32 $22 &SELECTED-COLOR) ; color
|
||||
(load-immediate $1 5) ; size of brush
|
||||
|
||||
(push $21) ;base
|
||||
(push $20) ;width
|
||||
(push $22) ; color
|
||||
(push $7) ;x
|
||||
(push $8) ;y
|
||||
(push $1)
|
||||
(push $1)
|
||||
(call &draw-box)
|
||||
(call &draw-box ($21 $20 $22 $7 $8 $1 $1) nil)
|
||||
|
||||
(jump &draw-loop))
|
||||
|
||||
|
|
@ -103,13 +74,13 @@
|
|||
(halt))
|
||||
|
||||
(label set-color-if-clicked
|
||||
; (click_x, click_y, box_x, box_y, box_size, color)
|
||||
; (click_x, click_y, box_x, box_y, color, box_size)
|
||||
|
||||
; Compute right = box_x + box_size
|
||||
(add-int $6 $2 $4) ; $6 = right edge
|
||||
(add-int $6 $2 $5) ; $6 = right edge
|
||||
|
||||
; Compute bottom = box_y + box_size
|
||||
(add-int $7 $3 $4) ; $7 = bottom edge
|
||||
(add-int $7 $3 $5) ; $7 = bottom edge
|
||||
|
||||
; Bounds check: x in [box_x, right] and y in [box_y, bottom]
|
||||
(jump-lt-int &fail $0 $2)
|
||||
|
|
@ -118,87 +89,56 @@
|
|||
(jump-gt-int &fail $1 $7)
|
||||
|
||||
(load-immediate $10 &SELECTED-COLOR)
|
||||
(store-absolute-8 $10 $5)
|
||||
(store-absolute-8 $10 $4)
|
||||
|
||||
(label fail)
|
||||
(return nil))
|
||||
|
||||
(label draw-outlined-swatch
|
||||
(pop $0)
|
||||
(pop $1) ; color
|
||||
(pop $2) ; x
|
||||
(pop $3) ; y
|
||||
(pop $20)
|
||||
; (base, color, x, y, width)
|
||||
|
||||
; Constants
|
||||
(load-absolute-32 $4 &GRAY)
|
||||
(load-absolute-32 $5 &GRAY)
|
||||
(load-absolute-32 $10 &SELECTED-COLOR)
|
||||
(jump-eq-int &set-selected $10 $1)
|
||||
(jump-eq-int &end-set-selected $4 $4)
|
||||
(jump-eq-int &end-set-selected $5 $5)
|
||||
(label set-selected)
|
||||
(load-absolute-32 $4 &DARK-GRAY)
|
||||
(load-absolute-32 $5 &DARK-GRAY)
|
||||
(label end-set-selected)
|
||||
|
||||
(load-immediate $5 20) ; outline size
|
||||
(load-immediate $6 17) ; fill size
|
||||
(load-immediate $7 2) ; offset
|
||||
(load-immediate $6 20) ; outline size
|
||||
(load-immediate $7 17) ; fill size
|
||||
(load-immediate $8 2) ; offset
|
||||
|
||||
(push $0) ; base
|
||||
(push $20) ; width
|
||||
(push $4) ; color (gray)
|
||||
(push $2) ; x
|
||||
(push $3) ; y
|
||||
(push $5) ; width (20)
|
||||
(push $5) ; height (20)
|
||||
(call &draw-box)
|
||||
(call &draw-box ($0 $4 $5 $2 $3 $6 $6) nil)
|
||||
|
||||
(add-int $8 $2 $7) ; x + 2
|
||||
(add-int $9 $3 $7) ; y + 2
|
||||
(add-int $9 $2 $8) ; x + 2
|
||||
(add-int $10 $3 $8) ; y + 2
|
||||
|
||||
(push $0) ; base
|
||||
(push $20) ; width
|
||||
(push $1) ; color (original)
|
||||
(push $8) ; x + 2
|
||||
(push $9) ; y + 2
|
||||
(push $6) ; width (17)
|
||||
(push $6) ; height (17)
|
||||
(call &draw-box)
|
||||
(call &draw-box ($0 $4 $1 $9 $10 $7 $7) nil)
|
||||
|
||||
(return nil))
|
||||
|
||||
; draw-box(color, x, y)
|
||||
; Pops: y, x, color
|
||||
(label draw-box
|
||||
; Pop arguments (reverse order)
|
||||
(pop $14) ; height
|
||||
(pop $12) ; width
|
||||
(pop $13) ; y_start
|
||||
(pop $11) ; x_start
|
||||
(pop $3) ; color
|
||||
(pop $2) ; width
|
||||
(pop $21) ; base
|
||||
|
||||
; Constants
|
||||
(load-immediate $1 1) ; increment
|
||||
; (base, screen_width, color, x_start, y_start, width, height)
|
||||
|
||||
; 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
|
||||
(mul-int $15 $4 $1) ; $15 = y * 640
|
||||
(add-int $15 $15 $3) ; $15 += x
|
||||
(add-nat $15 $0 $15) ; $15 = base + pixel_offset
|
||||
(load-immediate $25 4)
|
||||
(add-nat $15 $15 $25) ; need to add offset for fat pointer size
|
||||
(register-move $4 $15)
|
||||
(add-nat $15 $15 $25) ; need to add offset for fat pointer size
|
||||
|
||||
; Outer loop: height times
|
||||
(register-move $5 $14) ; $5 = row counter
|
||||
(load-immediate $30 1) ; increment
|
||||
|
||||
(label draw-box-outer
|
||||
(add-int $6 $4 $12) ; $6 = row end = current + width
|
||||
(register-move $7 $4) ; $7 = pixel pointer
|
||||
(memset-8 $7 $3 $12) ; draw row
|
||||
(add-int $4 $4 $2) ; next row (+= 640)
|
||||
(sub-int $5 $5 $1) ; decrement row count
|
||||
(jump-gt-int &draw-box-outer $5 0))
|
||||
(add-int $27 $15 $5) ; $27 = row end = current + width
|
||||
(register-move $29 $15) ; $7 = pixel pointer
|
||||
(memset-8 $29 $2 $5) ; draw row
|
||||
(add-int $15 $15 $1) ; next row (+= 640)
|
||||
(sub-int $6 $6 $30) ; decrement row count
|
||||
(jump-gt-int &draw-box-outer $6 0))
|
||||
(return nil)))
|
||||
(data
|
||||
(label screen-namespace "/dev/screen/0")
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -4,7 +4,7 @@
|
|||
; use load immediate because it is a pointer to a string, not a value
|
||||
(load-immediate $0 &screen-namespace)
|
||||
(load-immediate $11 0)
|
||||
(syscall OPEN $18 $0 $11) ; Screen screen = open(namespace, flags)
|
||||
(syscall OPEN $18 $0 $11) ; open(out Plex screen, in namespace, in flags)
|
||||
|
||||
(load-offset-32 $0 $18 4) ; load handle
|
||||
(load-offset-32 $20 $18 8) ; load width
|
||||
|
|
@ -14,21 +14,61 @@
|
|||
|
||||
; open mouse
|
||||
(load-immediate $16 &mouse-namespace)
|
||||
(syscall OPEN $15 $16 $11) ; Mouse mouse = open(namespace, flags)
|
||||
(syscall OPEN $15 $16 $11) ; open(out Plex mouse, in namespace, in flags)
|
||||
|
||||
(load-offset-32 $16 $15 4) ; load handle
|
||||
|
||||
; outline_swatch(screen, BLACK, 1, 1, width);
|
||||
; outline_swatch(screen, BLACK, 1, 1);
|
||||
(load-absolute-32 $1 &BLACK)
|
||||
(load-immediate $12 1)
|
||||
(load-immediate $13 1)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
|
||||
; outline_swatch(screen, WHITE, 1, 1, width);
|
||||
; outline_swatch(screen, WHITE, 1, 1);
|
||||
(load-absolute-32 $1 &WHITE)
|
||||
(load-immediate $12 21)
|
||||
(load-immediate $13 1)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
|
||||
(load-absolute-32 $1 &CHARCOAL)
|
||||
(load-immediate $12 1)
|
||||
(load-immediate $13 21)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
|
||||
(load-absolute-32 $1 &DARK-GRAY)
|
||||
(load-immediate $12 21)
|
||||
(load-immediate $13 21)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
|
||||
(load-absolute-32 $1 &RED)
|
||||
(load-immediate $12 1)
|
||||
(load-immediate $13 41)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
|
||||
(load-absolute-32 $1 &ORANGE)
|
||||
(load-immediate $12 21)
|
||||
(load-immediate $13 41)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
|
||||
(load-absolute-32 $1 &YELLOW)
|
||||
(load-immediate $12 1)
|
||||
(load-immediate $13 61)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
|
||||
(load-absolute-32 $1 &GREEN)
|
||||
(load-immediate $12 21)
|
||||
(load-immediate $13 61)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
|
||||
(load-absolute-32 $1 &BLUE)
|
||||
(load-immediate $12 1)
|
||||
(load-immediate $13 81)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
|
||||
(load-absolute-32 $1 &PURPLE)
|
||||
(load-immediate $12 21)
|
||||
(load-immediate $13 81)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
|
||||
; screen.draw();
|
||||
(syscall WRITE $0 $21 $22)
|
||||
|
|
@ -46,132 +86,82 @@
|
|||
|
||||
(load-immediate $14 20) ; box size
|
||||
|
||||
; first row
|
||||
; outline_swatch(screen, BLACK, 1, 1);
|
||||
(load-absolute-32 $1 &BLACK)
|
||||
(load-immediate $12 1)
|
||||
(load-immediate $13 1)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
|
||||
; set_color_if_clicked(color, click_x, click_y, box_x, box_y, 20);
|
||||
(call &set-color-if-clicked ($1 $7 $8 $12 $13 $14) nil)
|
||||
|
||||
(call &set-color-if-clicked ($7 $8 $12 $13 $1 $14) nil)
|
||||
|
||||
; outline_swatch(screen, WHITE, 1, 1);
|
||||
(load-absolute-32 $1 &WHITE)
|
||||
(load-immediate $12 21)
|
||||
(load-immediate $13 1)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
|
||||
; set_color_if_clicked(color, click_x, click_y, box_x, box_y, 20);
|
||||
(call &set-color-if-clicked ($1 $7 $8 $12 $13 $14) nil)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
(call &set-color-if-clicked ($7 $8 $12 $13 $1 $14) nil)
|
||||
|
||||
; row 2
|
||||
(load-absolute-32 $1 &CHARCOAL)
|
||||
(load-immediate $12 1)
|
||||
(load-immediate $13 21)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
|
||||
; set_color_if_clicked(color, click_x, click_y, box_x, box_y, 20);
|
||||
(call &set-color-if-clicked ($1 $7 $8 $12 $13 $14) nil)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
(call &set-color-if-clicked ($7 $8 $12 $13 $1 $14) nil)
|
||||
|
||||
(push $21)
|
||||
(push $20)
|
||||
(load-absolute-32 $1 &DARK-GRAY)
|
||||
(push $1)
|
||||
(load-immediate $12 21)
|
||||
(push $12)
|
||||
(load-immediate $13 21)
|
||||
(push $13)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
|
||||
; set_color_if_clicked(color, click_x, click_y, box_x, box_y, 20);
|
||||
(call &set-color-if-clicked ($1 $7 $8 $12 $13 $14) nil)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
(call &set-color-if-clicked ($7 $8 $12 $13 $1 $14) nil)
|
||||
|
||||
; row 3
|
||||
(push $21)
|
||||
(push $20)
|
||||
(load-absolute-32 $1 &RED)
|
||||
(push $1)
|
||||
(load-immediate $12 1)
|
||||
(push $12)
|
||||
(load-immediate $13 41)
|
||||
(push $13)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
|
||||
; set_color_if_clicked(color, click_x, click_y, box_x, box_y, 20);
|
||||
(call &set-color-if-clicked ($1 $7 $8 $12 $13 $14) nil)
|
||||
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
(call &set-color-if-clicked ($7 $8 $12 $13 $1 $14) nil)
|
||||
|
||||
(load-absolute-32 $1 &ORANGE)
|
||||
(load-immediate $12 21)
|
||||
(load-immediate $13 41)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
|
||||
; set_color_if_clicked(color, click_x, click_y, box_x, box_y, 20);
|
||||
(call &set-color-if-clicked ($1 $7 $8 $12 $13 $14) nil)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
(call &set-color-if-clicked ($7 $8 $12 $13 $1 $14) nil)
|
||||
|
||||
; row 3
|
||||
(load-absolute-32 $1 &YELLOW)
|
||||
(load-immediate $12 1)
|
||||
(load-immediate $13 61)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
|
||||
; set_color_if_clicked(color, click_x, click_y, box_x, box_y, 20);
|
||||
(call &set-color-if-clicked ($1 $7 $8 $12 $13 $14) nil)
|
||||
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
(call &set-color-if-clicked ($7 $8 $12 $13 $1 $14) nil)
|
||||
|
||||
(load-absolute-32 $1 &GREEN)
|
||||
(load-immediate $12 21)
|
||||
(load-immediate $13 61)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
|
||||
; set_color_if_clicked(color, click_x, click_y, box_x, box_y, 20);
|
||||
(call &set-color-if-clicked ($1 $7 $8 $12 $13 $14) nil)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
(call &set-color-if-clicked ($7 $8 $12 $13 $1 $14) nil)
|
||||
|
||||
; row 4
|
||||
(load-absolute-32 $1 &BLUE)
|
||||
(load-immediate $12 1)
|
||||
(load-immediate $13 81)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
|
||||
; set_color_if_clicked(color, click_x, click_y, box_x, box_y, 20);
|
||||
(call &set-color-if-clicked ($1 $7 $8 $12 $13 $14) nil)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
(call &set-color-if-clicked ($7 $8 $12 $13 $1 $14) nil)
|
||||
|
||||
(load-absolute-32 $1 &PURPLE)
|
||||
(load-immediate $12 21)
|
||||
(load-immediate $13 81)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
|
||||
; set_color_if_clicked(color, click_x, click_y, box_x, box_y, 20);
|
||||
(call &set-color-if-clicked ($1 $7 $8 $12 $13 $14) nil)
|
||||
(call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil)
|
||||
(call &set-color-if-clicked ($7 $8 $12 $13 $1 $14) nil)
|
||||
|
||||
(syscall WRITE $0 $21 $22)
|
||||
|
||||
(load-absolute-32 $22 &SELECTED-COLOR) ; color
|
||||
(load-immediate $1 5) ; size of brush
|
||||
|
||||
(push $21) ;base
|
||||
(push $20) ;width
|
||||
(push $22) ; color
|
||||
(push $7) ;x
|
||||
(push $8) ;y
|
||||
(push $1)
|
||||
(push $1)
|
||||
; draw_box(brush_size, )
|
||||
(call &draw-box ($1 $1 $8 $7 $22 $20 $21) nil)
|
||||
(call &draw-box ($21 $20 $22 $7 $8 $1 $1) nil)
|
||||
|
||||
(jump &draw-loop))
|
||||
|
||||
; Flush and halt
|
||||
(halt))
|
||||
|
||||
(label set-color-if-clicked
|
||||
; Pop inputs from stack (in reverse order of pushing)
|
||||
(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
|
||||
(label set-color-if-clicked
|
||||
; (click_x, click_y, box_x, box_y, color, box_size)
|
||||
|
||||
; Compute right = box_x + box_size
|
||||
(add-int $6 $2 $5) ; $6 = right edge
|
||||
|
|
@ -186,88 +176,57 @@
|
|||
(jump-gt-int &fail $1 $7)
|
||||
|
||||
(load-immediate $10 &SELECTED-COLOR)
|
||||
(store-absolute-8 $10 $11)
|
||||
(store-absolute-8 $10 $4)
|
||||
|
||||
(label fail)
|
||||
(return))
|
||||
(return nil))
|
||||
|
||||
(label draw-outlined-swatch
|
||||
(pop $3) ; y
|
||||
(pop $2) ; x
|
||||
(pop $1) ; color
|
||||
(pop $20)
|
||||
(pop $21)
|
||||
; (base, color, x, y, width)
|
||||
|
||||
; Constants
|
||||
(load-absolute-32 $4 &GRAY)
|
||||
(load-absolute-32 $5 &GRAY)
|
||||
(load-absolute-32 $10 &SELECTED-COLOR)
|
||||
(jump-eq-int &set-selected $10 $1)
|
||||
(jump-eq-int &end-set-selected $4 $4)
|
||||
(jump-eq-int &end-set-selected $5 $5)
|
||||
(label set-selected)
|
||||
(load-absolute-32 $4 &DARK-GRAY)
|
||||
(load-absolute-32 $5 &DARK-GRAY)
|
||||
(label end-set-selected)
|
||||
|
||||
(load-immediate $5 20) ; outline size
|
||||
(load-immediate $6 17) ; fill size
|
||||
(load-immediate $7 2) ; offset
|
||||
(load-immediate $6 20) ; outline size
|
||||
(load-immediate $7 17) ; fill size
|
||||
(load-immediate $8 2) ; offset
|
||||
|
||||
(push $21) ; base
|
||||
(push $20) ; width
|
||||
(push $4) ; color (gray)
|
||||
(push $2) ; x
|
||||
(push $3) ; y
|
||||
(push $5) ; width (20)
|
||||
(push $5) ; height (20)
|
||||
(call &draw-box)
|
||||
(call &draw-box ($0 $4 $5 $2 $3 $6 $6) nil)
|
||||
|
||||
(add-int $8 $2 $7) ; x + 2
|
||||
(add-int $9 $3 $7) ; y + 2
|
||||
(add-int $9 $2 $8) ; x + 2
|
||||
(add-int $10 $3 $8) ; y + 2
|
||||
|
||||
(push $21) ; base
|
||||
(push $20) ; width
|
||||
(push $1) ; color (original)
|
||||
(push $8) ; x + 2
|
||||
(push $9) ; y + 2
|
||||
(push $6) ; width (17)
|
||||
(push $6) ; height (17)
|
||||
(call &draw-box)
|
||||
(call &draw-box ($0 $4 $1 $9 $10 $7 $7) nil)
|
||||
|
||||
(return))
|
||||
(return nil))
|
||||
|
||||
; draw-box(color, x, y)
|
||||
; Pops: y, x, color
|
||||
(label draw-box
|
||||
; Pop arguments (reverse order)
|
||||
(pop $14) ; height
|
||||
(pop $12) ; width
|
||||
(pop $13) ; y_start
|
||||
(pop $11) ; x_start
|
||||
(pop $3) ; color
|
||||
(pop $2) ; width
|
||||
(pop $21) ; base
|
||||
|
||||
; Constants
|
||||
(load-immediate $1 1) ; increment
|
||||
; (base, screen_width, color, x_start, y_start, width, height)
|
||||
|
||||
; 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
|
||||
(mul-int $15 $4 $1) ; $15 = y * 640
|
||||
(add-int $15 $15 $3) ; $15 += x
|
||||
(add-nat $15 $0 $15) ; $15 = base + pixel_offset
|
||||
(load-immediate $25 4)
|
||||
(add-nat $15 $15 $25) ; need to add offset for fat pointer size
|
||||
(register-move $4 $15)
|
||||
(add-nat $15 $15 $25) ; need to add offset for fat pointer size
|
||||
|
||||
; Outer loop: height times
|
||||
(register-move $5 $14) ; $5 = row counter
|
||||
(load-immediate $30 1) ; increment
|
||||
|
||||
(label draw-box-outer
|
||||
(add-int $6 $4 $12) ; $6 = row end = current + width
|
||||
(register-move $7 $4) ; $7 = pixel pointer
|
||||
(memset-8 $7 $3 $12) ; draw row
|
||||
(add-int $4 $4 $2) ; next row (+= 640)
|
||||
(sub-int $5 $5 $1) ; decrement row count
|
||||
(jump-gt-int &draw-box-outer $5 0))
|
||||
(return)))
|
||||
(add-int $27 $15 $5) ; $27 = row end = current + width
|
||||
(register-move $29 $15) ; $7 = pixel pointer
|
||||
(memset-8 $29 $2 $5) ; draw row
|
||||
(add-int $15 $15 $1) ; next row (+= 640)
|
||||
(sub-int $6 $6 $30) ; decrement row count
|
||||
(jump-gt-int &draw-box-outer $6 0))
|
||||
(return nil)))
|
||||
(data
|
||||
(label screen-namespace "/dev/screen/0")
|
||||
(label mouse-namespace "/dev/mouse/0")
|
||||
|
|
|
|||
BIN
test/paint.rom
BIN
test/paint.rom
Binary file not shown.
Loading…
Reference in New Issue