diff --git a/ponydos.asm b/ponydos.asm index c74b366..47ee706 100644 --- a/ponydos.asm +++ b/ponydos.asm @@ -71,43 +71,33 @@ initialize_screen: rep stosw ; Disable text cursor - mov dx, 0x3d4 - mov al, 0xa - out dx, al - inc dx - mov al, 0x20 - out dx, al + mov ah, 0x01 + mov ch, 0x20 + int 0x10 - xor ax, ax call flip_mouse_cursor mainloop: mov bx, [mouse_x] + shr bx, 1 mov cx, [mouse_y] - cmp [mouse_x_old], bx + shr cx, 1 + shr cx, 1 + cmp [mouse_column], bl jne .update_cursor - cmp [mouse_y_old], cx + cmp [mouse_row], cl jne .update_cursor hlt jmp mainloop .update_cursor: - mov ah, [mouse_x_old] - mov al, [mouse_y_old] call flip_mouse_cursor - mov ah, [mouse_x] - mov al, [mouse_y] + mov [mouse_column], bl + mov [mouse_row], cl call flip_mouse_cursor - - mov [mouse_x_old], bx - mov [mouse_y_old], cx - jmp mainloop -; in: -; ah = column -; al = row flip_mouse_cursor: push ax push bx @@ -119,10 +109,11 @@ flip_mouse_cursor: ; Column xor bh, bh - mov bl, ah + mov bl, [mouse_column] shl bx, 1 ; Row + mov al, [mouse_row] mov cl, COLUMNS*2 mul cl add bx, ax @@ -146,8 +137,8 @@ Y_NEGATIVE equ 0x20 X_NEGATIVE equ 0x10 BUTTONS equ 0x03 -X_MAX_VALUE equ COLUMNS-1 -Y_MAX_VALUE equ ROWS-1 +X_MAX_VALUE equ 2*COLUMNS-1 +Y_MAX_VALUE equ 4*ROWS-1 mouse_handler: push ax @@ -254,7 +245,7 @@ mouse_x resw 1 mouse_y resw 1 mouse_buttons resb 1 -mouse_x_old resw 1 -mouse_y_old resw 1 +mouse_column resb 1 +mouse_row resw 1 _bss_end: