pic 의 irq 할당에 대해...

kkojiband의 이미지

isa 장치의 경우에는 사용하는 인터럽트 핀이 고정되어 있고, pci 장치의 경우에는 pci slot 에 있는 A, B, C, D pin 에 각각 인트럽트 핀이 연결이되어 있더군요...

그리고 초기에 pci bios 가 irq 를 할당할때 A, B, C, D 핀중에 하나를 선택해서(거의 A pin) 그에 연결된 irq 를 pci 설정 공간에 저장한다고 되어있던데...

그럼 pci 도 irq 자체는 고정되어 있는거죠?

pic 에 대해 더 찾아보니 받은 irq 를 해당 벡터로 변환해서 cpu에 넘겨준다고 되어있던데...

초기 설정된 그 벡터를 다른 값으로 바꾸면(irq 번호를 바꾸는) 실질적으로 pci 가 가지고 있는 irq 번호와 pic 가 cpu 에 넘겨주는 벡터 값과는 차이가 생기는거 아닌가요? 그럼 여기서 cpu 가 가지고 있는 pci 장치의 irq 값은 어느 값이죠?? 만약 여기서 pci 가 가지고 있는 irq 번호까지 바뀐다면 말이 안되지 않나요? 연결된 선 번호가 틀리게 되는거니까요...

음...pic 가 irq 번호를 재프로그래밍한다는게 대체 뭔지를 모르겠습니다...--;

그리고 펜티엄에서 쓰는 pic 가 8259a pic 맞죠?

짧은 영어 실력으로 원서를 뒤적뒤적해봤는데, 당췌 이해가 안됩니다...T.T

아시는 분 좀 도와주세요...T.T

Necromancer의 이미지

IRQ -> INT 변환은 마음대로 매핑할 수 있습니다.

어셈블리로 짜면 아래와 같이 됩니다.
(APIC가 작동할때는 저도 모르겠습니다만, 기존 XT/AT PIC일때는
아래의 코드로 변경 가능합니다.)

; Master PIC INT Base 변경하기 (IRQ 0-7 대응 INT)
 
mov all,11h
out 20h,al
mov al,<벡터번호>
out 21h,al
mov al,4
out 21h,al
mov al,1
out 21h.al

; Slave PIC INT Base 변경하기 (IRQ 8-15 대응 INT)
mov al,11h
out 0a0h,al
mov al,<벡터번호>
out 0a1h,al
mov al,2
out 0a1h,al
mov al,1
out 0a1h,al

이렇게 하면 IRQ0-7의 경우 <벡터번호>+<IRQ번호>에 IRQ가
매핑되고(즉 IRQ 번호가 올때마다 cpu는 int <벡터번호>+<IRQ번호>
가 온다는 얘깁니다)

IRQ8-15도 마찬가지가 됩니다 (이땐 IRQ8의 상대 번호가 되죠)

하지만 이거 작업할때는 상당히 주의 요합니다.
좀만 잘못 프로그래밍했다간 시스템 그냥 다운입니다. 디버그할
방법조차도 없습니다.

보통 PC에서는 IRQ0의 경우 INT8로 대응되어 있고요.
(IRQ1은 INT9, IRQ2는 INT0ah .... 이렇게 갑니다)
IRQ8의 경우 INT70h로 대응됩니다. 실제 BIOS에서도 이걸 기준으로
설계되어 있고요.

Written By the Black Knight of Destruction

익명 사용자의 이미지

흑기사 wrote:
하지만 이거 작업할때는 상당히 주의 요합니다.
좀만 잘못 프로그래밍했다간 시스템 그냥 다운입니다. 디버그할
방법조차도 없습니다.

인터럽트 정지시키는거 해야죠.

cli , sti 해줘야 겠죠.

흑기사님 깜빡하고 잊으신거 같아서...

Necromancer의 이미지

네.. 하나 빼먹었군요.

예전에 DOS Extender 만들 때 써먹은 코드였었는데...
저거 때문에 무지 황당했던 기억이 나더군요. (cli,sti 다썼음)

sti 하면 바로 다운되는.

Written By the Black Knight of Destruction

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.