MS Virtual PC 2007 и MS DOS

На последнем форуме компаний-разработчиков "Innovation Day" Алексей Федоров вспомнил про MS DOS. Про то какие там замечательные INT и что с ними можно сделать. Все это навеяло воспоминаниями, а тут еще и проектик один попался под DOS. Решил я DOS завиртуализировать … но как оказалось, не так все просто! Итак, по порядку.
Во-первых, с помощью чего виртуализировать? Так как операционная система под которой все буду делать Vista Home Premium, – то выбор в общем-то и не такой большой. Будем ставить Microsoft Virtual PC 2007. Можно конечно поставить и VMWare, но версия которая работает с USB стоит денег, а по основным показателям бесплатные версии в общем по функционалу одинаковы, и можно надеяться что так как и виртуализируемая операционная система (ОС) и хостовая от Майкрософт, то это будет лучший вариант. (наивный?, но логика железная!). Ну чтож, ставим версию 6.0.192.0, она же Microsoft Virtual PC 2007 SP1.
Во-вторых, где взять собственно DOS? Оффициально он не поддерживается, но для подписчиков MSDN и подписчиков Technet Plus его можно спокойно скачать. Вот тут уже начинается интересное.
Итак, качаем (вне зависимости от ресурса, результат одинаковый). Если выберем среди языков, доступных для скачивания DOS русский, то нам доступна только одна версия: MS DOS 5.0. Если выберем английский, то две: MS DOS 6.0 и MS DOS 6.22. Но с английскими вариантами не так все просто. Если русский вариант поставляется в виде образов дискет, то английская версия 6.0 доступна не в виде образа, а в виде содержимого трех 1.44 дискет, а версия 6.22 доступна в виде образов, но только как upgrade версия. То есть с помощью нее можно только обновить уже установленную версию. И как прикажите ставить? (вариантов появляется великое множество, все через одно место, но по прямому нельзя) Как обычно у Майкрософт все продумано кучей умов, а реализовано чьими-то третьими кривыми ручками … Эх, для начала будем ставить русскую версию, ибо она в образах, хоть и не последняя.
Вы думаете все так просто? Неа. Итак, создаем новую виртуальную машинку, памяти немного, 32 Мб вполне хватит, и жесткий диск, мегабайт на 100. Теперь нужно "вставить" в дисковод "дискету" в виде файла. Доступно два варианта, в виде образов по 360 Кб и по 720 Кб. Если попробуете "вставить" образ в 360 Кб то будет выдано предупреждение, что виртуальная машина поддерживает только два формата "дискет", по 720 Кб и 1.44 Мб. Ну чтож, если попробуем файл на 720 Кб – получим тоже самое предупреждение! – неправильный размер файла. Мде, в части совместимости Майкрософт опять на высоте. Размер файла действительно немного меньше. Эх, цепляю (без всякой надежды) к моему ноутбуку Toshiba от этой же фирмы USB флоппик, нахожу старую дискету, она даже в нем форматируется. После чего пробую создать дискету с помощью утилитки, которая идет в комплекте. Естественно ничего не получается (как же? как бы не так, даст Vista прямой доступ к диску А на низком уровне для DOS програмки). Утилитка даже дисковод не видит, хотя в командной строке на него можно перейти. (Получается чтобы создать дискетки с DOS, нужно иметь машину, на которой функционирует DOS … весело, хоть и немного утрирую, тут тоже есть куча вариантов, тоже как всегда "по прмой"). Ну чтож, раз танцы с бубном, так уж по полной программе!
Что собой предстаялейт образ дискеты в формате img? Правильно, побайтное последовательное содержимое дискеты безо всяких изменений (за исключением того, что часть свободного протранства в конце обрезали). Нарастим образ дискеты до нужного уровня. Ну ка, чем это можно сделать навскидку? Тот кто до этого с подобными задачами не сталкивался, сообразит не сразу. Для этого годится обыкновенная Visual Studio (кстати проверил, в 2008 версии тоже работает, до этого делал подобное только в версии 6.0). Итак, открываем файл образа дискеты, но не сразу жмем "Открыть", а выбираем "Открыть как …" и открывем как binary файл – в результате открывается хоть и примитивный, но вполне функциональный hex редактор. И в конец файла вставляем нули (можно все что угодно вставлять) до того пока смещение не станет равным 0xB3FFF, то есть в строчке 0xB4000 ничего быть не должно. Сохраняем файл. (Тут на ум приходит команда dd из Linux, как все там просто кажется … хотя там совсем другие танцы, с совсем другим бубном).
Ну чтож, теперь такая "дискета" легко воспринимается и DOS легко устанавливается. (Заметьте, что страна тогда была СССР, а не Россия, по английски USSR). DOS 5.0 установлен, нормально фунциклирует.
Два замечания. Первое. Если Вы попробуете "вставить" дискету в конфигурации виртуальной машины – то у Вас ничего не получится. Это можно сделать только когда машина запущена, щелкнув по иконке дискеты (или в меню запущенной машины). Это Вам не VMWare. Второе замечание, на первом этапе очень часто приходится работать с "дискетками". Но Virtual PC 2007 не имеет своего BIOS, где можно задать порядок загрузки ОС с носителей. Нужно постоянно "дискетку" вынимать. А если у Вас есть реальный или виртуальный дисковод, то отключите (снимите галочку) автоматического определеня дискеты в дисководе.
Теперь можно поверх установить в виде upgrade версию 6.22. Она в этом случае тоже легко становится. Но, для начала нужно нарастить дискеты, как и для MS DOS 5.0 (для формата 1.44 смещение 0x167FFF). И при установке полностью теряются языковые настройки, а DosShell, естественно, отображает бракозябры вместо букв. При этом ручная правка config.sys и autoexec.bat не поможет – русских шрифтов в английской версии просто нет. (Про сторонние средства я не говорю, но их найти не так просто, и с условиями использования тоже не все так просто).
Теперь наступает очередь второго этапа. Это установка в DOS дополнений для более простой работы. Выбираем пункт "Install or Update virtual mashine additional …", видимо что CD-ROM с дополнениями "примонтировался" … а что с ним делать? MS DOS то еще не умеет работать с CD-ROM! Если посмотрим другими средствами на образ этого диска, то увидим, что там присутствует каталог DOS, а в нем есть файлы, в том числе драйвер CD-ROM. Да. Для того чтобы установить дополнения и CD-ROM, у Вас уже CD-ROM должен быть установлен. Как обычно весело и все очень правильно (в предыдущих версиях все это хозяйство, вместе с установочным скриптом лежало в образе дискеты, какой умник перенес на CD-ROM?, Microsoft его бери). Ну чтож. Устанавливаем какую либо программку, эмулирующую виртуальный флоппи диск, или работаем с реальным флоппи-приводом (виртуальная машина мой Toshiba привод прекрасно видит и работает, но я предпочел первый вариант в виде Virtual Floppy Drive 2.1). И переносим файлы сначала на дискету, затем в DOS. Естественно все файлы с расширением sys заносим в файл config.sys с соответствующим префиксом "DEVICE=", а исполняемые или выполняем вручную, либо заносим в autoexec.bat. И после перезагрузки можно монтировать любой каталог хостовой операционной системы (в моем случае Vista под NTFS) в виде буквы в ОС. Кстати, если Вы захотите прочитать диск с дополнениями под DOS, после установки драйвера CD-ROM (в файл config.sys заносим "DEVICE=C:DOSCDROM.SYS" и строку "LASTDRIVE=Z"  предварительно скопировав файл cdrom.sys в каталог C:DOS, а в файл autoexec.bat заносим строчку: "mscdex /D:CDDRVR /M:10 /L:Z"), то убедимся что это невозможно. Дело в том что файловая система файла iso виртуального CD-ROM слишком "новая", и DOS ее непонимает. Почему это было сделано так, неужели нельзя было обойтись без длинных имен файлов да и просто использовать старый формат – совершенно непонятно. И почему больше нет установочного скрипта – тоже неясно, все нужно прописывать ручками.
Если Вы захотите установить сеть … а вот такими средствами никак. На самом деле дистрибив MS DOS 6.22 RUS занимает не три, а пять дискет формата 1.44 (знаю, потому что когда-то покупал MS DOS). Самих дискет у меня не сохранилось, но сохранились образы их, созданные собственноручно с помощью программы diskdupe. (Кстати эта программа тоже не видит ни железный ни виртуальный флоппи привод, но в отличии от предыдущего случая, в формате файла ddi нужно не дополнять файл, а "отрезать" начало файла со служебной информацией). Так вот первый три дискеты – это собственно MS DOS 6.22. Четвертая содержит дополнения, в том числе утилитыот версии 5.0, которые не вошли в первые три обязательных диска. На пятом диске содержится так называемый установщик LAN менеджера, позволяющий MS DOS 6.22 работать в сети Майкрософт, но ему нужен драйвер сетевой карты. Найти этот драйвер очень просто 🙂 (как и все вышеперечисленное просто). При установки LAN менеджера выбираем пункт "Other". А инструкция как установить саму сетевую карту есть в описании драйвера. В MS Virtual PC 2007 виртуализируется сетевая карта DEC 21140A 10/100, где должен стоять чип от Intel 21140. Подходит драйвер от 21143, который можно взять тут.
Кстати, с dosshell работать достаточно неудобно. Для этого лучше всего использовать командный менеджер. Так вот маленькое исследование показало. Самый маленький по размеру и занимаемой памяти является Volcov Commander, но он не бесплатен. Стабильную версию бесплатно можно использовать только 30 дней, а далее его использование незаконно. Популярный Norton Commander тоже не бесплатен. Самым функциональным является DOS Navigator. Его последняя оффициальная версия 1.51 (от версии 1.50 отличается тем, что он не требует ключа и становится бксплатным с выкладыванием исходных версий). Взять его можно тут. Следует учесть, что так как появились исходные тексты, то появилось много его клонов, но ни один у меня нормально под чистым DOS не запустился.
Также совершенно непонятно как можно использовать сам MS DOS 6.22. По идее, для разработчиков он доступен в целях разработки (поэтому и присутствует в MSDN и Technet). Но как его использовать в коммерческих целях?. Поддержки его нет, продаж тоже, но разрешения на бесплатное использование тоже нет. Этот вопрос переодически в сети поднимается, но однозначного ответа нет. Я отправил запрос в Майкрософт (спасибо группе ISV), и от группы лицензионной политики получен следующий ответ (дословно): «MS DOS 6.22 необходимо лицензировать, но, к сожалению, так как продукт устаревший, механизмов лицензирования, например, путем downgrade, к сожалению, нет. Есть трудноосуществимый вариант, который можно предложить, искать коробки, если у кого-то они еще остались. Кроме того, некоторые дистрибуторы Embedded систем возможно все еще поставляют MS DOS 6.22. Контактная информация на сайте: http://www.microsoft.com/windows/embedded/partners/distributors/search.aspx». Маленькое исследование показало, в принципе с трудом, но MS DOS купить можно! К тому же, если Вам он нужен для встраивания, и вам нужен только базовый функционал, то можно купить Windows 98 и использовать только MS DOS 7.0? и он на новом оборудовании работает лучше. Многие советуют использовать FreeDOS. Попробовал я его. В общем основные приложения работают, прерывания отрабатывают верно (пробовал естественно не все, а что было под рукой). Но не все работает корректно, например есть проблемы с некоторыми применениями. Также для виртуальной машины Virtual PC 2007 SP1 использовании драйвера EMM приводит к проблемам, но это описано в документации – решается тонкой настройкой. В общем применять можно, но отлаживать приложение лучше все-таки в MS DOS. Еще одна альтернатива: DR DOS. Его для некомерческих применений можно использовать бесплатно, иначе – можно купить. В общем исследование было маленьким и некоторые выводы не готовы, чтобы их публиковать тут, но выход из проблемы есть.

