Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 1개 있습니다.)

Hyper-V에 MS-DOS VM 만드는 방법 - MSDN 구독자 대상

오늘은, 갑자기 MS-DOS 운영체제 하나를 기념으로라도 VM으로 만들어 두어야 하지 않을까... 하는 생각이 들어 갑자기 이 작업을 하고 싶어졌습니다.

Hyper-V에 설치하려고 하는데, 가장 쉬운 방법은 "MS-DOS 6.22 boot ISO" 파일을 이용하는 것이겠지요. 그래서 웹 검색을 하면 아래와 같이 다양한 ISO 파일을 구할 수 있습니다.

Q. How can I install MS-DOS into a virtual machine (VM)?
; http://www.windowsitpro.com/article/virtualization/q-how-can-i-install-ms-dos-into-a-virtual-machine-vm-

그런데, 잘 알지도 못하는 웹 사이트에서 바이너리를 포함하고 있는 iso 파일을 받기에는 너무나 위험한 시도입니다. (허긴... 어떤 사람들은 해킹된 XP 운영체제까지 믿고 사용하는 경우도 있지만.)

그래서, 정식으로 배포되고 있는 마이크로소프트의 MSDN 구독자 다운로드 센터에서 내려받아서 직접 설치해보는 것이 좋겠다 싶었습니다.

현재 구독자 다운로드 센터에 보면 MS-DOS 관련해서 2개의 파일이 올라가 있습니다.

  • MS-DOS 6.0 (English)
  • MS-DOS 6.22 (English)

원래는 6.0이 MS-DOS 운영체제 파일이고, 6.22는 업그레이드 버전입니다. 따라서 6.0을 먼저 설치하고 (원한다면) 6.22로 업그레이드 하는 순으로 작업을 하면 되는데요.

문제는, 6.0을 다운로드 받은 en_msdos60.exe 파일은 (플로피) 디스크 이미지 파일을 만들 수가 없는 단순 파일 묶음이라서 부팅 가능하지가 않다는 점입니다. 반면 6.22는 디스크 이미지 파일은 만들 수 있는데, 업그레이드용이어서 결국 닭이 먼저냐 계란이 먼저냐 하는 식의 문제가 생겼습니다.

그래도 운이 좋았는지... ^^ 약간의 작업 끝에 6.22로도 설치가 가능하다는 사실을 알아냈습니다. ^^

자,,, 이제 그 방법을 공개하겠습니다. ^^




아쉽게도 6.22 버전이라고 해서 곧바로 부팅 가능한 ISO 형태가 아닌 압축 실행 파일(en_msdos622.exe)로써, 실행하고 나면 약 12.5 MB 용량의 파일들이 풀립니다.

압축을 해제하면 /UPGRADE 폴더에 format.com이 있는데, 이를 이용해서 시스템 파일을 전송할 수 있으면 좋을 텐데요. 아쉽게도 윈도우 XP에서 format.com을 실행하면 "Incorrect DOS version"이라는 오류 메시지만 나오고 정상적인 실행이 되지 않습니다.

그래서 그 방법은 포기하고.

또 다른 폴더인 /DISKS에 있는 파일 목록을 보면,

  • 12UPG1.IMG
  • 12UPG2.IMG
  • 12UPG3.IMG
  • 12UPG4.IMG
  • 144UPG1.IMG
  • 144UPG2.IMG
  • 144UPG3.IMG
  • DSKIMAGE.EXE
  • MAKE12.BAK
  • MAKE12.BAT
  • MAKE14.BAT

MAKE14.bat 파일이 눈에 띄는데요. 대충 다음과 같은 내용을 가진 것으로 보아,

echo off
if "%1" == "" goto usage
echo Insert 1.44M disk for INSTALL 1 in drive %1 
pause
echo Creating MS-DOS 6.22 Install Disk 1.
dskimage 144UPG1.img %1
echo Insert 1.44M disk for INSTALL 2 in drive %1 
pause
echo Creating MS-DOS 6.22 Install Disk 2.
dskimage 144UPG2.img %1
echo Insert 1.44M disk for INSTALL 3 in drive %1 
pause
echo Creating MS-DOS 6.22 Install Disk 3.
dskimage 144UPG3.img %1
echo Finished.
goto end
:usage
echo.
echo Usage  MAKE14 drive:
echo.
:end

플로피 디스크를 부팅 가능한 MS-DOS 디스크로 만들어 줄 것 같은 느낌이 듭니다. ^^ 그래서, Hyper-V에서 '가상 플로피 디스크' 3장을 만들고 (dos1.vfd, dos2.vfd, dos3.vfd) Windows XP VM에 dos1.vfd부터 연결 시켰습니다.

