Int 10h, ах, поскольку 0d в сборке всегда возвращает 0 как цвет пикселя под указателем мыши - PullRequest
2 голосов
/ 09 марта 2020

Код позволяет игроку перемещать мышь, и когда игрок нажимает левую кнопку, он сравнивает цвет нажатого пикселя с красным. int 10h, ах, так как 0d всегда возвращает 0 как цвет пикселя, что мне делать?

mov ax, 0
int 33h
mov ax,1h
int 33h
check:
    mov ax, 3
    int 33h
    cmp bx, 1
    jne check
mov ax, 4
int 33h
xor ax, ax
mov ah, 0Dh
mov bh, 0
int 10h
cmp al, 0100b
je print_white_screen

Ответы [ 2 ]

4 голосов
/ 09 марта 2020

Я предполагаю, что пиксель отображается как черный, потому что именно таков контур указателя мыши. B IOS не компенсирует отображение цвета под указателем мыши. Попробуйте скрыть указатель мыши (int 33h, ah = 02), выполнить считывание пикселей и повторно отобразить указатель (int 33h, ah = 01).

3 голосов
/ 09 марта 2020
  • В зависимости от режима видео вы можете обнаружить неправильную точку экрана.
    Функция мыши 03h всегда возвращает значения X в диапазоне 0-639 и значения Y в диапазоне 0-199 , независимо от режима видео . Но функция видео 0Dh ожидает зависящие от экрана координаты.

  • Координата, сообщаемая мышью, является горячей точкой курсора мыши . Убедитесь, что он соответствует пикселю ON в маске мыши. Вы можете использовать функцию мыши 09h, чтобы определить их самостоятельно. В качестве альтернативы сместите сообщенные координаты так, чтобы они указывали на середину стандартной стрелки мыши. Это точка, которая будет включена.

  • cmp al, 0100b Почему вы ожидаете, что цвет будет красный ? Стандартная стрелка мыши, полученная из функции мыши 00h, будет белая . Лучшее использование cmp al, 15.

  • Если вы тестируете пиксель из фона, вам следует спрятать стрелку мыши (функция мыши 02h), прежде чем спрашивать B IOS чтобы прочитать этот пиксель. В настоящее время ваш код выполняет избыточный вызов функции мыши 04h!

...