바이오스 인터럽트 호출

소프트웨어가 컴퓨터에 위치한 바이오스의 기능을 불러내는데 이용하는 방식

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

인터럽트 호출 편집

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

 mov ah, 0x0e
 mov al, '!'
 int 0x10

인터럽트 테이블 편집

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

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

도스 훅 편집

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

같이 보기 편집

참고 문헌 편집

  • The x86 Interrupt List (a.k.a. RBIL, Ralf Brown's Interrupt List)
  • Embedded BIOS User’s Manual
  • PhoenixBIOS 4.0 User's Manual
  • 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