mouse render
This commit is contained in:
parent
941eed0ac9
commit
16135ae536
|
@ -1,6 +1,8 @@
|
|||
.{memory, buffer, log, string, math} := @use("../../../libraries/stn/src/lib.hb")
|
||||
Vec2 := math.Vec2
|
||||
|
||||
render := @use("../../../libraries/render/src/lib.hb")
|
||||
|
||||
i9 := packed struct {sign: bool, value: u8}
|
||||
Button := struct {id: u8}
|
||||
LeftButton := Button.(1)
|
||||
|
@ -82,20 +84,31 @@ set_resolution := fn(resolution: Resolution): void {
|
|||
@inline(send_command_byte, resolution.value)
|
||||
}
|
||||
|
||||
set_up_mouse := fn(): void {
|
||||
@inline(reset_mouse)
|
||||
@inline(set_resolution, res_8count_per_mm)
|
||||
@inline(enable_streaming)
|
||||
}
|
||||
|
||||
button_states := @as(u8, 0)
|
||||
|
||||
main := fn(): int {
|
||||
format_page := memory.alloc(u8, 1024)
|
||||
|
||||
screen := render.init(true)
|
||||
|
||||
// Clear the screen to black.
|
||||
render.clear(screen, render.black)
|
||||
|
||||
send_byte(0x64, 0xA8)
|
||||
log.info("Aux mouse device enabled.\0")
|
||||
|
||||
reset_mouse()
|
||||
set_defaults()
|
||||
enable_streaming()
|
||||
set_up_mouse()
|
||||
|
||||
x := @as(i16, 0)
|
||||
y := @as(i16, 0)
|
||||
set_resolution(res_8count_per_mm)
|
||||
|
||||
x := @as(u8, 0)
|
||||
y := @as(u8, 0)
|
||||
|
||||
loop {
|
||||
loop if (memory.inb(0x64) & 0x20) == 0x20 break
|
||||
|
@ -104,9 +117,7 @@ main := fn(): int {
|
|||
if status == 0xAA {
|
||||
loop if memory.inb(0x60) == 0 break
|
||||
log.info("Mouse plugged in!\0")
|
||||
reset_mouse()
|
||||
set_defaults()
|
||||
enable_streaming()
|
||||
set_up_mouse()
|
||||
continue
|
||||
}
|
||||
|
||||
|
@ -132,12 +143,20 @@ main := fn(): int {
|
|||
dx.value = memory.inb(0x60)
|
||||
dx.sign = (status & 0x10) > 0
|
||||
|
||||
dy.value = memory.inb(0x60) ^ 0xFF
|
||||
dy.value = -memory.inb(0x60)
|
||||
dy.sign = (status & 0x20) == 0
|
||||
|
||||
if dy.value != 0 & dx.value != 0 {
|
||||
mouse_moved(.(dx, dy))
|
||||
x += dx.value
|
||||
y += dy.value
|
||||
}
|
||||
|
||||
render.clear(screen, render.black)
|
||||
|
||||
render.put_rect(screen, .(x, y), .(10, 10), render.white)
|
||||
// Sync the screen
|
||||
render.sync(screen)
|
||||
}
|
||||
|
||||
return 0
|
||||
|
|
Loading…
Reference in a new issue