IT/컴퓨터와 한글

도스 허큘리스 모드에서의 GW-BASIC 그래픽 프로그래밍

smores 2013. 11. 14. 06:42

고전 프로그램들을 가지고 놀다 보면 어느덧 옛 베이식 프로그래밍 시절의 추억이 다가온다. 


본인 연배의 사람들의 IBM PC 호환기종과의 첫 만남은 보통 국산 청계천 복제품(또는 대기업 제품)에 허큘리스 모노 그래픽 카드와 흑백 또는 녹색 화면의 모니터가 많았을 것이다. VGA가 나오기 전까지는 당시 고가였던 CGA 또는 EGA 그래픽 카드들에 비하여 허큘리스 카드는 단색이기는 하지만 전자의 그래픽 카드들보다 월등히 높은 해상도 (720x348 또는 변형 모드로 640x400) 를 지원하였기에 한글 출력에 최적화 된 그래픽 카드로써 저렴한 가격까지 더해져 국내에서는 가장 인기있는 그래픽 카드였었다. 특히 허큘리스 카드의 640x400 변형 그래픽 모드는 16x16 도트의 한글 출력을 할 경우 40컬럼 (영문 80컬럼) 25라인의 출력으로 영문 80컬럼 표준 화면과도 매우 잘 대응이 되었기에 어찌보면 VGA 이전에는 최선의 모드가 아니었나 싶다. 본인도 나름대로 C, Pascal 등에서 사용하기 위한 그래픽 모드상에서의 자체 한글 입출력 라이브러리 들을 만들면서 표준 720x348 와 640x400 모드를 모두 테스트했었다. 다만 대부분의 인기있던 컴파일러 (MS/Borland C, Turbo Pascal, Quick Basic 등) 들에서는 다양한 그래픽이 가능한 그래픽 라이브러리들이 대부분 720x348 표준 모드만을 지원하여 아쉬웠던 기억이 난다.


청계천표 7비트 하드웨어 한글 (허큘리스의 애드온 형식이었던 것으로 기억한다) 이후 삼보의 조합형 바이오스라 할 만한 NKP, 램상주형 도깨비 한글, 이후 태백/한맥 등 다양한 한글 입출력 소프트웨어들이 나왔었고, 마이크로소프트에서는 완성형을 지원하는 한글 MS-DOS를 내 놓으므로써 MSHBIOS를 사용하면 응용 프로그램이 도스의 기본 입출력 함수를 사용해서 만들어진 경우 외국 소프트웨어에서도 한글 입출력이 가능한 상황이었다. 다만 대다수의 인기있는 응용 프로그램들은 동작 속도및 여러 이유로 도스의 기본 IO를 우회하였기에 한글이 잘 되지 않는 경우가 더 많았지만...


취미 프로그래머 입장에서는 도스에 기본으로 딸려오는 GW-BASIC 으로 많은 프로그램들을 작성해 보았을 것인데, 이 경우 단순한 사무용 프로그램 보다는 그래픽 상에서 뭔가 흥미로운 것을 보여주는 간단한 게임 등을 작성해 보고 싶은 욕망이 많았을 것이다. 하지만 꽤 높은 수준까지 도달한 프로그래머가 아닌 이상은 아무래도 프로그래밍 언어에서 기본으로 제공하는 그래픽 함수들을 사용하고자 했을 것이며, 이 경우 한글을 구현하고 싶을 때 많은 어려움을 겪었으리라 본다.


이러한 니즈를 충족시켜 주는 몇가지 해결책으로 대기업에서 제공하는 PC의 경우 오리지널 MS GW-BASIC 에서 입출력 루틴을 일부 변형한 각 기업이름의 버전을 제공하였는데, 적절한 한글 바이오스 프로그램의 동작 환경 하에서 GW-BASIC 의 기본 그래픽과 한글 출력을 함께 할 수 있었다. 이를 이용한 한글 게임 및 응용 프로그램들도 GW-BASIC 으로 개발되었었고 일부 소스들은 아직까지 남아서 인터넷 상에서 구할 수 있으나 서로 다른 기업의 GW-BASIC 버전에서 사용하는 그래픽 모드 번호도 틀리고, 일부 그래픽 함수의 인자의 사용에도 약간 다른 경우가 있으며, 결정적으로 사용해야 하는 한글 바이오스에 따라 아예 한글 코드 (조합형/완성형) 자체가 틀리면 아예 한글을 제대로 볼 수 없는 상황이 발생한다.


본인은 고전 프로그램 동호회 들에 가입하여 자료를 받아서 실행해 보다가 얼마전 네이버 도스/Win31 동호회에서 GW-BASIC 으로 작성한 마크로스 라는 게임 소스를 얻었다. 


http://cafe.naver.com/cirius/16414


꼭 한번 돌려보고 싶은데 아쉽게도 허큘리스 모드에 완성형 코드로 되어 있는 프로그램이어서 어느 GW-BASIC과 한글 바이오스를 맞추어야 돌릴 수 있는지 알지 못하는 이상은 돌려볼 수가 없었다. 댓글들도 여럿 달려있는데 어떤 분은 EGA 모드(640x350 해상도)로 소스를 조금 뜯어 고쳐서 한글은 안나오지만 그래픽은 조금 잘리는 채로 나오는 것을 보았다는 글도 있었다. 다만 역시 완벽하게 돌린 것이 아니었다. 게다가 프로그램은 그래픽 모드의 함수 중 비트맵을 일부 메모리에 저장했다가 붙이는 기법을 사용하였기에 허큘리스와 같은 모노 모드를 제대로 맞추어 주지 못하면 게임의 진행에도 문제가 있는 듯 했다.


이에 이를 해결하고 싶어 이것 저것 테스트도 많이 해 보았지만 최근까지는 실패의 연속...


그러다가 카페 및 인터넷 등에서 모은 국내 대기업 GW-BASIC 들은 자체의 회사 이름을 MS 이름의 아랫줄에 보여줌을 눈치챘다. 그래서 모아놓은 프로그램들을 살펴보니 대충 오리지널 Microsoft 것 외에도 대우, 삼보TG, Seiko-Epson 것 들이 있음을 확인했다. 첨부 파일에는 GWB-DW/TG/SE/MS 라는 이름으로 바꾸어 놓았다.



HGWBASIC.zip



다음으로 GW-BASIC 의 그래픽 모드들에 대해 인터넷을 통해 살펴보니 그래픽 카드 종류에 따라 지원하는 모드들을 정리할 수 있었다. 다만 이 자료의 내용은 MDPA, CGA, EGA 까지만 포함하고 허큘리스 처럼 정통 IBM PC 에서 다루지 않는 카드의 그래픽 모드는 포함되어 있지 않다.


http://www.antonis.de/qbebooks/gwbasman/screens.html


헌데 앞서 언급한 macross 베이식 소스의 경우 screen mode 3을 사용하는 것으로 코딩되어 있고 (이 모드 번호는 위의 자료에는 아예 없는 번호이다), 예전의 경험으로는 일부 조합형 프로그램에서는 screen mode 2를 그래픽 모드로 사용하면서 한글도 출력하는 것이 기억 났다. 


이에 앞서 모아놓은 GW-BASIC 버전들 마다 도스박스 허큘리스 모드에서 돌려보고 screen mode 2와 3을 실행해 본 결과 (한글 바이오스  띄우지 않은 상태) 재미있는 결과를 얻었다.


GWB-MS : screen 1, 2 명령어 에러는 안나지만 허큘리스 카드에 대해 그래픽 불가.

GWB-SE : screen 1, 2 지원, 두 모드 모두 해상도 720x348, 기본 그래픽 가능. 텍스트 프린트 가능.

GWB-TG : screen 1, 2 명령어 에러는 안나지만 허큘리스 카드에 대해 그래픽 불가.

GWB-DW : screen 1, 2 불가. screen 3 으로 640x400 전환. 기본 그래픽 가능. 텍스트 프린트 안보임.


다음으론 한글 바이오스 중 삼보의 NKP 와 마이크로소프트의 MSHBIOS 를 사용해서 추가적인 테스트를 해 보았다. NKP의 경우 NKP 만으로는 안되고 HGC.COM (옵션 필요, hgc full) 을 먼저 실행해야 한다. NKP만 실행할 경우 도스박스의 화면이 깨어진다. 






