2015-01-10

DOS에서 EMM386 에러 해결 (최신 하드웨어)

DOS에서 EMM386 에러 해결

잠시 DOS 시절 이야기를 하자면 80386 CPU 이후 1MB 이상의 메모리를 지원하면서 확장메모리로 EMS 메모리를 사용하는 많은 프로그램이 생겼다. 그런데 EMS 메모리를 사용하는 프로그램을 구동시키기 위해 EMM386을 실행시켜야하는데

문제는 DOS로 옛날 386,486,586 시절에는 아무 문제없었던 부분이 현재에 와서는 문제다.

최신 하드웨어에서 DOS를 설치해서 사용하려면

DOS 표준 EMS 메모리 관리자인 EMM386.EXE의 에러가 발생한다.

unrecoverable privileged operation error

Unable to Set Page Frame Base Address

DOS에서는 기본 640K 메모리가 있고 1MB 사이에 UPPER MEMORY 부분에 각종 BIOS가 사용하는 영역이 있다. 자세한 기술적인 부분은 설명하기 어렵지만 최신 하드웨어와 맞지 않아서 생긴 문제다. 찾아보면 대부분 해결책은 EMS 메모리 사용을 하지말라는 (NOEMS) 답변이 대부분이다. 하지만 REAL DOS모드로 옛날 게임이나 프로그램을 구동하려는 경우 EMM386은 쓸 수 밖에 없다. 결국 많은 시도 끝에 문제점을 찾아내 해결하는데 성공했다.

AUTOEXEC.BAT 와 CONFIG.SYS를 수정하면서 거의 수 십번 이상 재부팅을 했다.

바로 DOS를 부팅하는 방법에 따른 문제였다.

보통 순수 DOS 6.22를 사용하든 DOS 7.1을 사용하든 부팅하는 방식에 따라 문제가 생겼다. (이것을 DOSBOX 가상머신으로 사용한다면 물론 또 다른 문제들이 발생 할 수 있고 해결방법도 달라질것이다. 어쩌면 EMM386 문제 따위는 겪지 않고 옛날 프로그램을 더 편리하게 구동 할 수 있을지도 모른다. )

DOS로 부팅을 할 때 단독으로 MBR에 DOS로 부팅하는 경우 또는 부트 메니저를 이용해서 하드디스크 상의 FAT 파티션을 엑세스 하는 경우는 문제가 없다.

보통 USB 또는 하드에 GRUB4DOS 등을 사용하여 멀티부팅하므로 문제가 없는데

USB메모리를 이용해 DOS를 부팅하는 경우 파티션이 FAT32 라면 문제가 생긴다.

메인보드에서는 USB 부팅을 지원하기 때문에 USB로 DOS 부팅을 시도하면 자연스럽게 바이오스는 USB를 C드라이브 파티션으로 DOS는 인식을 한다.

그 상태에서 EMM386을 로딩하면 충돌이 일어난다.(원인은 설명하기 어렵다)

이 문제를 알아내기까지 많은 시간이 걸렸다. 해결 방법은 위에서 설명한대로 DOS가 부팅했을 때 순수 HDD에 설치된 파티션의 DOS 파티션만 인식하면 문제 없었다. 즉 USB 메모리로 부팅을 시도하여 DOS로 진입할 경우 USB메모리가 C드라이브로 인식되면 문제가 발생했다. (물론 이 경우 EMM386 로딩 안하면 문제 없음, 기본 메모리, XMS만 사용할 경우 아무 문제 없음)

USB에 GRUB4DOS 를 사용할 경우 NTFS로 포멧하면 리얼 DOS에서는 NTFS를 기본적으로 인식하지 못하기 때문에 EMM386과 충돌하지 않았다.

그리고 두번째로는 Upper Memory를 사용 할 경우다.

DOS의 기본640k 메모리 영역 아닌 1MB 사이의 메모리 영역을 사용해서 디바이스 드라이버를 로딩할 경우 (DOS=HIGH,UMB 옵션을 킬 때) EMM386을 로딩하면 특정 영역에서 프로그램이 충돌을 일으키는 경우다. 이경우는 DOS=HIGH,UMB를 끄고 하면 EMM386은 로딩되고 충돌도 일어나지 않았다. (각자 하드웨어마다 다를 것이다)

EMM386 RAM AUTO HIGHSCAN 이 명령줄로 결국 모든 것을 해결했지만

UMB영역은 사용하지 못해도 기본적인 XMS,EMS메모리 사용하는 프로그램들이 작동에 문제가 없다.

Unable to Set Page Frame Base Address 이런 에러는 emm386이 연속되는 64k UMB 영역을 찾지못해서 생긴 문제인데, FRAME 옵션으로 으로 강제 지정해 줄 수 있다. MSD라는 유로 먼저 UMB영역을 살펴보고 나서 안전한 영역에 EMM386이 로딩되도록 하면 된다. 보통 시작 주소가 E000 영역이다. 강제지정을 해서도 문제가 발생한다면 아에 DOS=HIGH,UMB 를 REM으로 주석처리해서 아에 사용하지 말아야한다. 기본 메모리는 100Kbyte 정도 줄어들겠지만 훨씬 안전하게 EMS 메모리를 쓸 수 있을 것이다. 기타 문제점들은 좀 더 사용해봐야 알겠지만 이 문제만이라도 해결되어서 속이 후련하다.

최신의 Intel I7 노트북에서도 DOS 7.1은 잘 실행되었다. 물론 30년전 프로그램도 잘 돌아간다. SSD위에서 잘 작동한다.

아직도 DOS를 이용하는 사람들이 많지 않겠지만 도움이 되었으면 하는 바램이다.

DOS에서 EMM386 에러 겨우 해결하고 나니 정말 속이 후련하다.