그다음, MAKE14.bat 파일을 실행시키면 각각 다음과 같은 단계를 밟으면서 총 3장의 가상 플로피 디스크에 MS-DOS를 담을 수 있습니다.

D:\temp\msdos622\DISKS>MAKE14.BAT a:

D:\temp\msdos622\DISKS>echo off
Insert 1.44M disk for INSTALL 1 in drive a:
Press any key to continue . . .

                             Disk Image Utility 1.0
???????????????????????????????????????????????????????????????????????????????
?         Program Status               ?            Device Status             ?
?Unlocking Device                      ? Current Cylinder:80                  ?
?Closing source                        ? Current Head    :1                   ?
?Closing destination                   ? Type of Device  :1.44MB              ?
?                                      ? Disk Status     :                    ?
?                                      ? File Status     :                    ?
?                                      ?                                      ?
?                                      ?                                      ?
?                                      ?                                      ?
?                                      ?                                      ?
???????????????????????????????????????????????????????????????????????????????
?             Messages                 ?           Memory Usage               ?
?Operation Completed.                  ? Amount Allocated:9   K               ?
?                                      ? Current Segment :1                   ?
?                                      ?                                      ?
???????????????????????????????????????????????????????????????????????????????


1                   21                  41                  61              80
???????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????
Insert 1.44M disk for INSTALL 2 in drive a:
Press any key to continue . . . 992.

                             Disk Image Utility 1.0
???????????????????????????????????????????????????????????????????????????????
?         Program Status               ?            Device Status             ?
?Unlocking Device                      ? Current Cylinder:80                  ?
?Closing source                        ? Current Head    :1                   ?
?Closing destination                   ? Type of Device  :1.44MB              ?
?                                      ? Disk Status     :                    ?
?                                      ? File Status     :                    ?
?                                      ?                                      ?
?                                      ?                                      ?
?                                      ?                                      ?
?                                      ?                                      ?
???????????????????????????????????????????????????????????????????????????????
?             Messages                 ?           Memory Usage               ?
?Operation Completed.                  ? Amount Allocated:9   K               ?
?                                      ? Current Segment :1                   ?
?                                      ?                                      ?
???????????????????????????????????????????????????????????????????????????????


1                   21                  41                  61              80
???????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????
Insert 1.44M disk for INSTALL 3 in drive a:
Press any key to continue . . . 992.


                             Disk Image Utility 1.0
???????????????????????????????????????????????????????????????????????????????
?         Program Status               ?            Device Status             ?
?Unlocking Device                      ? Current Cylinder:80                  ?
?Closing source                        ? Current Head    :1                   ?
?Closing destination                   ? Type of Device  :1.44MB              ?
?                                      ? Disk Status     :                    ?
?                                      ? File Status     :                    ?
?                                      ?                                      ?
?                                      ?                                      ?
?                                      ?                                      ?
?                                      ?                                      ?
???????????????????????????????????????????????????????????????????????????????
?             Messages                 ?           Memory Usage               ?
?Operation Completed.                  ? Amount Allocated:9   K               ?
?                                      ? Current Segment :1                   ?
?                                      ?                                      ?
???????????????????????????????????????????????????????????????????????????????


1                   21                  41                  61              80
???????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????
Finished.


자, 예상대로라면 아마도 dos1.vfd는 부팅 가능할 것입니다. 이를 위해 다음과 같은 초고사양의 VM을 하나 만들고,

