OSDev

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

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




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: IRQ Bochs
СообщениеДобавлено: 05 дек 2012, 13:12 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Какие есть тонкости по настройки?
Клавиатуру не могу заставить работать. IRQ не генерируется.
Использую PIC. Работаю в защищенном режиме.

Код:
// Инициализация контроллера 8042
procedure PS2Init;
var b:Byte;
begin
PS2Flush;
PS2Command(PS2CMD_ReadCFG);
b:=IOReadB($60);
b:=(b and $8C) or $43; // Включаем IRQ для клавы и мыши.
PS2Command(PS2CMD_WriteCFG);
IOWriteB($60,b);

end;

procedure EnableInt;
assembler;
asm
IN   AL,70h
AND  AL,07Fh
OUT  70h,AL

STI

IN   AL, 21h
MOV  AL, 0FDh  // Включаем только клаву
OUT  21h, AL

RET
end;

procedure InitPICs;
// Иницилизируем контролеры прерываний PIC 8259A.
begin
asm
        MOV    DX, MASTER8259A     // Ведущий
        MOV    AH, 20h    //Номер начального прерывания для ведущего контроллера 08 стандартное для реального режима
                                // Для защищенного Я выбрал 20h
        MOV     AL,11h     //ICW1 бит 0=1 сигнализирует, что будет послан ICW4
        OUT     DX,AL
        MOV     AL,AH      //ICW2  - начальный номера прерываний биты 2-0=0.
        INC      DX
        OUT     DX,AL
        MOV     AL,4       //ICW3 ведущий 00000100 -  ведомый подключен ко второй линии
        OUT     DX,AL
        MOV     AL,1       //ICW4 режим 86/88
        OUT     DX,AL

        MOV    DX, SLAVE8259A     // Ведомый
        MOV    AH, 28h    //Номер начального прерывания для ведомого контроллера 70h стандартное для реального режима
                                // Для защищенного Я выбрал 28h
        MOV     AL,11h     //ICW1 бит 0=1 сигнализирует, что будет послан ICW4
        OUT     DX,AL
        MOV     AL,AH      //ICW2  - начальный номера прерываний биты 2-0=0.
        INC     DX
        OUT     DX,AL
        MOV     AL,2       //ICW3 ведомый, ведомый подключен ко второй линии ведущего
        OUT     DX,AL
        MOV     AL,1       //ICW4 режим 86/88
        OUT     DX,AL
        RET
end;
end;


Последний раз редактировалось pavia 26 май 2014, 19:40, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: IRQ Bochs
СообщениеДобавлено: 05 дек 2012, 15:54 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Реальной проблемы в коде я как-то не вижу. Попробуй не программировать PS/2, тоесть вообще не вызывать процедуру PS2Init, потому что BIOS уже разрешил работу клавиатуры.
Стоит попробовать не программировать и PIC, и убедиться в наличии прерывания по старому вектору (INT 9).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: IRQ Bochs
СообщениеДобавлено: 05 дек 2012, 16:55 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Не додумался так сразу сделать.
Проверил.
Оказывается я его снимал раньше чем оно генерировалось у меня в основном цикле было
in al,60h
Но странностей хватает.
Почему-то генерируется прерывание от таймера хотя я его блокирую. И др.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: IRQ Bochs
СообщениеДобавлено: 05 дек 2012, 17:17 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
У меня используются другие значения для ICW4, более того они различаются для ведущего и ведомого контроллера:
Код:
                mov al,00001101b
                out 21h,al
                mov al,00001001b
                out 0A1h,al

Прикола с ret тоже не понял. Не боишься нарваться на данные в стеке, сформированные в прологе процедуры? Кроме того, в Паскале вроде бы есть директива assembler, предназначенная как раз для чисто ассемблерных процедур.

pavia писал(а):
Почему-то генерируется прерывание от таймера хотя я его блокирую.
Это нормально. Нужно изначально использовать полноценные заглушки с EOI и т.п., пока не подключишь рабочие обработчики. Хотя с течением времени прерывания от таймера должны прекратиться, если ты их замаскировал. Может, из-за неправильной инициализации PIC'а APIC вмешался.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: IRQ Bochs
СообщениеДобавлено: 05 дек 2012, 17:31 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Формат ICW4 зависит от контролёра.
Такой формат как у меня рекомендован Intel в ICHх.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: IRQ Bochs
СообщениеДобавлено: 05 дек 2012, 23:41 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
А версия Bochs? В какой-то древней версии (вроде 2.4) не работала маскировка IRQ0.

И всё-таки попробуй в первый ICW4 записывать 0Dh, во второй 9. Это гарантированно работает на всех без исключений чипсетах.


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

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


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

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


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

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