DOSBOX on ARM

오우... 요 글 제목은 좀 괜찮은거 같다.

이번 삽질은 ARM기반의 임베디드보드에 빌게이츠 할아버지가 만든 DOS (Disk Operating System) 운용이 가능하도록 하는 에뮬레이션 환경인 DOSBOX의 포팅이다.

DOS시절 (저는 아재가 아니라 DOS는 잘 모립니다)의 응용 프로그램을 그 당시 하드웨어 환경으로 모사하여 동작시켜주는 DOSBOX가 있다는걸 얼마전에 알았다. PC에서 잠깐 돌려보니 config.sys, autoexec.bat, himem, emm386 등등 거의 모든 환경이 그 당시와 유사하게 에뮬레이션 된다 (대단한데?).
스트라이크 커맨더를 돌리려고 640KB의 제한과 상위 메모리 1KB라도 더 빼내기 위해 고군분투 했던 일들.... 이 왜 기억 날까?...

DOS에서 돌아가던 고전 게임을 돌리기위한 DOSBOX사용이 대단히 활발하다.

나는 게임을 돌리기 위해서가 아니고, 그 시절 사용하던 ALL03A라는 Universal Programmer를 재활용 하기 위해 DOSBOX를 ARM 임베디드보드에 포팅하였다.
ALL03A는 EEPROM이나 GAL, PAL, CPLD, PIC등 프로그래밍 가능한 디바이스들의 프로그래머인데, IBM PC에 ISA 인터페이스 카드를 장착하고 DOS용 프로그램으로만 동작된다. 예전에 USB 기반으로 ISA 버스가 없는 PC에서 사용해 보려고 USB 어댑터 개발을 시도한 적이 있었는데 ALL03A SW를 모두 새로 다시 짜야하는 문제와 USB 패킷으로 일반 CPU BUS의 I/O를 흉내내는데는 속도의 한계가 있어 중단 되었다.

ALL03A SW는 ISA 버스를 통해 I/O를 수행하는데 현재의 PC환경에서는 이 I/O를 간편하게 핸들링 할 수 있는 포트가 없다.
그래서 ARM기반 임베디드시스템을 활용 하였다. 임베디드 보드를 활용 할 경우 GPIO를 OS에서 이용할 수 있으므로 이 GPIO를 이용하여 ISA BUS 기반으로 움직이는 데이터를 모사하면 된다. 보드에 임베디드 리눅스를 올리고, DOSBOX를 ARM용으로 포팅하여 실행 한다음, 거기에서 ALL03A SW를 구동시킨다. ALL03A SW가 ISA BUS에 접근하는 포트에 핸들러를 등록하고 해당 핸들러에서 리눅스 디바이스드라이버를 호출하여 I/O를 해결한다. 디바이스드라이버는 GPIO 포트를 이용하여, ALL03A SW의 I/O 호출에 대해 해당 핀의 물리적 동작을 직접 수행하는 구조이다. 말로 설명 할려니 복잡하군.

여튼, 작업 순서는 다음과 같다.

  - ARM 임베디드 보드에 임베디드 리눅스 포팅
  - ALL03A 하드웨어 인터페이스용 GPIO 인출 (ALL03A는 5V이므로 3.3V 레벨 쉬프팅 필요)
  - 인출한 GPIO에 대한 리눅스 디바이스드라이버 개발
  - DOSBOX를 ARM용으로 빌드, 이때 DOSBOX 소스를 수정하여 ALL03A SW가 접근하는 I/O어드레스에 리눅스의 GPIO 드라이버를 호출하는 핸들러를 개발 해야함

사용한 ARM 임베디드 보드는 예전에 리버스엔지니어링하여 리눅스를 올려놓은 S3C6410 네비게이션을 활용하였다.
DOSBOX에서 사용하는 640x200영역은 문제가 없으나 사용하지 않는 이외 영역은 화면 내용의 일부가 중복되거나 garbage데이터가 들어가는 모양이다. 손좀 봐야 겠다.


[S3C6410 기반 네비게이션 UB-5에서 DOSBOX 실행]


[ALL03A SW 파일 리스트]


[ALL03A의 EEP1.EXE 실행 화면]

다 만들고 돌려보니, 일단 ALL03A 하드웨어가 인식된다. 유후~~
ALL03A SW를 DOS박스에서 동작 시켜보니 일단 실행하는데는 문제가 없다.
그런데 ALL03A SW 실행시 특정 키 입력 대기 메뉴에서 ALL03A와 무수한 I/O가 수행되는데 이게 문제를 일으킨다. 단순 키보드 입력 대기 인데 알 수 없는 I/O가 발생되고 정상동작 되지 않는다. 이 부분은 왜그런지 모르겠다.

위 USB 어댑터 페이지에 http://matthieu.benoit.free.fr 링크에 보면 관련자료가 있는데, 그곳에서 구한, 일반 유저가 개발한 ALL03A SW에서는 그런 현상이 발견되지 않으며 정상 동작한다.
아마 오리지날 제작사에서 자체적으로 리버스엔지니어링등에 의한 카피 방지를 위한 코드가 아닐까 하는 의구심만 들 뿐이다.

댓글 1개:

  1. os없는 Arm을 찾다가 들어와 봅니다.
    dos 박스 --재미있는 프로그램이네요.
    하시는일 모두 건승 하십시오.
    저도 땜쟁이 ^^

    답글삭제