سؤال

أنا بعد عدة دروس و مراجع يحاول الحصول على نواة اقامة.لقد جئت عبر بعض غير مألوف البرمجية في البرنامج التعليمي الذي ليس شرح ذلك على الإطلاق.إنه رمز أنني قلت خرائط 16 IRQs (0-15) إلى ISR المواقع 32-47:

void irq_remap(void)
{
    outportb(0x20, 0x11);
    outportb(0xA0, 0x11);
    outportb(0x21, 0x20);
    outportb(0xA1, 0x28);
    outportb(0x21, 0x04);
    outportb(0xA1, 0x02);
    outportb(0x21, 0x01);
    outportb(0xA1, 0x01);
    outportb(0x21, 0x0);
    outportb(0xA1, 0x0);
}

رمز outportb() هو على النحو التالي ، ولكن لدي فهم واضح من ما يفعل:

void outPortB(unsigned short port, unsigned char data)
{
    __asm__ __volatile__ ("outb %1, %0" : : "dN" (port), "a" (data));
}

أود أن أذكر أن هذا هو على x86 العمارة في الوضع المحمي.هذا الكود يعمل بشكل جيد وأنا أفهم ماذا يفعل, ولكن أنا لا أفهم كيف يفعل ذلك.يمكن للشخص أن يفسر لي ما يحدث هنا ، بحيث في حال كنت بحاجة إلى التوسع في هذا أعرف ماذا أفعل ؟

هل كانت مفيدة؟

المحلول

و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 */

ويساعد هذا الأمل

ومرحبا بكم في عالم OS ديف :) أنا أيضا ننصح زيارة: HTTP: //forum.osdev. غزاله / ، فمن مصدرا قيما للمطور هواية نظام التشغيل الجديد.

نصائح أخرى

الجواب بسيط هو أنه في الوضع المحمي المقاطعات التي تستخدمها 1 للبرمجة المقاطعة تحكم محمية وضع استثناءات ، الأمر الذي يعني أنها يجب أن تكون إعادة تعيين.

سعيد الجواب هو أن الأولى فقط PIC يحتاج إلى إعادة تعيين ( على الخارطه من الثانية فقط للراحة لأنه يبدأ في int 70h).هنا اقتباس من الأصل في 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
;--------------------------------------------------------------------------------

المرجع التقني في السير (ج) 1984 IBM

ملاحظة:

على jmp $+2 ; wait state for i/o غير مطلوب على الكمبيوتر الحالي.

على icw1 مسح تسجيل قناع المقاطعة التي تمكن يقطع على أن الموافقة المسبقة عن علم.

على 8259A رقاقة ذهب منذ فترة طويلة ولكن واجهة برمجة لا تزال تستخدم.8259A القابلة للبرمجة تحكم المقاطعة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top