SIMCGA

 

[image]
MS-DOS테트리스(스펙트럼 홀로바이트)의 CGA와 SIMCGA 실행화면 비교[1]
1. 개요
2. 상세
2.1. 원리
2.2. 문제점
3. 기타
3.1. 다른 CGA 에뮬레이터들
3.2. SIMVGA?
4. 함께보기

SIMCGA - A CGA Simulator for Monochrome Graphics Cards

1. 개요


1980년대 IBM PC 및 그 호환기종의 MS-DOS 환경에서 주로 게임용으로 사용된 허큘리스 그래픽 카드(HGC)용 CGA 에뮬레이터. 그 시절에 게임을 한 사람이라면 거의 대부분이 알고 있는 프로그램이다. 후술하겠지만 이러한 HGC 환경에서 CGA를 에뮬레이션해주는 프로그램은 몇 종류인가 있었는데, 이 중에서 가장 널리 사용된 소프트웨어이다.
제작자는 Chuck P. Guzis.[2]

2. 상세


IBMIBM PCIBM PC XT를 발매할 때 기본 그래픽 카드로 MDACGA를 옵션으로 함께 내놓았지만 MDA는 80행 24열의 미려한 흑백 텍스트를 표현할 수 있는 대신 컬러를 사용할 수 없고 그래픽 표현도 불가능하다는 단점이 있었고 CGA는 4색 컬러 표현은 가능하지만 320×200 픽셀로 해상도가 낮다는 문제점이 있었다. 그런 상황에서 IBM PC 호환 기종에서 저렴한 가격에 고해상도 흑백 그래픽을 필요로 하는 계층[3]을 타겟으로 삼아 시장에 나온 제품이 바로 허큘리스 그래픽 카드였다.
한글이나 한자처럼 자형이 복잡한 2바이트 문자셋(DBCS, Double Byte code Set)[4]을 사용하였던 한국과 홍콩, 대만에서는 원활한 자국 문자 표시를 위해서 높은 해상도의 그래픽 처리가 필요했고, 자연스럽게 해상도가 낮은 CGA보다는 컬러 사용이 불가능하더라도 2바이트 문자셋 표시에 충분한 해상도를 가진 허큘리스 그래픽 카드가 시장의 주류가 되었다. IBM의 순정 IBM PC나 컴팩 등의 미국산 호환기기가 거의 들어가지 않은 상태에서 현지산 호환기종 중심으로 시장이 편성되었던 한국, 홍콩, 대만 PC 시장의 상황도 이와 무관하지는 않았을 것이다.
그러나 허큘리스 그래픽 카드는 본질적으로 서드파티 제품이다보니 바이오스 인터럽트 호출을 지원하지 않는 문제가 있었고, IBM PC의 원산지인 미국에서는 나름 '사실상 표준'(de facto standard)으로 인식될만큼 제법 잘 팔리기는 했어도 진짜 IBM 표준인 CGA를 위협할 만큼의 주류라고까지 말하기는 어려웠다.[5] 그렇다보니 게임에서는 허큘리스 그래픽 카드를 잘 지원해주지 않았다. 그런데 애매하게도 완전히 시장에서 외면하기에는 무시할 수 없는 점유율을 갖추고 있는 것 또한 사실이었다. 이러한 이유로 등장하게 된 것이 SIMCGA를 필두로 하는 CGA 에뮬레이터다.
SIMCGA는 램 상주(TSR, Terminate and Stay Resident) 프로그램이므로 게임을 시작하기 전에 SIMCGA.COM 파일을 미리 실행시켜 놓기만 하면 된다.[6] 이후 램에 상주하고 있는 프로그램이 자동으로 현재 그래픽 카드가 CGA인 것처럼 에뮬레이션해서 동작한다.
허큘리스 그래픽 카드가 시장의 주류였던 1980년대 말~1990년대 초의 대한민국 PC 시장에서는 PC 게이머의 필수품이었지만 1991~2년을 기점으로 286~386급 PC와 VGA급 컬러 그래픽스가 일반화되고 게임에서 CGA 지원도 점차 제외되기 시작하면서 SIMCGA 역시 쓰임새가 급격히 줄어들어갔고 멀티미디어 PC의 유행과 함께 시장이 VGA로 본격적으로 넘어가면서 허큘리스 그래픽 카드가 도태되며 CGA 에뮬레이터 역시 완벽하게 자취를 감추게 됐다.

