Запуск 16-битного кода на 64-битной ОС с использованием виртуализации

У меня есть программа под названием Parsonstech Hebrew Tutor, предназначенная для Windows 98. Очевидно, она была скомпилирована как 16-битная программа, хотя она не DOS и имеет графический интерфейс (16-битная программа Windows). Мне удалось заставить его работать на 32-битной Windows XP, работающей на виртуальной машине VMWare, но это слишком много для того, что в противном случае является очень простой и даже переносимой программой (это одна из тех старых программ). который запускается с CD без установки). Я действительно не хочу загружать целую ОС для запуска этой программы.

Тем не менее, я провел некоторое исследование для DOS-бокса и прочитал учебник по установке Windows 3.1 на DOS-боксе, но я все равно считаю, что это полная эмуляция системы, и я не знаю, будет ли программа работать на Windows 3.1, так как он предназначен для Windows 98.

Самая многообещающая вещь, которую я видел, это эмуляция пользовательского режима qemu, которая утверждает, что она может эмулировать только процессор и вызывать программу (даже 16-битные программы), не запуская всю сложную виртуальную среду. Если я не понимаю это. Я попытался вызвать программу следующим образом:

qemu-system-x86_64 HT.exe

из командной строки, но он просто запускается, сбрасывается и не открывает программу. Я думаю, что я использую это неправильно. Может кто-нибудь помочь? Или какие у меня варианты? В идеале я хотел бы создать всю программу и любую виртуализацию, необходимую для запуска переносимого исполняемого файла, без установки проигрывателя VMWare на каждый компьютер, на котором я ее использую. У меня нет исходного кода для его перекомпиляции, и компания, которая его создала, больше не существует, но я не хочу, чтобы она умерла!

1 ответ

Решение

Если приложение 16-разрядное, теоретически вы можете избежать запуска программы внутри DOSBOX. вам нужно это: DOSBOX

После установки вы можете запустить mount C:\foo Z: который будет монтировать папку приложений в DOSBOX. тогда все, что вам нужно сделать, это: Z: а потом appname.exe, Просто не забудьте заменить C:\foo с реальной папкой и appname с настоящим именем exe.

Для меня otvdm была неофициальной заменой Ntvdm, который я искал. В то время как 16-битная Windows использует защищенный режим и, таким образом, вообще не требует доступа в реальном режиме, в отличие от требований Microsoft (требуется доступ к 16-битным сегментам).
Он эмулирует "полностью как Nt" или через Intel Haxm для лучшей производительности, но делает это только для того, чтобы обернуть Syscalls, как Wine сделает в Linux: нет виртуальной сетевой карты; нет виртуального жесткого диска (%systemdrive% является %systemdrive%); нет выделенной, но неиспользованной памяти; и есть опция, которую я ищу, но которая по умолчанию отключена: изменения, внесенные в реестр, вносятся в систему!

Он даже более мощный, чем официальный Ntᴠᴅᴍ: прозрачный уровень доступа к оборудованию настолько высок, что должна быть возможность использовать всю вычислительную мощность оригинального графического оборудования. Хотя в то время для этого не было...

Как и Ntᴠᴅᴍ, он запускается прозрачно и автоматически, когда встречается 16-битная программа.
Единственный плохой момент - пользовательская область Windows 3.11, такая как диспетчер программ, не включенный в эту версию (даже ее клон с открытым исходным кодом), в то время как даже современная 32-битная Windows 10 содержит его. Но, поскольку речь идет о exe, должна быть возможность просто скопировать из 32-битной Windows, чтобы получить их.

Его можно скачать предварительно скомпилировано здесь.

Другие вопросы по тегам