OSDev
http://osdev.su/

IRQ & VESA
http://osdev.su/viewtopic.php?f=6&t=702
Страница 1 из 1

Автор:  scuter [ 02 мар 2013, 20:48 ]
Заголовок сообщения:  IRQ & VESA

случий просто анегдотический,
написал 2-е функции которая рисует квадраты,
запихнул их в прерывание клавиатуры,

при запуске почему то срабатывает 1-ая(simb_prb) функция,
а вторая(vesa_box) при нажатии клавишь
IRQ
Код:
IRQ2:
   push   ax
   in      al,60h      ; AL содержит скан-код клавиатуры, но в
            ;  этом примере он не сохраняется -
            ;  обработчик IRQ 1 работает как заглушка.
   in      al,61H
   mov     ah,al
   or      al,80h
   out     61H,al
   xchg    ah,al
   out     61H,al
   mov     eax, 3
   call    simb_prb
   mov     eax, 2
   call    vesa_box
   mov       al,20h
   out       20h,al
   pop       ax
   IRETD

FUNCTION
Код:
simb_prb:
   imul eax, 30
   mov  ebx, eax
   mov  eax, 100
   xor  edx, edx
   mov  dx , [vbe_mode.XResolution]
   imul eax, edx
   add  eax, ebx
   imul eax, 3
   add  eax, [vbe_mode.PhysBasePtr]
   mov  edi, eax
   mov  ecx, 20
simb_prb_agn:
   mov  ebx, ecx
   mov   al, 99h
   mov  ecx, 60
   rep  stosb
   xor  eax, eax
   mov   ax, [vbe_mode.XResolution]
   imul eax, 3
   add  edi, eax
   sub  edi, 60
   mov  ecx, ebx
   loop simb_prb_agn
   ret
vesa_box:
   ; y*W+x
   ; 20*W+50*a
   imul eax, 30
   mov  ebx, eax
   mov  eax, 20
   xor  edx, edx
   mov  dx , [vbe_mode.XResolution]
   imul eax, edx
   add  eax, ebx
   imul eax, 3
   add  eax, [vbe_mode.PhysBasePtr]
   mov  edi, eax
   mov  ecx, 20
vesa_box_agn:
   mov  ebx, ecx
   mov   al, 99h
   mov  ecx, 60
   rep  stosb
   xor  eax, eax
   mov   ax, [vbe_mode.XResolution]
   imul eax, 3
   add  edi, eax
   sub  edi, 60
   mov  ecx, ebx
   loop vesa_box_agn
   RET

Автор:  phantom-84 [ 02 мар 2013, 21:25 ]
Заголовок сообщения:  Re: IRQ & VESA

А кто оригинальные значения регистров будет сохранять/восстанавливать?

Автор:  pavia [ 02 мар 2013, 21:39 ]
Заголовок сообщения:  Re: IRQ & VESA

Любой ОСе писатель знает что прерывания должны быть короткими. Да бы не повесить всю систему.
Так что надо включить прерывания.
Да и отлаживать легче. Так как внутри прерывания мы сможем ловить исключения.
Так что советую использовать.
STI ; ENABLE INTERRUPTS

Автор:  pavia [ 02 мар 2013, 21:46 ]
Заголовок сообщения:  Re: IRQ & VESA

Код:
 in      al,61H
   mov     ah,al
   or      al,80h
   out     61H,al

Это код от XT машин. А насколько мне известно они VESA не поддерживают.
Так что этот код лишний. Я бы сказал неправильный.

Цитата:
IRQ2:
; обработчик IRQ 1 работает как заглушка.

Ты уж определись 1 или 2?

Код:
call    simb_prb

Прежде чем что-то вызывать или читать не плохо настроить сегментные регистры.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/