DOSBox
Posted: Mon Mar 05, 2007 8:45 pm
http://diamondz.land.ru/dosbox.7z
Использование по назначению: запуск DOS-программ, то, что для этого требуется, подробно описывается в readme.txt (взятом из официальной версии).
Использование не по назначению. Портированная версия DOSBox может быть использована для получения Windows-консоли, умеющей запускать многие консольные Windows-приложения. Для этого зайдите на http://www.doswin32.com или ftp://ftp.doswin32.com/pub и скачайте пакет DosWin32 - эмуляция Win32-подсистемы на базе DOS. Обязательно требуется сам пакет dw32core.zip, желательна также документация dw32docs.zip, можно ещё и утилиты dw32tool.zip (может, вам хочется работать с имеющмися файлами Windows-реестра). Для запуска рекомендуется вместо входящего в пакет run32.exe использовать http://diamondz.land.ru/run32db.com (должна лежать в той же папке, что и doswin32.rtm). Собственно запуск: сначала следует монтировать DOS-диски на существующие папки командой mount (например, "mount c /hd0/1","mount d /hd0/2", чтобы dosbox'овские диски соответствовали виндовым; можно указывать и некорневые папки, чтобы, например, вирусы в случае существования таковых точно никуда не пролезли). Потом запустить run32db без аргументов ("c:\doswin32\dw32core\run32db" или куда вы там её положите). И немного подождать, потому что процесс инициализации занимает десяток-другой секунд. Эти действия можно запихать в conf-файл (секция autoexec), причём рекомендуется использовать dosbox2.conf и загружать dosbox с опцией -f dosbox2.conf (кажется), а то вдруг вам захочется использовать эмулятор по назначению и не ждать загрузки Win32-подсистемы. Всё, получилась Windows-консоль. Программы, не использующие всяких извратов, работают: fasm вообще не выпендривается, masm'овский компилятор работает, masm'овский линковщик требует msvcrt.dll, причём идущая с 2k/XP не работает, но идущая с 9x или с VC6 (кстати, на диске VC6 она помечена как redistributable) нормально обрабатывается (dll'ки ищутся в текущем каталоге, в каталоге doswin32.rtm и в PATH), компилятор командной строки из Visual Studio до 2005 работает (линковщик требует imagehlp.dll, с ней та же история, что и с msvcrt.dll), cl.exe из VS2005 не идёт, ибо юзает кучу совершенно левых функций Утилиты из MinGW тоже не работают, потому что кто-то очень "умный" додумался использовать FindAtomA/AddAtomA/GetAtomNameA. Far работает. Командные файлы (во всяком случае, неизвращённые) работают. Но поскольку это всё-таки DOS, то длинных имён папок не поддерживается совсем, а длинные имена файлов могут работать немного криво (но вроде работают). Кроме того, поскольку это всё же эмулятор с "ненастоящим" процессором, консоль тормозит (в некоторых случаях ускорения можно добиться, указав в dosbox.conf "core=dynamic"). А поскольку мы живём в глючном мире, мышкой в окне щёлкать не стоит (можно, но только в том случае, если вы собираетесь тестировать Alt+F4). Рекомендуемый выход - команда exit. Два раза (первый - выход из DosWin32, второй - собственно из DOSBox).
Ещё эмулятор позволяет загружать другие операционные системы (безотносительно DOS-консоли). Впрочем, Колибри не загружается: на K0650 загрузка доходит до "Reading TSC", после чего всё по понятным причинам виснет, ибо DOSBox эмулирует 486-й процессор, не знающий про rdtsc (о чём, между прочим, честно предупреждает в ответ на cpuid). Ядро svn.380 (такое было на момент тестирования, но, кажется, там ничего не изменилось) эмулятор загружать вообще отказывается, мотивируя такое решение PageFault'ом в init_LFB.map_page_tables (на инструкции rep stosd). Который, естественно, оказывается фатальным, ибо в этот момент IDT ещё не инициализирована. Поскольку время было позднее, за пять минут созерцания кода я только понял, что либо все страницы отображаются на первую страницу физического LFB-буфера, либо я чего-то не понимаю, и решил отложить выяснение до лучших времён.
Использование по назначению: запуск DOS-программ, то, что для этого требуется, подробно описывается в readme.txt (взятом из официальной версии).
Использование не по назначению. Портированная версия DOSBox может быть использована для получения Windows-консоли, умеющей запускать многие консольные Windows-приложения. Для этого зайдите на http://www.doswin32.com или ftp://ftp.doswin32.com/pub и скачайте пакет DosWin32 - эмуляция Win32-подсистемы на базе DOS. Обязательно требуется сам пакет dw32core.zip, желательна также документация dw32docs.zip, можно ещё и утилиты dw32tool.zip (может, вам хочется работать с имеющмися файлами Windows-реестра). Для запуска рекомендуется вместо входящего в пакет run32.exe использовать http://diamondz.land.ru/run32db.com (должна лежать в той же папке, что и doswin32.rtm). Собственно запуск: сначала следует монтировать DOS-диски на существующие папки командой mount (например, "mount c /hd0/1","mount d /hd0/2", чтобы dosbox'овские диски соответствовали виндовым; можно указывать и некорневые папки, чтобы, например, вирусы в случае существования таковых точно никуда не пролезли). Потом запустить run32db без аргументов ("c:\doswin32\dw32core\run32db" или куда вы там её положите). И немного подождать, потому что процесс инициализации занимает десяток-другой секунд. Эти действия можно запихать в conf-файл (секция autoexec), причём рекомендуется использовать dosbox2.conf и загружать dosbox с опцией -f dosbox2.conf (кажется), а то вдруг вам захочется использовать эмулятор по назначению и не ждать загрузки Win32-подсистемы. Всё, получилась Windows-консоль. Программы, не использующие всяких извратов, работают: fasm вообще не выпендривается, masm'овский компилятор работает, masm'овский линковщик требует msvcrt.dll, причём идущая с 2k/XP не работает, но идущая с 9x или с VC6 (кстати, на диске VC6 она помечена как redistributable) нормально обрабатывается (dll'ки ищутся в текущем каталоге, в каталоге doswin32.rtm и в PATH), компилятор командной строки из Visual Studio до 2005 работает (линковщик требует imagehlp.dll, с ней та же история, что и с msvcrt.dll), cl.exe из VS2005 не идёт, ибо юзает кучу совершенно левых функций Утилиты из MinGW тоже не работают, потому что кто-то очень "умный" додумался использовать FindAtomA/AddAtomA/GetAtomNameA. Far работает. Командные файлы (во всяком случае, неизвращённые) работают. Но поскольку это всё-таки DOS, то длинных имён папок не поддерживается совсем, а длинные имена файлов могут работать немного криво (но вроде работают). Кроме того, поскольку это всё же эмулятор с "ненастоящим" процессором, консоль тормозит (в некоторых случаях ускорения можно добиться, указав в dosbox.conf "core=dynamic"). А поскольку мы живём в глючном мире, мышкой в окне щёлкать не стоит (можно, но только в том случае, если вы собираетесь тестировать Alt+F4). Рекомендуемый выход - команда exit. Два раза (первый - выход из DosWin32, второй - собственно из DOSBox).
Ещё эмулятор позволяет загружать другие операционные системы (безотносительно DOS-консоли). Впрочем, Колибри не загружается: на K0650 загрузка доходит до "Reading TSC", после чего всё по понятным причинам виснет, ибо DOSBox эмулирует 486-й процессор, не знающий про rdtsc (о чём, между прочим, честно предупреждает в ответ на cpuid). Ядро svn.380 (такое было на момент тестирования, но, кажется, там ничего не изменилось) эмулятор загружать вообще отказывается, мотивируя такое решение PageFault'ом в init_LFB.map_page_tables (на инструкции rep stosd). Который, естественно, оказывается фатальным, ибо в этот момент IDT ещё не инициализирована. Поскольку время было позднее, за пять минут созерцания кода я только понял, что либо все страницы отображаются на первую страницу физического LFB-буфера, либо я чего-то не понимаю, и решил отложить выяснение до лучших времён.