Memory: 8MB
Hard Drive: 1GB
Diskette: dos1.vfd 연결
BIOS: 부트 순서를 CD, Floppy, IDE,... 순으로 변경
(제가 처음 Turbo C IDE를 구동했던 PC가 삼성 SPC-3000C였는데요. ^^ 8088 16비트 CPU + 메모리 512KB + 5.25" 플로피 디스크 드라이브 2개만 탑재된 컴퓨터에서 MS-DOS를 구동했었으니... 위의 사양이면 대단한 시스템이죠. ^^)

그렇게 하고 VM을 시작하면,,, 와~~~ 다음과 같이 부팅됩니다. ^^

msdos622_vm_1.png

다시 한번 상기시켜 드리자면, MS-DOS 6.22는 업그레이드 버전이기 때문에 계속 진행하면 안됩니다. 그래서 "ENTER" 키를 누르면 안되고, F3 키를 눌러서 설치 모드를 빠져나와야 합니다.

그럼, "A:>" 프롬프트만 달랑 나타나는데요. 이 상태에서 1GB 대용량 하드 디스크인 c: 드라이브를 인식시키기 위해 fdisk를 실행시켜 줍니다.

msdos622_vm_2.png

이제 다음 순서로 진행해서 하드 디스크에 파티션을 만들어 줍니다.

  • 1번 선택: Create DOS partition or Logical DOS Drive
  • 1번 선택: Create Primary DOS Partition
  • Y 선택: Do you wish to use the maximum available size for a Primary DOS Partition and make the partition active (Y/N)

위와 같이 해주면 다음과 같은 메시지가 나타나고,

System will now restart

Insert DOS system diskette in drive A:
Press any key when ready . . .

계속 진행하면 시스템이 리부팅되고 다시 MS-DOS 6.22 Setup 화면이 반복되어, 이번에도 역시 "F3" 키를 눌러서 빠져나옵니다.

이제 "c:" 드라이브로 변경을 할 수 있는데, 아쉽게도 파티션만 잡힌 상태이기 때문에 사용할 수는 없습니다.

A:\>c:

C:\>dir


Invalid media type reading drive C
Abort, Retry, Fail?a

C:\>a:

A:\>

그렇죠. ^^ 아래와 같이 포맷을 해주어야 합니다.

A:\>format c:

WARNING: ALL DATA ON NON-REMOVABLE DISK
DRIVE C: WILL BE LOST!
Proceed with Format (Y/N)?y


Checking existing disk format.
Formatting 1021.75M
Format complete.

Volume label (11 characters, ENTER for none)?

1,071,104,000 bytes total disk space
1,071,104,000 bytes available on disk

       16,384 bytes in each allocation unit.
       65,375 allocation units available on disk.

Volume Serial Number is 2E55-080B

자, 이제 이 상태에서 A:\>에 있는 setup.exe를 실행시켜 줍니다.

msdos622_vm_3.png

그렇습니다. ^^ msdos 6.22 디스크는 upgrade만 되는 것이 아니고, setup 역시 가능합니다. "ENTER" 키를 두 번 정도 치면 다음과 같이 C:\DOS 폴더에 설치하겠다는 내용이 나오고,

msdos622_vm_4.png

키보드 화살표 키를 이용해서 "Display Type: VGA" 쪽으로 막대를 이동시켜 "ENTER" 키를 누르면 다음과 같이 다양한 Display Type을 선택할 수 있습니다.

msdos622_vm_5.png

들어는 봤습니까? Hercules 모드! 오~~~ 너무 너무 반갑습니다. ^^ 감탄은 그만하고 마저 진행시켜서 본격적인 setup 과정에 들어가면 중간에 다음과 같이 물어봅니다.

msdos622_vm_6.png

"UNINSTALL #1"이라... 제 기억에는 없는 과정이군요. 아마도 '복구 디스크' 성격이 아닐까 싶은데, 어쨌든 이전과 마찬가지로 Hyper-V 콘솔에서 가상 플로피 디스크를 만들어 VM에 새롭게 할당해 준 후 "Enter" 키를 누르면 다시 다음과 같이 물어봅니다.

msdos622_vm_7.png

Hyper-V가 만들어주는 가상 플로피 디스크는 용량이 1.44MB이므로 아래의 것을 선택하고 계속합니다.

그럼, 다시 아래와 같이 "Setup Disk #1"을 넣으라고 합니다. 제 경우에는 이전에 언급한 것처럼 dos1.vfd가 이에 해당하므로 다시 VM에 연결하고 진행합니다.

이후, 이런 식으로 플로피 디스크 연결 작업을 몇 번 수행해서 dos3.vfd까지 완료하면 다음 화면까지 진행됩니다.

msdos622_vm_8.png

"ENTER" 키를 누르기 전에, VM의 "Diskette Drive"에 연결되어 있는 가상 플로피 디스크를 "None" 값으로 설정하여 해제하고 진행합니다.

이제서야 설치 완료 메시지가 나오는군요. ^^

msdos622_vm_9.png

오~~~ 아래는 이와 같은 작업을 거쳐서 만든 Hyper-V 가상 머신에서 MS-DOS 6.22로 부팅한 첫 화면입니다. (제 일생에 HIMEM이라는 단어를 다시 볼 일이 있을 거라곤 생각도 못했습니다. ^^;)

msdos622_vm_10.png





예전에도 한번 설명했지만,

cmd.exe와 command.exe의 차이점
; https://www.sysnet.pe.kr/0/0/348

16비트를 위한 ntvdm.exe 프로세스가 64비트 운영체제부터는 더 이상 제공되지 않습니다. 그래서 현재 어떠한 16비트 프로그램도 실행이 안 되는데요, 그래도 몇몇 대안이 있긴 합니다.

우선, OTVDM이 있는데요,

Open 16-bit Windows applications natively on 64-bit Windows using OTVDM/winevdm
; http://www.toughdev.com/content/2021/09/open-16-bit-windows-applications-natively-on-64-bit-windows-using-otvdmwinevdm/

(winevdm이라고 알려진) OTVDM은 WINE 오픈소스를 기반으로 만들어졌고 github에도 소스코드 및 빌드 버전이 공개돼 있습니다.

otya128/winevdm
; https://github.com/otya128/winevdm

Otvdm/winevdm: run old Windows software in 64-bit Windows
; http://www.columbia.edu/~em36/otvdm.html

파일을 다운로드해 압축을 푼 다음, "install" 단축 아이콘을 실행하는 것이 설치의 전부입니다. 그런데, 아쉽게도 제가 테스트한 프로그램은 오류가 발생합니다.

c:\temp\otvdm> otvdm.exe .\tc2\tc.exe
version: 2161
Turbo C  Version 2.01  Copyright (c) 1987, 1988 Borland International           x3b4/0x3d4: 0x0e (value 0x07)
winevdm: can't exec 'c:\temp\otvdm\tc2\tcc.exe': error=1                       x3b4/0x3d4: 0x0f (value 0x93)
                                                                                x3b4/0x3d4: 0x0e (value 0x07)
c:\temp\otvdm>                                                                 x3b4/0x3d4: 0x0f (value 0x93)

다른 경우에는 잘 되는지 모르겠지만... ^^




그다음 테스트한 것이, NTVDMx64입니다.

NTVDMx64 by Leecher1337
; http://www.columbia.edu/~em36/ntvdmx64.html
; https://github.com/leecher1337/ntvdmx64

NTVDMx64의 경우에는 재미있는 뒷이야기가 있는데요, ^^ 원래, Intel X86 CPU는 자체에 16비트 응용 프로그램을 실행할 수 있는 가상 86 모드(V86)를 지원합니다. 하지만 마이크로소프트는 NT 운영체제를 여러 플랫폼에서 실행할 수 있게 만들면서 V86 모드가 없는 환경에서도 16비트 코드를 실행할 필요가 있었나 봅니다. 그래서 Insignia라는 회사로부터 SoftPC 제품을 라이선싱해 ntvdm.exe로 제공하게 됩니다.

그런데 이후 (Intel이 아닌) AMD는 64비트 long mode를 내놓으면서 v86 모드를 지원하지 않게 됩니다. (legacy 모드에서는 지원합니다.) 어찌보면 마이크로소프트가 64비트 운영체제부터 ntvdm.exe를 지원하지 않는 것도 그 이유라고 짐작할 수 있는데요, 하지만 Insignia의 SoftPC는 다중 플랫폼에서 16비트 x86 코드를 실행할 수 있게 만들어졌기 때문에 그것은 이유가 되지 않습니다.

실제로 Insignia의 SoftPC의 운영 방식은, V86 모드가 허용된다면 그 모드를 사용하고, 그렇지 않은 경우에만 소프트웨어 방식의 CCPU 모드로 동작합니다. 이후 NT의 ntvdm.exe 소스코드가 유출돼 NTVDMx64로 그나마 패치가 될 수 있었던 것은 이러한 CCPU 모드가 이미 제공되었기 때문에 가능했을 것입니다.

아쉽게도 NTVDMx64로 패치한 소스코드를 leecher1337은 공개를 했지만 그것의 컴파일된 버전은 github에서 제공하지 않습니다. 또한 "NTVDMx64 by Leecher1337" 글을 쓴 사람이 CCPU 버전과 HAXM 버전의 컴파일된 파일을 제공하고 있지만, 아쉽게도 HAXM 버전은 다운로드와 동시에 Windows Defender에 의해 삭제되고, CCPU 버전마저도 압축을 풀면 내부에 있던 ldntvdm.dll 파일이 각종 Trojan 바이러스에 걸렸다는 판정으로 삭제를 해버립니다.

따라서, 만약 NTVDMx64를 사용하고 싶다면 Defender에 예외 옵션을 적용해야 합니다. 그런데 이것이 끝이 아닙니다. ^^; 문서에 보면 "Secure Boot" 옵션도 꺼야 한다고 나옵니다. (이외에도 최신 윈도우 업데이트에서 WSL과 충돌나는 문제가 있습니다.)

휴~~~ 제약이 많군요. ^^; 개인적으로 위의 이유 때문에 테스트는 아예 시도조차 하지 않았습니다.


(참고로, 위의 정도만 진행한 VHD 파일의 크기는 14MB 정도이고, 압축하면 7MB로 줄어듭니다. ^^)

[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 1/18/2024]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2019-07-17 09시16분
Patching Visual Basic 4.0 (16-bit) to run in Windows 3.1 within DosBox
; https://chentiangemalc.wordpress.com/2019/07/15/patching-visual-basic-4-0-16-bit-to-run-in-windows-3-1-within-dosbox/

-----------------------

MS-DOS - Public archive
; https://github.com/microsoft/MS-DOS
정성태
2019-07-17 12시40분
[정환] m-dir 생각나네요. 40mb 하드에 도스깔려고 플로피디스켓 준비하던것도 생각나네요.~^^
[guest]
2019-07-17 09시53분
^^ 그러게요, 이것도 쓸모 있어서라기보다는 그때의 추억으로 링크를 담게 되네요.
정성태

1  2  [3]  4  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13551정성태2/12/20242017닷넷: 2213. ASP.NET/Core 웹 응용 프로그램 - 2차 스레드의 예외로 인한 비정상 종료
13550정성태2/11/20242107Windows: 256. C# - Server socket이 닫히면 Accept 시켰던 자식 소켓이 닫힐까요?
13549정성태2/3/20242479개발 환경 구성: 706. C# - 컨테이너에서 실행하기 위한 (소켓) 콘솔 프로젝트 구성
13548정성태2/1/20242309개발 환경 구성: 705. "Docker Desktop for Windows" - ASP.NET Core 응용 프로그램의 소켓 주소 바인딩(IPv4/IPv6 loopback, Any)
13547정성태1/31/20242056개발 환경 구성: 704. Visual Studio - .NET 8 프로젝트부터 dockerfile에 추가된 "USER app" 설정
13546정성태1/30/20241896Windows: 255. (디버거의 영향 등으로) 대상 프로세스가 멈추면 Socket KeepAlive로 연결이 끊길까요?
13545정성태1/30/20241828닷넷: 2212. ASP.NET Core - 우선순위에 따른 HTTP/HTTPS 호스트:포트 바인딩 방법
13544정성태1/30/20241846오류 유형: 894. Microsoft.Data.SqlClient - Could not load file or assembly 'System.Security.Permissions, ...'
13543정성태1/30/20241826Windows: 254. Windows - 기본 사용 중인 5357 포트 비활성화는 방법
13542정성태1/30/20241876오류 유형: 893. Visual Studio - Web Application을 실행하지 못하는 IISExpress - 두 번째 이야기
13541정성태1/29/20241922VS.NET IDE: 188. launchSettings.json의 useSSL 옵션
13540정성태1/29/20242051Linux: 69. 리눅스 - "Docker Desktop for Windows" Container 환경에서 IPv6 Loopback Address 바인딩 오류
13539정성태1/26/20242146개발 환경 구성: 703. Visual Studio - launchSettings.json을 이용한 HTTP/HTTPS 포트 바인딩
13538정성태1/25/20242214닷넷: 2211. C# - NonGC(FOH) 영역에 .NET 개체를 생성파일 다운로드1
13537정성태1/24/20242268닷넷: 2210. C# - Native 메모리에 .NET 개체를 생성파일 다운로드1
13536정성태1/23/20242374닷넷: 2209. .NET 8 - NonGC Heap / FOH (Frozen Object Heap) [1]
13535정성태1/22/20242206닷넷: 2208. C# - GCHandle 구조체의 메모리 분석
13534정성태1/21/20242039닷넷: 2207. C# - SQL Server DB를 bacpac으로 Export/Import파일 다운로드1
13533정성태1/18/20242239닷넷: 2206. C# - TCP KeepAlive의 서버 측 구현파일 다운로드1
13532정성태1/17/20242149닷넷: 2205. C# - SuperSimpleTcp 사용 시 주의할 점파일 다운로드1
13531정성태1/16/20242027닷넷: 2204. C# - TCP KeepAlive에 새로 추가된 Retry 옵션파일 다운로드1
13530정성태1/15/20242010닷넷: 2203. C# - Python과의 AES 암호화 연동파일 다운로드1
13529정성태1/15/20241895닷넷: 2202. C# - PublishAot의 glibc에 대한 정적 링킹하는 방법
13528정성태1/14/20242033Linux: 68. busybox 컨테이너에서 실행 가능한 C++, Go 프로그램 빌드
13527정성태1/14/20241959오류 유형: 892. Visual Studio - Failed to launch debug adapter. Additional information may be available in the output window.
13526정성태1/14/20242048닷넷: 2201. C# - Facebook 연동 / 사용자 탈퇴 처리 방법
1  2  [3]  4  5  6  7  8  9  10  11  12  13  14  15  ...