개요
모드 13h(Mode 13h)는 IBM PC 호환 컴퓨터에서 VGA(Video Graphics Array) 그래픽 어댑터가 지원하는 16진수 비디오 모드 중 하나로, 0x13이라는 번호를 갖는다. 보통 “모드 13h”라고 하면 320 × 200 픽셀 해상도에 256색(8 비트 컬러) 팔레트를 제공하는 그래픽 모드를 의미한다. 1990년대 초반부터 DOS 기반 게임과 데모 시연 등에 널리 사용되었으며, 당시 하드웨어와 소프트웨어 제약을 고려했을 때 가장 효율적인 컬러 그래픽 환경 중 하나였다.
1. 기술적 사양
| 항목 | 내용 |
|---|---|
| 모드 번호 | 0x13 (16진수) – “13h”는 13에 “h”(hex) 접미사를 붙인 형태 |
| 해상도 | 320 픽셀 × 200 픽셀 |
| 색 깊이 | 8 비트(256색) ; 색상 팔레트는 18‑비트(RGB 6‑6‑6) 색 공간에서 선택 |
| 프레임 버퍼 주소 | 0xA0000 (시작 주소) – 64 KB(=320 × 200 바이트) 크기의 비디오 메모리 |
| 라인 스트라이드 | 320 바이트(한 라인당 픽셀 수와 동일) |
| 지원되는 하드웨어 | IBM VGA, 대부분의 호환 VGA/SVGA 카드 (VESA BIOS Extensions를 통한 호환성 포함) |
| 접근 방식 | 직접 메모리 매핑(포인터를 0xA0000에 매핑)이나 BIOS 인터럽트 0x10/0x00 (Set Video Mode) 사용 |
2. 역사와 배경
- 출시 시기: 1987년 IBM이 VGA를 발표하면서 모드 13h가 처음 도입되었다. 당시 표준 CGA(320 × 200 × 4색)와 EGA(640 × 350 × 16색) 대비 큰 색상 폭을 제공했다.
- 게임·데모 문화: 1990년대 초반 Doom, Wolfenstein 3D 등 초기 3D 렌더링 기반 FPS와 수많은 2D 액션·플랫포머 게임이 모드 13h를 기본 그래픽 환경으로 사용했다. 또한, 컴퓨터 그래픽 데모 씬에서도 빠른 픽셀 조작이 가능한 점이 인기를 끌었다.
- 제한 사항: 320 × 200 해상도와 256색 제한은 오늘날의 표준에 비해 낮지만, 비디오 메모리 64 KB만으로 구현 가능하다는 점이 저사양 PC에서도 원활히 동작하게 만들었다.
3. 프로그래밍 인터페이스
3.1 BIOS 인터럽트 호출
mov ah, 0x00 ; Set Video Mode 함수
mov al, 0x13 ; 모드 13h (0x13)
int 0x10 ; BIOS 인터럽트
- 이 호출은 비디오 어댑터를 모드 13h로 전환하고, 화면을 검정색(색 인덱스 0)으로 초기화한다.
3.2 직접 메모리 접근
unsigned char *VRAM = (unsigned char *)0xA0000;
VRAM[y * 320 + x] = color_index; // (x, y) 좌표에 색 인덱스 저장
- 0xA0000 주소는 실주소(real mode)에서 직접 접근 가능하며, 보호 모드에서는 VESA VBE 또는 운영 체제 API를 통해 매핑해야 한다.
3.3 색상 팔레트 설정
mov dx, 0x3C8 ; Palette Write Index 레지스터
mov al, 0x00 ; 첫 번째 색 인덱스(0) 선택
out dx, al
mov dx, 0x3C9 ; Palette Data 레지스터
; 각각 R, G, B 6비트 값을 순차적으로 출력
mov al, red_value
out dx, al
mov al, green_value
out dx, al
mov al, blue_value
out dx, al
- 256개의 색 인덱스마다 R/G/B 6‑비트 값을 지정할 수 있다(0 ~ 63). 실제 화면에 보이는 색은 6‑비트 값을 8‑비트(0 ~ 255)로 스케일링한다.
4. 주요 특징 및 장단점
| 구분 | 장점 | 단점 |
|---|---|---|
| 성능 | 비디오 메모리 접근이 선형이며 CPU와 직접 연동돼 초당 수천 프레임 구현 가능 | 현대 GPU와 비교하면 하드웨어 가속이 없으며, 복잡한 3D 연산은 전적으로 CPU에 의존 |
| 색상 표현 | 256색 팔레트는 8‑비트 그래픽에 충분한 색 재현을 제공 | 같은 팔레트를 공유하므로 다중 스프라이트나 UI가 색 충돌을 일으킬 수 있음 |
| 호환성 | 대부분의 DOS용 게임·데모와 호환되며, 에뮬레이터(예: DOSBox)에서도 그대로 작동 | 고해상도·고색심도 디스플레이(예: 1080p, 24비트)에서는 스케일링이 필요 |
| 프로그래밍 | 메모리 매핑이 단순해 초보자도 쉽게 구현 가능 | 라인 스트라이드가 고정돼 복잡한 화면 레이아웃을 구현하려면 별도 계산 필요 |
5. 현대와의 연계
- 에뮬레이션: DOSBox, PCem 등 가상 머신이 모드 13h를 완벽히 에뮬레이트한다. 이는 레거시 게임 보존에 핵심적인 역할을 한다.
- 재현 프로젝트: 현대 그래픽 API(OpenGL, DirectX, Vulkan)에서도 “모드 13h 스타일”을 재현하는 샘플 코드가 존재한다. 예를 들어, 텍스처를 320 × 200 해상도, 256색 팔레트로 만들고, 셰이더를 이용해 팔레트를 적용하는 방식이다.
- 교육용 활용: 저수준 그래픽 프로그래밍, 메모리 매핑, 색 팔레트 개념을 배우는 입문용 예제로 여전히 교재에 등장한다.
6. 참고 문헌 및 배경 자료
- IBM VGA Technical Reference (IBM Corporation, 1987) – 모드 13h 포함 VGA 표준 명세.
- “Programming the VGA” – Michael Abrash, Graphics Programming Black Book (1993) – 모드 13h 구현 예제와 최적화 기법.
- VESA BIOS Extensions (VBE) Spec – VESA, 1994 – 보호 모드에서 모드 13h와 호환 가능한 비디오 모드 정의.
- DOSBox Manual – DOSBox 프로젝트, 최신 버전 (2024) – 모드 13h 에뮬레이션 옵션 및 설정.
요약
모드 13h는 VGA 그래픽 어댑터가 제공하는 320 × 200 픽셀, 256색 비디오 모드로, 1980년대 후반부터 1990년대 초반까지 DOS 기반 게임·데모의 표준 그래픽 환경이었다. 직접 메모리 매핑과 간단한 BIOS 인터럽트 호출만으로 구현 가능하며, 그 단순함과 효율성 덕분에 오늘날에도 레거시 소프트웨어 보존 및 교육용 예제로 널리 활용되고 있다.