OSDev http://osdev.su/ |
|
IRQ Bochs http://osdev.su/viewtopic.php?f=7&t=661 |
Страница 1 из 1 |
Автор: | pavia [ 05 дек 2012, 13:12 ] |
Заголовок сообщения: | IRQ Bochs |
Какие есть тонкости по настройки? Клавиатуру не могу заставить работать. 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; |
Автор: | Himik [ 05 дек 2012, 15:54 ] |
Заголовок сообщения: | Re: IRQ Bochs |
Реальной проблемы в коде я как-то не вижу. Попробуй не программировать PS/2, тоесть вообще не вызывать процедуру PS2Init, потому что BIOS уже разрешил работу клавиатуры. Стоит попробовать не программировать и PIC, и убедиться в наличии прерывания по старому вектору (INT 9). |
Автор: | pavia [ 05 дек 2012, 16:55 ] |
Заголовок сообщения: | Re: IRQ Bochs |
Не додумался так сразу сделать. Проверил. Оказывается я его снимал раньше чем оно генерировалось у меня в основном цикле было in al,60h Но странностей хватает. Почему-то генерируется прерывание от таймера хотя я его блокирую. И др. |
Автор: | phantom-84 [ 05 дек 2012, 17:17 ] |
Заголовок сообщения: | Re: IRQ Bochs |
У меня используются другие значения для ICW4, более того они различаются для ведущего и ведомого контроллера: Код: mov al,00001101b out 21h,al mov al,00001001b out 0A1h,al Прикола с ret тоже не понял. Не боишься нарваться на данные в стеке, сформированные в прологе процедуры? Кроме того, в Паскале вроде бы есть директива assembler, предназначенная как раз для чисто ассемблерных процедур. pavia писал(а): Почему-то генерируется прерывание от таймера хотя я его блокирую. Это нормально. Нужно изначально использовать полноценные заглушки с EOI и т.п., пока не подключишь рабочие обработчики. Хотя с течением времени прерывания от таймера должны прекратиться, если ты их замаскировал. Может, из-за неправильной инициализации PIC'а APIC вмешался.
|
Автор: | pavia [ 05 дек 2012, 17:31 ] |
Заголовок сообщения: | Re: IRQ Bochs |
Формат ICW4 зависит от контролёра. Такой формат как у меня рекомендован Intel в ICHх. |
Автор: | Himik [ 05 дек 2012, 23:41 ] |
Заголовок сообщения: | Re: IRQ Bochs |
А версия Bochs? В какой-то древней версии (вроде 2.4) не работала маскировка IRQ0. И всё-таки попробуй в первый ICW4 записывать 0Dh, во второй 9. Это гарантированно работает на всех без исключений чипсетах. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |