DJGPP와 Allegro

보호 모드와 DOS 익스텐더

DOS 익스텐더extender는 DOS 상에서 보호 모드 프로그램을 실행할 수 있는 환경을 제공하는 프로그램이다. 리얼 모드로 구동되는 DOS 환경에서, 실행된 프로그램이 CPU를 보호 모드로 전환하면 기본적인 입출력 등의 BIOS와 DOS의 서비스를 사용할 수 없기 때문에 그것들을 인터페이스하는 운영체제 역할을 한다. CPU를 보호 모드로 전환하여 얻는 큰 이점이라면 리얼 모드의 세그먼트, 오프셋을 통한 어드레싱을 벗어나 선형적으로 4 GB까지 어드레싱 할 수 있다는 것이다.1 CPU의 페이징 기능을 사용할 수 있어 가상 메모리를 통해 물리적인 메모리 한계도 없앤다.

C:\>war
DOS/4GW Protected Mode Run-time  Version 1.97
Copyright (c) Rational Systems, Inc. 1990-1994

메모리를 많이 사용하는 게임들은 유명한 DOS 익스텐더인 DOS/4G를 내장한 Watcom C/C++로 대부분 만들어졌기 때문에, Watcom 버전인 DOS/4GW의 배너를 게임 실행 시에 볼 수 있었다.

DJ’s GNU Programming Platform

1996년 즈음, 상용 제품이던 Watcom C/C++은 구할 수 없었기 때문에 DJGPP란 것을 나우누리 자료실에서 받아 사용했었다. DJ Delorie라는 분이 리눅스계열에서만 사용되던 GCC와 GNU 툴 체인을 DOS로 이식한 것이다. 1989년 리처드 스톨만을 만났을 때, GCC를 DOS로 이식할 계획이 있느냐 물으니 16비트 운영체제인 DOS에 너무 큰 GCC를 이식할 수 없다고 하여 직접 도전했다고 한다. 메모리 한계를 극복하기 위해 go32라는 DOS 익스텐더를 만들고, 그 위에서 작동하는 GCC 1.37을 처음으로 빌드하였다.2

EMS, XMS 등 MS-DOS의 기본 메모리 640 KB를 넘어 접근하는 기술들이 있었지만, 당시 중학생으로 이해하기 어려웠고 여전히 주소는 64 KB 단위로 세그먼트화되었기 때문에 DJGPP를 통해 이런 제약들에서 벗어날 수 있었다. 당시에는 몰랐지만 1996년 출시한 Quake의 MS-DOS 버전도 DJGPP를 사용했다고 한다. NeXTSTEP을 개발 플랫폼으로 사용했기 때문에 GNU 툴 체인과 유닉스 환경을 MS-DOS로 쉽게 이식하기 위한 것으로 생각된다.

DJ Delorie는 Red Hat에서 20년 넘게 일하고 있으며, 현재 glibc(GNU C Library) 프로젝트에서 작업 중이다.

Allegro

게임을 만들고 싶었기 때문에 나우누리 게임제작동호회NGM에서 Cybersoft라는 이름으로 팀과 팀 게시판을 만들어 활동할 때, DJGPP를 기반으로 한 Allegro라는 게임 라이브러리를 사용했다. 지금으로 보면 Cocos2d 라이브러리 정도라 할 수 있겠다. 비디오 메모리에 점 하나부터 직접 그리던 때이지만, 모든 것을 만들 수는 없었기 때문에 적절한 선택이었다.

     ______   ___    ___
    /\  _  \ /\_ \  /\_ \
    \ \ \L\ \\//\ \ \//\ \      __     __   _ __   ___
     \ \  __ \ \ \ \  \ \ \   /'__`\ /'_ `\/\`'__\/ __`\
      \ \ \/\ \ \_\ \_ \_\ \_/\  __//\ \L\ \ \ \//\ \L\ \
       \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/
        \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/
                       /\____/
                       \_/__/     Version 2.1


           A game programming library for djgpp

           By Shawn Hargreaves, 1994/96

리눅스보다 이른 1990년에 시작한 프로젝트가 Windows, 리눅스, macOS, iPhone, 안드로이드를 지원하면서 여전히 업데이트되고 있다. GPU를 사용하는 현재는 없어진 컴파일된 스프라이트를 사용했으니 1996년 6월에 출시된 2.1이나, 11월에 몇 가지 버그를 고친 2.11을 사용했었던 것으로 보인다.3

그래픽, 사운드, 오디오(사운드 블러스터/AdLib/MIDI), 각종 입력 장치 핸들링, 파일 패킹, 타이머, DMA 등 하드웨어를 직접 제어해야 하지만 게임을 만드는데 필수인 대부분을 제공했다.

최근에 이 프로젝트를 만들고 1998년까지 진행한 사람이 Shawn Hargreaves라는 것을 알게 되었다. (어릴 때도 분명 이름을 많이 봤겠지만…) 2000년대 초반 Moto GP의 GDC 발표 자료에서 이름을 접하기 시작해 컴퓨터 그래픽스 분야에서 좋은 자료를 많이 보아왔다. 2005년 마이크로소프트에 입사하여, 현재는 Direct3D 팀을 이끌고 있다.

IBM-PC의 많은 부분을 직접 제어하고 있기 때문에, 여전히 좋은 하드웨어 자료이므로 소스 코드를 쉽게 볼 수 있도록 아래 Git 저장소에 올려 놓았다.


  1. 보호 모드는 80286에서 소개된 기능으로, 80286과 80386의 염가형인 80386SX는 24비트 어드레스 버스를 가지기 때문에 16 MB까지 어드레싱 할 수 있다. ↩︎

  2. The History of DJGPP ↩︎

  3. Changes from 2.0 to 2.1 (June 1996). Compiled sprite는 비트맵 데이터를 화면에 그리는 인스트럭션으로 미리 컴파일한 코드이다. 코드가 실행됨으로써 데이터 참조 없이 화면에 자신을 고속으로 그리게 된다. ↩︎