Прочитайте весь файл (для этого есть тысячи учебных пособий в Google или повторяющиеся вопросы о переполнении стека ) и разбейте на разрыв строки:
MyLines = Split(MyFileContent, vbCrLf)
[ 115] Пятое значение - это строка 5.
MyFifthLine = MyLines(5)
Альтернативно читайте файл построчно, пока не будет достигнута строка 5. Есть также учебники, как читать файлы построчно.
outb
и подобный, запишите в аппаратные порты IO. В основном существует 2 основных опции для общения с устройством. Можно было отобразить устройство на порты IO или память.
Что касается того, как работает этот код, я прокомментирую это для Вас:
ICW обозначает "Слова Команд Инициализации"
outportb(0x20, 0x11); /* write ICW1 to PICM, we are gonna write commands to PICM */
outportb(0xA0, 0x11); /* write ICW1 to PICS, we are gonna write commands to PICS */
outportb(0x21, 0x20); /* remap PICM to 0x20 (32 decimal) */
outportb(0xA1, 0x28); /* remap PICS to 0x28 (40 decimal) */
outportb(0x21, 0x04); /* IRQ2 -> connection to slave */
outportb(0xA1, 0x02);
outportb(0x21, 0x01); /* write ICW4 to PICM, we are gonna write commands to PICM */
outportb(0xA1, 0x01); /* write ICW4 to PICS, we are gonna write commands to PICS */
outportb(0x21, 0x0); /* enable all IRQs on PICM */
outportb(0xA1, 0x0); /* enable all IRQs on PICS */
надеюсь, это поможет
Добро пожаловать в мир ОС dev :) Я также рекомендую посетить: http://forum.osdev.org/, это - неоценимый ресурс для нового хобби разработчик ОС.
Простой ответ заключается в том, что в защищенном режиме прерывания, используемые 1-м программируемым контроллером прерываний, являются исключениями защищенного режима, а это означает, что их необходимо переназначить.
Удачный ответ заключается в том, что только первый PIC
нуждается в переназначении (переназначение второго только для удобства, так как оно начинается с int 70h
).
Вот цитата из оригинального AT BIOS.
INTA00 equ 020h ; 8259 port
INTA01 equ 021h ; 8259 port
INTB00 equ 0A0h ; 2nd 8259
INTB01 equ 0A1h
INT_TYPE equ 070h ; start of 8259 interrupt table location
;---------------------------------------------------------
; re-initialize the 8259 interrupt #1 controller chip :
;---------------------------------------------------------
mov al, 11h ; icw1 - edge, master, icw4
out INTA00,al
jmp $+2 ; wait state for i/o
mov al, 8 ; setup icw2 - int type 8 (8-f)
out INTA01, al
jmp $+2
mov al, 4 ; setup icw3 - master lv 2
out INTA01, al
jmp $+2
mov al, 1 ; setup icw4 - master, 8086 mode
out INTA01, al
jmp $+2
mov al, 0FFh ; mask all ints. off
out INTA01, al ; (video routine enables interrupts)
;---------------------------------------------------------
; re-initialize the 8259 interrupt #2 controller chip :
;---------------------------------------------------------
mov al, 11h ; icw1 - edge, slave icw4
out INTB00, al
jmp $+2
mov al, INT_TYPE ; setup icw2 - int type 70 (70-7f)
out INTB01, al
mov al, 2 ; setup icw3 - slave lv 2
jmp $+2
out INTB01, al
jmp $+2
mov al, 1 ; setup icw4 - 8086 mode, slave
out INTB01, al
jmp $+2
mov al, 0FFh ; mask all ints. off
out INTB01, al
;--------------------------------------------------------------------------------
Технический справочник AT BIOS (c) 1984 IBM
Примечание:
jmp $+2 ; состояние ожидания для ввода/вывода
не требуется на текущем ПК.
icw1
очищает регистр маски прерывания, что разрешает прерывания на этом PIC.
Микросхемы 8259A уже давно нет, но программный интерфейс все еще используется. 8259A Программируемый контроллер прерываний