114 lines
1.4 KiB
NASM
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" |