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/