17 комментариев к “MS Virtual PC 2007 и MS DOS

  1. Кроме Virtual PC и VMWare есть еще и Virtual Box от Sun – абсолютно бесплатный. В нём есть поддержка и USB и флопиков и даже можно выбрать носитель, с которого будет загружаться ОС…

  2. Возможно альтернатива. Но, как я понял, Virtual Box более требовательна к ресурсам для своей работы, VMWare ставит кучку сервисов, которые тоже требуют ресурсов (это касается в основном сети), а Virtual PC самая менее требовательная, хотя у нее возможностей поменьше чем у всех, и есть некоторые недостатки, даже в интерфейсе.
    Ну главный недостаток Virtual Box (впрочем и VMWare) у нее нет дополнений для DOS, то есть локальную папку на хостовой машине нельзя расшарить – а это очень помогает (особенно если учесть, что с сетью у DOS уже не все хорошо по современным меркам).

  3. Попробовал поставить DOS. Два раза Virtual Box зависала при попытке форматирования вирткального диска из под MS DOS офф.установщика. (А совместимость с Vista на сайте заявлена). Да и комп тормозит (это при выделении всего 32 Мб памяти …).
    В общем как-то она у меня не пошла. Попробую еще попозже, нужно поиграться, возможности интересные у нее. Но, например, если создал виртуалку, потом переместил – то подключить ее больше невозможно!, только заново создать (хорошо что виртуальный диск можно подключить … 🙂 )
    DOSBox не пробовал, попробую – отпишусь.

  4. Попробовал DOSBox. Для запуска приложений его использовать конечно можно. но для полноценной разработки чего-либо нет. Есть определенные сложности.
    В общем лучшим вариантом виртуализации MS DOS все-таки является Virtual PC 2007 SP1.

    Обновил статью. Пришел ответ от группы лицензирования Майкрософт. Обновление затронуло только последний абзац.

  5. Дааа, занятно! Повеселило! VS 2008 как hex-редактор и “но Virtual PC 2007 НЕ имеет своего BIOS, где можно задать порядок загрузки ОС с носителей” – мощно, внушает! (С) Хрюн)

    А если в активном окне запускаемой ВМ, как раз при её старте, нажать на клавиатуре Del то появится что?! Гадаем – хомячок, Дедушка Мороз или BIOS?! После с удивлением узнаём – BIOS. Пункт Advanced – подпункт Floppy Configuration – выбираем “размерность” дисковода (360, 720, 1.2, 1.44) – вывод Visual Studio – для программирования, а не для редактирования образов!

    Продолжаем наше увлекательное путешествие – заходим в пункт меню BIOS который называется Boot, то первым подпунктом там что будет?! Пряники? Нет! BOOT DEVICE PRIORITY!!!

    Итог: бубен – в топку, голова, опыт и немного фантазии, а так-же иногда чтение документации, – спасут мир, или некоторых из его обитателей!

  6. Поддерживаю Алексея. Мне тоже многие из возникших перед автором проблем показались странными.

  7. Для Алексея. Если Вы выберете другую размерность, Virtual PC 2007 все равно не сможет работать с образами дискет предоставляемых самим Майкрософт для разработчиков, так как у этих образов “обрезана” пустая часть в конце (хотя многие виртуальные машины сторонних производителей без проблем понимают). По поводу Visual Studio – статья адресована программистам, у них он есть, и это простой способ изменить размер образа (для этого я указал смещение), можно воспользоваться любым HEX редактором. Никакого программирования тут нет.
    Проверил. BIOS действительно есть (просто при первой установке пару раз попробовал войти – не получилось. А так как не пишет стандартной фразы “нажмите Del …”, то более не пробовал). По этому поводу исправлю, виноват.
    Также нашел способ создать виртуальную дискету (через пункт виртуального жесткого диска …). Также то что есть размерность 360 кБ в BIOS – не помогает – такие диски все равно не понимаются, с выводом сообщения, что только либо 700 либо 1,4 Мб. Создал образ в 360 кБ о чудо – он монтируется и работает как нужно.
    Вопросов по тому как сделать виртуальную машину MS DOS остается много и Алексею, прежде чем писать посоветовал бы проверить на данных образах дискет. Но все равно спасибо, а то так бы и не знал, что всетаки есть “полноценный” BIOS, который может решить часть проблем (жаль что нельзя в настройках виртуальной машины все поменять – ведь все равно все хранится в конфигурационном файле).

    Своим постом я хотел показать, что Virtual PC 2007 SP1 для виртуализации MS DOS лучшее решение, но при попытке поднять виртуальную машину возникают неожиданные проблемы (особенно для того кто с Virtual PC не знаком), особенно они касаются несовместимости форматов гибких дисков от того же Майкрософт. Также показал способы решения, наиболее простые с моей точки зрения (не требующим установки дополнительного софта) решения проблем. Хотя без стороннего софта обойтись скорее всего будет сложно.
    PS: по поводу BIOS в ближайшее время исправлю, и еще некоторые мелочи. Вообще сложилось чувство, что графическую среду виртуального сервера писала совсем другая группа программистов и не очень удачно. Сама виртуальная машина радует.

  8. У меня при работе в DOS, установленной в Virtual PC 2007,загрузка процессора на хостовой машине достигает 100%. Почему?

  9. Причин может быть множество, но я такого не наблюдал, хотя эксперементировал много на совершенно разных машинах.
    Additional установлены? idle.exe ко всему прочему запущен?

  10. Ставится просто, все проблемы расписаны.
    Проще всего взять дистрибутив русского MS-DOS 6.22 (его еще можно купить) и поставить прямо с дискет – тогда никаких заморочек не будет.

  11. # Clevelus | 16.10.2008 в 08:46

    Возможно альтернатива. Но, как я понял, Virtual Box более требовательна к ресурсам для своей работы, VMWare ставит кучку сервисов, которые тоже требуют ресурсов (это касается в основном сети), а Virtual PC самая менее требовательная, хотя у нее возможностей поменьше чем у всех, и есть некоторые недостатки, даже в интерфейсе.
    Ну главный недостаток Virtual Box (впрочем и VMWare) у нее нет дополнений для DOS, то есть локальную папку на хостовой машине нельзя расшарить – а это очень помогает (особенно если учесть, что с сетью у DOS уже не все хорошо по современным меркам).

    Скажем так не очень согласен под VMWare все расшаривается под Досом на ура.
    Вот пример http://philatov.ucoz.ru/publ/1-1-0-5

  12. Причин может быть множество. Мне, например, нужно было починить железку, на которой стоит DOS, для комфортной работы многие вещи отладил в виртуальной машине.

Оставить комментарий