Установка отображения IRQ

Прочитайте весь файл (для этого есть тысячи учебных пособий в Google или повторяющиеся вопросы о переполнении стека ) и разбейте на разрыв строки:

MyLines = Split(MyFileContent, vbCrLf)

[ 115] Пятое значение - это строка 5.

MyFifthLine = MyLines(5)

Альтернативно читайте файл построчно, пока не будет достигнута строка 5. Есть также учебники, как читать файлы построчно.

9
задан GWX 8 May 2016 в 00:08
поделиться

2 ответа

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/, это - неоценимый ресурс для нового хобби разработчик ОС.

12
ответ дан 4 December 2019 в 15:28
поделиться

Простой ответ заключается в том, что в защищенном режиме прерывания, используемые 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 Программируемый контроллер прерываний

1
ответ дан 4 December 2019 в 15:28
поделиться