ibis-os/main.asm
2024-07-26 12:58:43 +03:00

114 lines
1.4 KiB
NASM

; Bootloader
%include "boot.asm"
section KERNEL follows=BOOTSECTOR vstart=1000h
%macro mod 2
push ax
push cx
mov cx, %2
xor dx, dx
mov ax, %1
div cx
pop cx
pop ax
%endmacro
main:
call gfx_init_vga13
; Important for mouse stuff definitely
jmp 0x000:.setcs
.setcs:
call mouse_initialize
call mouse_enable
lp:
call update_mouse
jmp lp
jmp $ ; Halt
update_mouse:
cli
mov bx, [mouseX]
mov ax, [mouseY]
sti
mov cx, [lastMouseX]
mov dx, [lastMouseY]
push bx
push ax
xor bx, cx
jnz .update
xor ax, dx
jnz .update
pop ax
pop bx
ret
.update:
pop ax
pop bx
call clear_last_mouse
call render_mouse
mov [lastMouseX], bx
mov [lastMouseY], ax
ret
; cx = lastMouseX
; dx = lastMouseY
clear_last_mouse:
pusha
mov al, dl
mov dx, 11
mov bl, 18
mov bh, 0
call gfx_rect
popa
ret
; bx = mouseX
; ax = mouseY
render_mouse:
pusha
mov dx, 0
mov cx, 320
mul cx
add ax, bx
mov di, ax
mov si, gfxd_cursor
mov ax, 11
mov bl, 18
call _gfx_blit0
popa
ret
; Libs
%include "print_util.asm"
%include "mouse_util.asm"
;%include "time_util.asm"
%include "gfx_util.asm"
; Data
HELLO_WORLD:
db 'Hello, world! :D', 0
No:
db 'No.', 0
lastMouseX: dw 0
lastMouseY: dw 0
%include "gfx/gfxd_cursor.asm"