각 바이오스에 대해 각 버전의 GW-BASIC 에서 그래픽과 한글이 함께 되는지 테스트 한 결과이다. (MSHBIOS.COM 의 경우는 도스 프롬프트에서 우선적으로 실행해야 한다. batch 파일 내에 넣어서 실행하려 할 경우 문제 발생. 실행시 옵션으로는 /k:6 을 해 줌으로써 Lshift-space 로 한영 전환을 할 수 있다.)


MSHBIOS.COM


GWB-MS : screen 1, 2 명령어 에러는 안나지만 그래픽 불가.

GWB-SE : screen 1, 2 지원, 두 모드 모두 해상도 720x348, 기본 그래픽 가능. 텍스트 프린트 가능.

GWB-TG : screen 1, 2 명령어 에러는 안나지만 그래픽 불가.

GWB-DW : screen 1, 2 불가. screen 3 으로 640x400, 기본 그래픽 가능. 텍스트 프린트 가능.



HGC full / NKP 


GWB-MS : screen 1, 2 모드 전환. 글자는 보이지만 그래픽 안보임. Shift+Space 후에도 한글 입력 불가 (깨짐)

GWB-SE : screen 1, 2 모드 전환. 글자는 보이지만 그래픽 안보임. Shift+Space 후에도 한글 입력 불가 (깨짐)

GWB-TG : screen 1, 2 모드 전환. 텍스트 그래픽 모두 출력. 다만 인터프리터 상에서 한글 입력 불가 (깨짐)

GWB-DW : screen 1, 2 불가. screen 3 으로 640x400, 기본 그래픽 가능. 텍스트 프린트 안보임.


오리지널 도스박스는 화면이 깨짐. SVN20130725 에서는 문제 없음. 테스트는 Daum SVN에서.. 







이상의 실험 결과 삼보 GW-BASIC과 NKP 의 조합, 그리고 대우 GW-BASIC 과 MSHBIOS 의 조합으로 640x400 모드에서 그래픽과 한글 (각각 조합형과 완성형) 출력이 가능함을 확인하였다.


이를 바탕으로 앞서 언급한 MACROSS.BAS 를 GW-BASIC 에서 로드 후 아스키 파일로 저장 (save "filename.bas", a 옵션) 후 텍스트 에디터로 읽어본 결과 한글은 완성형임을 다시한번 확인했고 screen mode 3 을 사용함을 알았기에 MSHBIOS와 대우 GW-BASIC 조합으로 돌려본 결과 완벽하게 돌아감을 확인하였다. 




그리고 코드를 조합형으로 변환하여 (스크린 모드 명령어는 모드 2로 모두 바꾼 후) 저장한 후 NKP+삼보베이식 조합으로도 잘 됨을 확인하였다.





다음으로 삼보에서 기본으로 제공했었던 것으로 판단되는 그래픽-한글 데모 프로그램 두가지 역시 코드 변환하여 삼보, 대우 베이식에서 각각 돌려본 결과 그래픽 명령어 인자에 작은 차이가 있음을 확인하였다. 삼보의 경우 PAINT 명령어에서 색상 인자를 7번까지 사용할 수 있는 반면, 대우의 경우 3까지만 가능함을 확인했다. 


다음은 paint fill 테스트 코드이다.


10 CLS

20 SCREEN 3   ' FOR NKP+TG GW-BASIC, SET 2

25 W=70

30 FOR C=1 TO 7

35 X = (C-1)*W

40 LINE (X,0)-(X+W-10,W-10),,B

50 PAINT (X+1,1),C

60 NEXT




MSHBIOS + 대우 GW-BASIC




NKP + 삼보 GW-BASIC



다음은 삼보 그래픽 데모 프로그램 수행 스크린 샷들이다. 완성형 코드로 바꾸어 MSHBIOS + 대우 것으로 돌렸을 경우는 삼보 조합형의 그래픽 문자가 깨어짐을 볼 수 있다.










이상의 실험 결과 GW-BASIC 으로 작성된 옛 한글 프로그램 소스코드들을 돌려보려면 다음과 같은 환경에서 실행 가능하다는 결론을 내린다.


조합형 프로그램의 경우 : Dosbox SVN / HGC-NKP / GW-BASIC 삼보 TG 버전

완성형 프로그램의 경우 : Original or SVN 버전 Dosbox / MSHBIOS / GW-BASIC 대우 버전