OSDev

для всех
Текущее время: 27 апр 2024, 13:32

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: IRQ & VESA
СообщениеДобавлено: 02 мар 2013, 20:48 

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 277
случий просто анегдотический,
написал 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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: IRQ & VESA
СообщениеДобавлено: 02 мар 2013, 21:25 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
А кто оригинальные значения регистров будет сохранять/восстанавливать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: IRQ & VESA
СообщениеДобавлено: 02 мар 2013, 21:39 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Любой ОСе писатель знает что прерывания должны быть короткими. Да бы не повесить всю систему.
Так что надо включить прерывания.
Да и отлаживать легче. Так как внутри прерывания мы сможем ловить исключения.
Так что советую использовать.
STI ; ENABLE INTERRUPTS


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: IRQ & VESA
СообщениеДобавлено: 02 мар 2013, 21:46 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Код:
 in      al,61H
   mov     ah,al
   or      al,80h
   out     61H,al

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

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

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

Код:
call    simb_prb

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB