모드 13h

개요
모드 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. 참고 문헌 및 배경 자료

  1. IBM VGA Technical Reference (IBM Corporation, 1987) – 모드 13h 포함 VGA 표준 명세.
  2. “Programming the VGA” – Michael Abrash, Graphics Programming Black Book (1993) – 모드 13h 구현 예제와 최적화 기법.
  3. VESA BIOS Extensions (VBE) Spec – VESA, 1994 – 보호 모드에서 모드 13h와 호환 가능한 비디오 모드 정의.
  4. DOSBox Manual – DOSBox 프로젝트, 최신 버전 (2024) – 모드 13h 에뮬레이션 옵션 및 설정.

요약
모드 13h는 VGA 그래픽 어댑터가 제공하는 320 × 200 픽셀, 256색 비디오 모드로, 1980년대 후반부터 1990년대 초반까지 DOS 기반 게임·데모의 표준 그래픽 환경이었다. 직접 메모리 매핑과 간단한 BIOS 인터럽트 호출만으로 구현 가능하며, 그 단순함과 효율성 덕분에 오늘날에도 레거시 소프트웨어 보존 및 교육용 예제로 널리 활용되고 있다.

둘러보기

더 찾아볼 만한 주제