mov al, [bp+12]
mov bl, al
mov cl, 3
shl al, cl
sbb dh, dh
cbw
mov dl, [bp+8]
mov al, [bp+10]
Этот кусок кода из обработчика перемещений мыши должен делать знаковое расширение 9-битных координат, но я вижу, что в существующем коде в обработчик перемещений всегда приходят нули в координатах x и y, а из-за этого знакового расширения отрицательные dx и dy всегда становятся равными -256. Если добавить вызов функции initialize (0xc205) прерывания 0x15 в mouse.init с 3-байтными пакетами:
kernel.routine.mouse.init:
push es bx
int 0x11
test ax, 4
jz kernel.routine.mouse.init.error
mov ax, 0xC205
mov bh, 3
int 0x15
jc kernel.routine.mouse.init.error
mov ax, 0xC203
mov bh, MOUSE_RESOLUTION
int 0x15
jc kernel.routine.mouse.init.error
то у меня всё начинает работать как ожидалось.
Кстати в ответе на SO по твоей ссылке вызов этой функции есть, непонятно зачем ты его выкинул.