2.1. 원리


허큘리스 그래픽 카드는 원래 64kbyte의 비디오 메모리를 가지고 있으며 B0000h~B7FFFh와 B8000h~BFFFFh의 2개의 영역으로 32kbyte씩 분할된 프레임 버퍼를 가지는데, 싱글 페이지를 표시할 때 화면에는 B0000h~B7FFFF 영역이 표시된다. CGA는 원래 16kbyte의 비디오 메모리를 가지는데 공교롭게도 허큘리스의 두 번째 프레임 버퍼 영역 안에 포함되는 B8000h~BBFFFh 영역을 프레임 버퍼로 사용한다.
따라서 SIMCGA(를 비롯한 CGA 에뮬레이터)가 하는 일은 램상주 상태로 있으면서 (허큘리스의 두 번째 프레임 버퍼 안에 있는) CGA의 프레임 버퍼 데이터를 허큘리스의 첫 번째 프레임 버퍼로 복사하는 것이 기본적인 동작의 전부이다. 거기에 추가적으로 해상도 차이에 맞추어 비율을 조정한다던지 CGA의 4컬러 대신 디더링으로 표현한다던지 하는 처리가 들어가는 것.
참고로 허큘리스 그래픽 카드를 직접 지원하는 게임들의 경우, 네이티브로 허큘리스를 지원하는 것이 아니라 CGA를 기본으로 지원하도록 게임을 제작하고 허큘리스 모드에서는 내부적으로는 SIMCGA와 똑같이 CGA 영역에 있는 데이터를 허큘리스의 첫 프레임 버퍼로 복사하는 식으로 구현한 경우가 대부분이다. 말하자면 게임 자체적으로 CGA 에뮬레이터를 내장한 것. 처음부터 네이티브로 허큘리스를 지원하도록 코딩된 게임은 드물었다. 오히려 허큘리스 네이티브 지원 게임은 한국처럼 허큘리스 보급률이 높고 CGA 보급률은 낮은 지역에서 만들어진 경우가 많다.

2.2. 문제점


SIMCGA는 CGA 그래픽 데이터를 허큘리스에서도 처리해주는 에뮬레이터일 뿐이지 단색 그래픽 카드인 허큘리스와 모노크롬 모니터에서 아무리 에뮬레이션을 한들 컬러가 표시될 리는 없다. 색 끼리의 차이는 허큘리스의 고해상도를 이용해서 디더링으로 처리해서 구분했다. 물론 당시의 허큘리스 사용자들은 그것만으로도 감지덕지했고 이 자체가 문제점이라고 할 수는 없으나, 게임 제작자 입장에서는 지원하지 않는 단색 그래픽 카드 사용자까지 배려할 리가 없으므로 간혹 게임을 진행하다보면 디더링만으로는 색상을 구분할 수 없는 경우가 생겼다. 예를 들면 인디아나 존스 3 최후의 성전에서는 도서관 바닥의 타일에 그려진 로마자를 보고 입구를 찾아야 하는데 SIMCGA 사용자는 도저히 찾을 수가 없어 일일이 노가다로 타일을 찍어서 인디의 코멘트를 통해 숫자를 확인하는 근성 플레이가 요구되었고 페르시아의 왕자처럼 아예 색상을 구분하는 것이 게임 진행의 키가 되는 게임은 답이 없다.
CGA와 허큘리스의 해상도 차이가 정수비가 아니었기 때문에 해상도 스케일링에도 문제가 있었다. CGA의 해상도는 320×200인데 허큘리스 그래픽 카드는 베이스가 MDA다보니 해상도가 640×400이 아닌 720×348이었고 때문에 CGA의 화상을 정확하게 2배로 스케일링을 할 수가 없었다.[7] SIMCGA가 택한 방법은 가로, 세로 2번씩 반복해서 표현하되, 가로의 매 4번째 줄마다 2번이 아닌 3번 반복을 했고, 세로의 매 4번째 줄마다 2번 반복 표현을 생략하는 것이었다. 요즘에도 비정수비 스케일링에서는 비슷한 방법을 사용하지만 필터링을 통해 자연스럽게 출력할 방법이 있던 시절이 아니었기 때문에 SIMCGA를 사용하면 화면이 묘하게 지저분하게 보인다. [8]
잔상 문제도 당시에 많이 문제시 되던 이슈였는데 마치 인터레이스 화면을 보듯이 움직이는 동작에서 지저분한 잔상이 남는다. 이는 PC의 성능 문제와 CGA와 허큘리스의 스캔 주파수 차이가 원인이다. SIMCGA는 상술했듯이 CGA의 화면 데이터를 읽고 고유의 알고리즘으로 허큘리스 그래픽 카드의 해상도 720×348로 화면을 꽉 차게 표현할 수 있도록 확대한 뒤 화면에 표시하는 과정을 가지고 있다. 아무래도 이 과정에서 처리시간이 필요한데, 4.77MHz~10MHz 남짓한 8088 CPU의 성능으로는 CGA에서 기존 프레임 렌더링이 끝나고 다음 프레임 렌더링이 시작되기 전까지 화면 표시를 완료시킬 수가 없었다. 여기에 CGA와 허큘리스 그래픽 카드는 화면의 주사율에도 차이가 있었다.[9] 이러한 원인으로 인해 이전 프레임의 일부가 한 박자 늦게 갱신된 상태로 화면으로 출력되어 잔상으로 보여지게 된다.

3. 기타


  • 주로 한국에서는 게이머의 필수품이었지만 일부 대기업 PC는 SIMCGA 없이도 게임이 가능한 기종들이 있었다. 예를 들면 삼성전자알라딘 286이 이런 케이스. 이런 기종들은 허큘리스 그래픽 카드가 아닌 640×400을 출력 가능한 일종의 확장 CGA[10]를 개발하여 집어넣어놨기 때문에 가능한 일이었는데, 허큘리스 호환 기능까지 집어넣어 한글 BIOS에서 선택가능하게 해놓은 경우도 있었다. 삼성전자는 이런 카드를 MCGA라고 이름붙였던 것 같은데 IBM PS/2의 Model 25에 들어간 MCGA와는 다른 물건이다.

3.1. 다른 CGA 에뮬레이터들


SIMCGA가 대표적이고 가장 대중적인 CGA 에뮬레이터이긴 했지만 당시에 이런 종류의 소프트웨어는 꽤 많이 존재하고 있었다. 몇 가지 간단하게 소개하면 아래와 같다.
  • Magic Key : SIMCGA 만큼은 아니지만 나름대로 많이 사용된 CGA 에뮬레이터다. 특유의 독특한 스플래시 화면이 화려했고 스크린 캡처 기능을 가지고 있었다. 어떻게든 720×348에 맞추어 화면에 꽉 차도록 스케일링을 하려했던 SIMCGA와 달리 320×200 화면을 단순하게 가로 2배로 스케일링하여 720×348의 스크린 위에 640×200으로 CGA 화면을 출력하였으므로 화면이 위아래로 납작해진 가로로 늘려놓은 듯한 화면으로 표시되었고 화면 상하좌우로 레터박스처럼 검은 공간이 있었다. 대신 정수비이니만큼 화면이 지저분해보이지 않았고 스케일링이 단순해져 처리량이 줄어들었으므로 잔상 문제도 훨씬 적었다. 이런 이유로 인해 Magic Key를 선호하는 유저들도 꽤 있었던 편.
    • 이 에뮬레이터에 대한 자료는 해외 웹사이트에서는 구하기가 매우 어려운데, 한국산이기 때문이라는 가설이 있다. 하단 크레디트에 나오는 'L. R. Chang'이라는 제작자의 이름이 한국인이나 중국인의 이름같기도 하거니와[11], 'The Third Wave Publish Corp.'라는 회사 이름 역시 당시 국내에서 IBM PC, 애플 II 하드웨어/소프트웨어를 유통하던 '더어드 웨이브'라는 업체의 이름이 아니냐는 것. 만약 이 가설이 사실이라면 Magic Key가 다른 CGA 에뮬레이터에 비해 해외 인지도가 매우 낮은 이유도 설명이 된다.
    • 다만 당시 불법복제 소프트웨어 중에는 제작사나 제작자의 크레디트를 무단으로 변경하는 경우가 상당히 흔했기 때문에 앞의 가설이 맞는다고 하더라도 이 소프트웨어가 한국산이라는 단정은 하기 어렵다. 개발자 본인이나 관련자의 증언이 있으면 확실하겠지만 과연...
  • EmuCGA : 국내에서는 잘 쓰이지 않았던 에뮬레이터. 기본적으로는 Magic Key처럼 화면이 납작해지는 방식을 사용하지만 옵션에 따라서 SIMCGA처럼 풀화면을 쓸 수도 있다.
  • HGCIBM : 역시 국내에서는 별로 쓰이지 않았던 에뮬레이터. 성능은 SIMCGA와 대동소이하며 북미권에서는 나름대로 쓰였던 듯 하다.
  • UniCGA : SIMCGA와 동시기(1986~7년)에 나온 위의 에뮬레이터들과 달리 CGA 에뮬레이터로서는 후발주자에 속한다. 북미권에서는 거의 VGA로 갈아탄 1991년에 등장하여 국내에는 거의 들어오지 않았던 에뮬레이터. 기능면에서는 가장 나중에 나온 에뮬레이터이니만큼 가장 낫다는 평가로, 화면 갱신율을 사용자가 직접 지정할 수 있는 등 다양한 기능이 있었다.

3.2. SIMVGA?


1991~2년경 즈음에 하이텔, 천리안 등의 PC통신 자료실에 SIMCGA처럼 허큘리스에서 EGAVGA 그래픽을 에뮬레이팅해 준다는 SIMEGA, SIMVGA라는 프로그램이 올라오기 시작했다. 그러나 이 소프트웨어는 '''가짜'''였다. 정확히는 텍스트로 SIMVGA 어쩌고 하는 메시지만 표시해주고 실제로는 아무런 동작도 하지 않는 페이크 프로그램이었다. 바이러스였다고 기술된 문서나 혹은 그렇게 회고하는 유저들도 있는데, 아마도 악의를 가진 사람이 이 페이크 프로그램에 바이러스를 감염시켜서 배포한 경우로 추정된다. 이 시기는 점차 시장이 VGA로 넘어가며 점차 SIMCGA로 할 수 없는 게임이 늘어나고 있었지만 기존의 허큘리스 사용자들도 제법 남아있던 시기였으므로 이런 게임시장의 변화를 아쉬워하는 허큘리스 사용자들을 낚기에 딱 좋은 소재였다.
해외에도 같은 발상을 한 사람이 있긴 한지 DOS 게이밍 관련 포럼을 찾아보면 'EGA/VGA를 허큘리스에서 에뮬레이션 가능한가?'라는 포럼 주제가 올라오는 경우가 있는데, 애초에 허큘리스에서 EGA/VGA 에뮬레이션은 '''기술적으로 불가능'''하다고 한다. 이것은 SIMCGA 등의 CGA 에뮬레이터가 허큘리스에서 CGA 그래픽 데이터를 표시하는 원리와도 관련이 있는데(상기한 원리 문단 참조), EGA의 경우는 64kbyte, VGA는 256kbyte의 비디오 메모리를 가지고 있고 둘 다 공히 프레임 버퍼로 64kbyte를 사용하므로 CGA처럼 허큘리스의 두 번째 32kbyte 영역에 데이터를 올려놓고 첫 번째 32kbyte로 블럭전송하는 방식을 사용할 수가 없다. 프레임 버퍼영역도 A0000h~AFFFFh로 허큘리스와 전혀 겹치지 않는다.[12] 굳이 에뮬레이션을 하고자 한다면 TSR이 EGA/VGA의 프레임 버퍼를 메인 메모리로 전송하고 다시 색상과 해상도에 맞추어 가공한 다음 허큘리스의 프레임 버퍼로 전송하거나 하는 방법을 사용할 수도 있겠지만 이런 복잡한 프로세스로는(특히 메인 메모리를 거치는 방법으로는) 당시의 하드웨어에서 SIMCGA처럼 실용적인 속도는 때려죽여도 얻을 수 없다.

4. 함께보기



[1] 단, 이 스크린 샷은 실기가 아닌 도스박스 에뮬레이터에서 각각 CGA 모드와 HGC 모드+SIMCGA 4.1로 실행하여 캡처한 것이다.[2] 현재는 디지털 포렌식 전문가로 활동 중인 듯 하다. 여담으로 이 사람이 SIMCGA를 만들 때 창업한 Sydex는 지금도 현존하고 있는 기업. 홈페이지[3] 1980년대 당시에는 컬러 디스플레이는 가격이 상당히 비싼 물건이어서 기기 자체에 컬러 그래픽스 기능을 내장한 애플 II코모도어 64 같은 8비트 PC들도 저렴한 모노크롬 디스플레이를 달아 쓰거나 TV를 디스플레이 대용으로 물려 쓰는 경우가 흔했다.[4] 자형이 단순한 알파벳이나 가나를 표현하는데는 8*8 픽셀이면 충분하지만 한글, 한자는 적어도 16×16 픽셀은 필요하게 된다.[5] 이 점이 허큘리스 호환 보드가 그래픽 카드 시장의 절대다수를 차지했던 한국을 비롯한 동아시아권 국가들과의 차이점이다.[6] 램 상주 상태에서 SIMCGA를 제거할 때는 RMVCGA.COM 이라는 파일을 실행하면 되지만 보통 국내에서는 SIMCGA의 패키지 내용물 중 핵심파일인 SIMCGA.COM 파일만 게임 디스켓에 포함해서 유통되는 바람에 잘 알려지진 않았다.[7] MDA의 해상도가 원래 9×14 픽셀의 알파벳 폰트를 80×25로 출력하였기 때문에 720×350에 해당한다. 한국에서 사용된 변종 클론은 16×16 크기의 한글 폰트를 40×25로 쓰기 위해 640×400 해상도 지원이 되었지만 정품 허큘리스는 이를 지원하지 않는다.[8] 문서 상단에 첨부된 스크린샷에서는 잘 보이지 않지만 일부 게임에서는 매우 도드라져 보인다.[9] CGA는 가로 동기화 주파수(HSYNC)가 15.7kHz, 세로 동기화 주파수(VSYNC)가 60Hz이지만, 허큘리스 그래픽 카드는 MDA와 동일하게 각각 18.4kHz, 50Hz이다. 참고로 그래서 모니터도 서로 호환이 되지 않는다.[10] 원래 IBM제 CGA는 단색이라고 해도 640×200까지만 출력 가능하다.[11] 중국인보다는 한국인의 이름일 가능성이 더 높다. 중국은 예전부터 이름을 로마자로 표기할 때 성을 앞에 표기하는 원칙을 지키고 있기 때문. 일본이 성을 뒤에 표기하는 것과는 대조적이다. 한국의 경우는 요즘은 어문규정에 따라 앞에 표기하는 추세가 강하나 저 무렵에는 원칙없이 앞, 뒤에 혼용되어 표기되었다.[12] 역으로 이 특징을 이용해서 허큘리스와 EGA/VGA를 따로 달아 듀얼 디스플레이를 구현하는 기법도 있었다.