Настройка DOSBox в Ubuntu для программирования на ассемблере x86
Используем Dos Navigator и flat assembler
Программирование на PC для меня началось с Turbo Pascal и Turbo Assembler от компании Borland. В то время мой компьютер на базе Intel 80386SX мог нормально работать только в MS-DOS. Накатила ностальгия, и я решил вспомнить основы x86 ассемблера. Для чистоты эксперимента буду использовать условия приближенные к боевым.
Для начала нужна MS-DOS. Или её аналог. Можно использовать любую виртуальную машину, такую как QEMU или VirtualBox, а затем создать под неё образ системы. Но есть вариант лучше! Вот что говорит нам Википедия про DOSBox:
DOSBox — эмулятор для PC, создающий DOS-окружение, необходимое для запуска старых программ и игр под MS-DOS. Это позволяет играть в такие игры в операционных системах, не поддерживающих или поддерживающих DOS-программы не полностью, и на современных компьютерах, на которых иначе старые программы могут не работать или работают с ошибками.
В данном случае к плюсам DOSBox можно отнести то, что сразу после установки мы имеем готовую к работе DOS, а также возможность монтирования локальных каталогов как дисков.
Итак, чтобы установить DOSBox под Ubuntu, достаточно выполнить команду:
sudo apt install dosbox
Готово. Теперь нужно настроить среду. Для начала создадим каталог, который будем монтировать в DOSBox.
mkdir ~/DOS
Чтобы иметь возможность редактировать исходники и удобно перемещаться по файловой системе, будем использовать консольный файловый менеджер Dos Navigator. Скачиваем и распаковываем его в ранее созданный каталог DOS.
cd ~/DOS
wget https://www.ritlabs.com/download/dn/dn151.zip -O dn151.zip; unzip dn151.zip -d DN; rm dn151.zip
Туда же скачаем и распакуем наш ассемблер. Мой выбор пал на flat assembler. Именно так, с маленькой буквы. 😉
cd ~/DOS
wget https://flatassembler.net/fasm17323.zip -O fasm17323.zip; unzip fasm17323.zip -d FASM; rm fasm17323.zip
Настраиваем параметры автозагрузки DOSBox в файле конфигурации dosbox-0.74-3.conf
nano ~/.dosbox/dosbox-0.74-3.conf
[autoexec]
MOUNT C /home/vladimir/DOS
C:
PATH=C:\FASM
C:\DN\DN.COM
Раздел [autoexec]
специально создан для команд, которые будут автоматически выполняться сразу после загрузки DOSBox. Давайте разберём что тут происходит в каждой строке:
MOUNT C /home/vladimir/DOS
– монтируем созданный нами каталог как дискC
;\C:
– переходим на дискC
, который теперь содержит скачанные нами программы (по умолчанию система стартует и остаётся на дискеZ
);\PATH=C:\FASM
– добавляем каталог содержащий ассемблер flat assembler в переменнуюPATH
, чтобы можно было стартовать его из любого другого каталога;\C:\DN\DN.COM
– запускаем Dos Navigator.
Запускаем DOSBox и видим окно Dos Navigator, которое отображает содержимое диска C
.
Однако, если сейчас попробовать запустить flat assembler командой fasm
в командной строке, или (что то-же самое) перейти в каталог FASM
и запустить fasm.exe
, то мелькнёт чёрное окно и больше ничего не произойдёт. Но на самом деле вывод в консоль был, и посмотреть его можно, нажав комбинацию клавиш Ctrl+O
, скрыв панели Dos Navigator, и второй раз её же, чтобы панели вновь показать. И там мы увидим ошибку:
error: no 32-bit DPMI services are available.
Проблема в том, что flat assembler требует для своей работы DPMI, который DOSBox не может эмулировать самостоятельно.
DPMI (DOS Protected Mode Interface) — протокол доступа к памяти, с помощью которого DOS-программа может использовать дополнительную память персонального компьютера с адресами выше 1 Мбайта, недоступную при работе процессора 80x86 в реальном режиме. Практически все DOS-расширители основаны на DPMI и позволяют программам DOS обращаться ко всей памяти компьютера и работать в защищённом режиме. Самым известным отдельным ядром DPMI является CWSDPMI.
Решает эту проблему запуск CWSDPMI в фоновом режиме. Закрываем окно DOSBox. Переходим в каталог ~/DOS
, скачиваем и распаковываем архив с CWSDPMI.
cd ~/DOS
wget http://sandmann.dotster.com/cwsdpmi/csdpmi7b.zip -O csdpmi7b.zip; unzip csdpmi7b.zip -d CWSDPMI; rm csdpmi7b.zip
Добавляем запуск CWSDPMI в параметры автозагрузки DOSBox
nano ~/.dosbox/dosbox-0.74-3.conf
[autoexec]
MOUNT C /home/vladimir/DOS
C:
PATH=C:\FASM
C:\CWSDPMI\BIN\CWSDPMI.EXE -p
C:\DN\DN.COM
Стартуем DOSBox по новой.
И видим, что flat assembler теперь работает нормально. Можно начинать писать программы на ассемблере.
Создаём в корне диска C
каталог SRC
, нажав клавишу F7
; а в ней файл START.ASM
, нажав комбинацию клавиш Shift+F4
.
Содержимое файла START.ASM:
; START.ASM
org 100h
int 20h
Компилируем файл командой:
fasm start.asm
Получаем скомпилированную программу размером в 2 байта, которая ничего не делает, кроме как завершает свою работу. Как два байта переслать! 😏
flat assembler содержит примеры исходников различных программ в каталоге C:\FASM\EXAMPLES
, можете с ними ознакомиться.
Ссылки
DOSBox – страница для загрузки DOSBox.
Dos Navigator – страница для загрузки Dos Navigator.
flat assembler – страница для загрузки flat assembler.
CWSDPMI – страница для загрузки CWSDPMI r7.
Все программы указанные в примерах, также можно скачать с этого сайта: