{{위키데이터 속성 추적}}
'''바이오스 [[인터럽트]] 호출'''({{llang|en|BIOS interrupt call}})은 [[도스]]용 프로그램과, [[부트 로더]]와 같은 일부 기타 소프트웨어가 [[IBM PC 호환기종]]의 컴퓨터에 위치한 [[바이오스]]의 기능을 불러내는데 이용하는 방식이다. 일부 [[운영 체제]] 또한 초기 시동 단계에서 바이오스를 이용하여 하드웨어 자원을 탐지하고 초기화할 수 있다.

== 인터럽트 호출 ==
인터럽트는 INT [[x86]] [[어셈블리어]] 명령을 이용하여 호출할 수 있다. 이를테면 바이오스 인터럽트 0x10을 이용하여 문자열을 화면에 출력하려면 다음의 x86 어셈블리어 명령을 실행하면 된다:

<syntaxhighlight lang="asm">
 mov ah, 0x0e
 mov al, '!'
 int 0x10
</syntaxhighlight>

== 인터럽트 테이블 ==
일반적인 바이오스 인터럽트 목록은 아래와 같다. 일부 바이오스(특히 오래된 것들)는 아래의 모든 인터럽트 클래스를 갖추고 있지는 않다.

{| class="wikitable" border="1"
|-
! 인터럽트 벡터
! 설명
|-
|<code>00h</code>
|CPU: [[0으로 나누기]]를 시도한 뒤 또는 몫이 떨어지지 않을 때 실행된다
|-
|<code>01h</code>
|CPU: 추적 플래그가 설정되어 있는 동안 모든 명령을 마친 후 실행된다
|-
|<code>02h</code>
|CPU: 메모리 오류 등을 위해 [[시동 자체 시험|POST]] 등이 사용하는 NMI(Non-maskable interrupt)
|-
|<code>03h</code>
|CPU: 가장 낮은 비예비 인터럽트. 디버깅에 예외적으로 사용되며 <code>INT 03</code> 핸들러는 늘 디버깅 프로그램이 추가함
|-
|<code>04h</code>
|CPU: 숫자 오버플로. 오버플로 플래그가 설정될 때 <code>INTO</code> 명령에 의해 발생.
|-
|<code>05h</code>
| Shift-[[Print screen]]이 눌릴 때 실행. (<code>BOUND</code> 함수가 바운드 실패를 감지할 때에도 발생)
|-
|<code>06h</code>
|CPU: 정의되지 않은 Opcode (잘못된 함수) 예외가 발생할 때 호출함. 일반적으로 운영 체제가 설치.
|-
|<code>07h</code>
|CPU: [[부동소수점]] 함수를 실행하고 수치 보조 프로세서의 이용이 불가능할 때 호출함
|-
|<code>08h</code>
|[[IRQ]]0: 시스템 타이밍 구성 요소가 추가함; [[PIT]]에 의해 초당 18.2번(55 ms) 호출함
|-
|<code>09h</code>
|IRQ1: 모든 키가 눌리고 뗐을 때 호출함 (키가 눌리고 있는 동안도 포함)
|-
|<code>0Bh</code>
|IRQ3: 필요시 [[직렬 포트]] 2, 4 (COM2/4)가 호출함
|-
|<code>0Ch</code>
|IRQ4: 필요시 직렬 포트 1, 3 (COM1/3)이 호출함
|-
|<code>0Dh</code>
|IRQ5: 필요시 하드 디스크 컨트롤러 (PC/XT) 또는 2차 [[병렬 포트]] LPT2 (AT)가 호출함
|-
|<code>0Eh</code>
|IRQ6: 필요시 [[플로피 디스크 컨트롤러]]가 호출함
|-
|<code>0Fh</code>
|IRQ7: 필요시 1차 병렬 포트 LPT1 (프린터)가 호출함
|-
|[[INT 10H|<code>10h</code>]]
| 비디오 서비스
{| class="wikitable" border="1" style="margin-left:1em"
|-
!<code>AH</code>
! 설명
|-
|<code>00h</code>
| 비디오 모드 설정
|-
|<code>01h</code>
| 커서 모양 설정
|-
|<code>02h</code>
| 커서 위치 설정
|-
|<code>03h</code>
| 커서 위치 및 모양 가져오기
|-
|<code>04h</code>
| 라이트 펜 위치 가져오기
|-
|<code>05h</code>
| 디스플레이 페이지 설정
|-
|<code>06h</code>
| 지우기/스크롤 스크린 업
|-
|<code>07h</code>
| 지우기/스크롤 스크린 다운
|-
|<code>08h</code>
| 문자열 및 커서 특성 읽기
|-
|<code>09h</code>
| 문자열 및 커서 특성 쓰기
|-
|<code>0Ah</code>
| 커서 문자열 쓰기
|-
|<code>0Bh</code>
| 커서 테두리 설정
|-
|<code>0Ch</code>
| 그래픽 픽셀 쓰기
|-
|<code>0Dh</code>
| 그래픽 픽셀 읽기
|-
|<code>0Eh</code>
| TTY 모드에서 문자열 쓰기
|-
|<code>0Fh</code>
| 비디오 모드 가져오기
|-
|<code>10h</code>
| 팔레트 레지스터 설정 (EGA, VGA, SVGA)
|-
|<code>11h</code>
| 문자 발생기 (EGA, VGA, SVGA)
|-
|<code>12h</code>
| 함수 대안 선택 (EGA, VGA, SVGA)
|-
|<code>13h</code>
| 문자열 쓰기
|-
|<code>1Ah</code>
| 디스플레이 결합 코드 가져오기 또는 설정 (VGA, SVGA)
|-
|<code>1Bh</code>
| 기능 정보 가져오기 (VGA, SVGA)
|-
|<code>1Ch</code>
| 비디오 상태 저장 또는 복원 (VGA, SVGA)
|-
|<code>4Fh</code>
|[[VESA 바이오스 확장]] 함수 (SVGA)
|}
|-
|<code>11h</code>
| 장비 목록 반환
|-
|<code>12h</code>
| [[기본 메모리]] 크기 반환
|-
|[[INT 13H|<code>13h</code>]]
| 낮은 수준의 디스크 서비스
{| class="wikitable" border="1" style="margin-left:1em"
|-
!<code>AH</code>
! 설명
|-
|<code>00h</code>
| 디스크 드라이브 초기화
|-
|<code>01h</code>
| 드라이브 상태 검사
|-
|<code>02h</code>
| 섹터 읽기
|-
|<code>03h</code>
| 섹터 쓰기
|-
|<code>04h</code>
| 섹터 유효 여부 확인
|-
|<code>05h</code>
| 트랙 포맷
|-
|<code>08h</code>
| 드라이브 변수 가져오기
|-
|<code>09h</code>
| 고정 드라이브 변수 초기화
|-
|<code>0Ch</code>
| 지정된 트랙으로 찾기
|-
|<code>0Dh</code>
| 고정 디스크 컨트롤러 초기화
|-
|<code>15h</code>
| 드라이브 종류 가져오기
|-
|<code>16h</code>
| 플로피 드라이브 미디어 변경 상태 가져오기
|-
|<code>17h</code>
| 디스크 종류 설정
|-
|<code>18h</code>
| 플로피 드라이브 미디어 종류 설정
|-
|<code>41h</code>
| 확장 디스크 드라이브 (EDO) 설치 검사
|-
|<code>42h</code>
| 섹터 확장 읽기
|-
|<code>43h</code>
| 섹터 확장 쓰기
|-
|<code>44h</code>
| 섹터 확장 유효 여부 확인
|-
|<code>45h</code>
| 드라이브 잠금/잠금 해제
|-
|<code>46h</code>
| 미디어 꺼내기
|-
|<code>47h</code>
| 확장 찾기
|-
|<code>48h</code>
| 드라이브 변수 확장 가져오기
|-
|<code>49h</code>
| 미디어 변경 상태 확장 가져오기
|-
|<code>4Eh</code>
| 하드웨어 구성 확장 설정
|}
|-
|<code>14h</code>
| 직렬 포트 서비스
{| class="wikitable" border="1" style="margin-left:1em"
|-
!<code>AH</code>
! 설명
|-
|<code>00h</code>
| 직렬 포트 초기화
|-
|<code>01h</code>
| 문자열 전송
|-
|<code>02h</code>
| 문자열 수신
|-
|<code>03h</code>
| 상태
|}
|-
|<code>15h</code>
| 기타 시스템 서비스
{| class="wikitable" border="1" style="margin-left:1em"
|-
!<code>AH</code>
!<code>AL</code>
! 설명
|-
|<code>00h</code>
|
| 카세트 드라이브 모터 켜기
|-
|<code>01h</code>
|
| 카세트 드라이브 모터 끄기
|-
|<code>02h</code>
|
| 카세트로부터 데이터 블록 읽기
|-
|<code>03h</code>
|
| 카세트에 데이터 블록 쓰기
|-
|<code>4Fh</code>
|
| 키보드 가로채기
|-
|<code>83h</code>
|
| 이벤트 대기
|-
|<code>84h</code>
|
| 조이스틱 읽기
|-
|<code>85h</code>
|
| Sysreq 키 호출
|-
|<code>86h</code>
|
| 대기
|-
|<code>87h</code>
|
| 블록 이동
|-
|<code>88h</code>
|
| [[확장 메모리]] 크기 가져오기
|-
|<code>89h</code>
|
| 보호 모드로 전환
|-
|<code>C0h</code>
|
| 시스템 변수 가져오기
|-
|<code>C1h</code>
|
| 확장 바이오스 데이터 영역 세그먼트 가져오기
|-
|<code>C2h</code>
|
| 포인팅 장치 기능
|-
|<code>C3h</code>
|
| 감시 타이머 기능 - PS/2 시스템 전용
|-
|<code>C4h</code>
|
| 프로그래밍 가능한 옵션 선택 - [[마이크로 채널 아키텍처|MCA]] 버스 PS/2 시스템 전용
|-
|<code>D8h</code>
|
|[[EISA]] 시스템 기능 - EISA 버스 시스템 전용
|-
|<code>E8h</code>
|<code>01h</code>
| 확장 메모리 크기 가져오기 (1994년 이후 더 새로운 기능). 64 Mb 이상의 메모리 크기에 대한 결과를 제공.
|-
|<code>E8h</code>
|<code>20h</code>
| 쿼리 시스템 주소 맵.
|}
|-
|<code>16h</code>
| 키보드 서비스
{| class="wikitable" border="1" style="margin-left:1em"
|-
!<code>AH</code>
! 설명
|-
|<code>00h</code>
| 문자열 읽기
|-
|<code>01h</code>
| 입력 상태 읽기
|-
|<code>02h</code>
| 키보드 Shift 상태 읽기
|-
|<code>05h</code>
| 키보드 버퍼에 키 눌림 저장
|-
|<code>10h</code>
| 문자열 확장 읽기
|-
|<code>11h</code>
| 입력 상태 확장 읽기
|-
|<code>12h</code>
| 키보드 Shift 상태 확장 읽기
|}
|-
|<code>17h</code>
| 프린터 서비스
{| class="wikitable" border="1" style="margin-left:1em"
|-
!<code>AH</code>
! 설명
|-
|<code>00h</code>
| 프린터에 문자열 인쇄
|-
|<code>01h</code>
| 프린터 초기화
|-
|<code>02h</code>
| 프린터 상태 검사
|}
|-
|<code>18h</code>
| 카세트 BASIC 실행: 실제 IBM 컴퓨터에는 시동 실패 이벤트의 해당 루틴이 해석, 실행을 목적으로 ROM에 BASIC이 포함되어 있다. (BIOS가 호출)
|-
|<code>19h</code>
| POST 이후 이 인터럽트는 운영 체제를 불러오기 위해 바이오스가 사용함
|-
|<code>1Ah</code>
| 실시간 시계 서비스
{| class="wikitable" border="1" style="margin-left:1em"
|-
!<code>AH</code>
! 설명
|-
|<code>00h</code>
| RTC 읽기
|-
|<code>01h</code>
| RTC 설정
|-
|<code>02h</code>
| RTC 시간 읽기
|-
|<code>03h</code>
| RTC 시간 설정
|-
|<code>04h</code>
| RTC 날짜 읽기
|-
|<code>05h</code>
| RTC 날짜 설정
|-
|<code>06h</code>
| [[RTC 알람]] 설정
|-
|<code>07h</code>
| RTC 알람 초기화
|}
|-
|<code>1Ah</code>
|[[PCI 버스|PCI]] 서비스 - PCI 2.0 이상을 지원하는 BIOS가 추가
{| class="wikitable" border="1" style="margin-left:1em"
|-
!<code>AX</code>
! 설명
|-
|<code>B101h</code>
|PCI 설치 검사
|-
|<code>B102h</code>
|PCI 장치 찾기
|-
|<code>B103h</code>
|PCI 클래스 코드 찾기
|-
|<code>B106h</code>
|PCI 버스 관련 기능
|-
|<code>B108h</code>
|구성 Byte 읽기
|-
|<code>B109h</code>
|구성 Word 읽기
|-
|<code>B10Ah</code>
|구성 Dword 읽기
|-
|<code>B10Bh</code>
|구성 Byte 쓰기
|-
|<code>B10Ch</code>
|구성 Word 쓰기
|-
|<code>B10Dh</code>
|구성 Dword 쓰기
|-
|<code>B10Eh</code>
|IRQ 루틴 정보 가져오기
|-
|<code>B10Fh</code>
|PCI IRQ 설정
|}
|-
|<code>1Bh</code>
|Ctrl-Break 핸들러 - Ctrl-Break가 눌릴 때 <code>INT 09</code>가 호출
|-
|<code>1Ch</code>
|타이머 틱 핸들러 - <code>INT 08</code>가 호출
|-
|<code>1Dh</code>
|호출되지 않음. VTP(비디오 변수 테이블) 포인터로서 비디오 모드의 데이터를 포함
|-
|<code>1Eh</code>
|호출되지 않음. DPT (디스켓 변수 테이블) 포인터로서 디스켓 드라이브에 관한 다양한 정보 포함
|-
|<code>1Fh</code>
|호출되지 않음. VGCT(비디오 그래픽 문자 테이블) 포인터로서 아스키 문자열 <code>80h</code> ~ <code>FFh</code>의 데이터 포함
|-
|<code>41h</code>
|주소 포인터: FDPT = 고정 디스크 변수 테이블 (1차 하드 드라이브)
|-
|<code>46h</code>
|주소 포인터: FDPT = 고정 디스크 변수 테이블 (2차 하드 드라이브)
|-
|<code>4Ah</code>
|알람을 위해 RTC가 호출
|-
|<code>70h</code>
|IRQ8: RTC가 호출
|-
|<code>74h</code>
|IRQ12: 마우스가 호출
|-
|<code>75h</code>
|IRQ13: 산술 보조 프로세서가 호출
|-
|<code>76h</code>
|IRQ14: 1차 IDE 컨트롤러가 호출
|-
|<code>77h</code>
|IRQ15: 2차 IDE 컨트롤러가 호출
|}

== 도스 훅 ==
MS-DOS 시스템에서 IO.SYS는 플로피 디스크 변경 감지, 포맷 호출 추적, DMA 바운더리 오류 정정, 최초의 호출 이전 모델 코드 0xFC와 더불어 IBM의 ROM BIOS "01/10/84" 관련 문제 우회를 위해 INT 13을 훅 처리한다.

== 같이 보기 ==
* [[도스 인터럽트 호출]]
* [[랄프 브라운의 인터럽트 리스트]]

== 참고 문헌 ==
* [http://www.cs.cmu.edu/~ralf/files.html The x86 Interrupt List] (a.k.a. RBIL, Ralf Brown's Interrupt List)
* [ftp://ftp.embeddedarm.com/old/saved-downloads-manuals/EBIOS-UM.PDF Embedded BIOS User’s Manual]{{깨진 링크|url=ftp://ftp.embeddedarm.com/old/saved-downloads-manuals/EBIOS-UM.PDF }}
* [https://web.archive.org/web/20120617084000/http://www.esapcsolutions.com/ecom/drawings/PhoenixBIOS4_rev6UserMan.pdf PhoenixBIOS 4.0 User's Manual]
* [http://www.ctyme.com/rbrown.htm HTML version of Ralf Brown Interrupt List]
* ''IBM Personal System/2 and Personal Computer BIOS Interface Technical Reference'', IBM, 1988, {{ISBN|999857739X}}
* ''System BIOS for IBM PCs, Compatibles, and EISA Computers'', [[Phoenix Technologies]], 1991, {{ISBN|0201577607}}
* ''Programmer's Guide to the AMIBIOS'', [[American Megatrends]], 1993, {{ISBN|0070015619}}
* ''The Programmer's PC Sourcebook'' by Thom Hogan, Microsoft Press, 1991 {{ISBN|155615321X}}

[[분류:바이오스]]
[[분류:인터럽트]]