Эмулятор 8086tiny на Ubuntu
8086tiny - крошечный (8086tiny.c: 760 строк), бесплатный, с открытым исходным кодом, портативный ПК эмулятор Intel / VM, достаточно мощный, чтобы запустить DOS, Windows 3.0, Exel, MS Flight Simulator, AutoCAD, Lotus 1-2-3, и другие подобные приложения. Сайт проекта http://www.megalith.co.uk/8086tiny/
8086tiny эмулирует машины типа PC/XT "конца эпохи 80-х" со следующими характеристиками:
CPU Intel 8086/186;
ОЗУ 1МБ;
контроллер флоппи дисковода 3.5 (1.44МБ/720кБ);
контроллер одного жесткого диска объемом до 528МБ);
графические карты CGA/Hercules с 720x348 2-цветной и 320x200 4-цветной графикой (64кБ видео ОЗУ), и CGA 80x25 16-цветный поддержки в текстовом режиме;
точный таймер прерываний (PIT);
контроллер клавиатуры с 83-клавишным набором (ПК типа XT);
часы реального времени;
спикер (speaker) PC.
Эмулятор использует графическую библиотеку SDL для портативности, и компилируется под целый ряд платформ (Windows, Mac OS X, Linux, Android, iOS, Raspberry Pi)
Сборка 8086tiny на Ubuntu 14.04 64-bit
Должны быть установлены обязательные библиотеки:
libsdl1.2debian, libsdl1.2-dev.
a) Скачиваем с сайта проекта архив с исходниками для UNIX систем (Mac OS X/Linux/Android), последний 8086tiny_125.tar.bz2 (мартовское обновление 2014г);
b) Распакуем архив в какую либо папку, в домашней директории, назовем ее 8086tiny (обзовите как хотите);
c) Откроем терминал (Ctrl+Alt+T) и перейдем в директорию исходника
$ cd 8086tiny
и выполним команду
$ make
gcc, возможно обратит ваше внимание,
что игнорируется проверка возвращаемых значений 'read' и 'write', в строках 290 и 668 (в погоне за минимализмом похоже ее выкинули), можно проигнорировать (файл 8086tiny все равно будет создан), а можно допилить 8086tiny.c, добавив эту проверку
[как то так, я в этом не мастак :)]
в стр.290
read(disk[2], regs8 + (reg_ip = 0x100), 0xFF00);
добавляем проверку
if (read(disk[2], regs8 + (reg_ip = 0x100), 0xFF00) == 1) {
// successfully read
} else {
// failed to read integer
}
, так же и в стр.668
write(1, regs8, 1)
с проверкой
if (write(1, regs8, 1) == 1) {
// successfully read
} else {
// failed to write integer
}
, предупреждения должны пропасть
В любом случае мы получили что хотели - бинарник 8086tiny.
Обратите внимание, что в архиве, а то бишь уже в нашей папке, лежит собранный файлик bios, можете скомпилировать свой, взяв исходник из папочки bios_source (файлик bios.asm), для этого потребуется ассемблер NASM (в наличии "Центра приложений Ubuntu"), пока воспользуемся готовым. Так же найдете готовый образ дискеты с ОС FreeDOS - fd.img
Использование 8086tiny в Ubuntu
Командная строка:
$ ./8086tiny bios-image-file floppy-image-file [@][harddisk-image-file]
, если harddisk-image-file с префиксом @, то 8086tiny загрузится с образа жесткого диска. В противном случае 8086tiny загрузиться с образа дискеты - floppy-image-file.
Под UNIX системами, клавиатура должна быть установлена в нестандартный режим, для этого в архиве имеется скрипт для запуска runme (он должен лежать в одной папке с 8086tiny, bios, fd.img):
[runme]
#!/bin/sh
clear
stty cbreak raw -echo min 0
if [ -f hd.img ]
then
./8086tiny bios fd.img hd.img
else
./8086tiny bios fd.img
fi
stty cooked echo
, как видно из скрипта 8086tiny загружается с fd.img, а при наличии в этой же директории образа жесткого диска с именем hd.img подключит и его. Можете поправить скрипт для своих образов дисков.
Щелкните по runme мышкой, и выберем "Запустить в терминале",
результат не заставит себя долго ждать
Странно, не правда ли? В терминале Ubuntu операционная система DOS :)
На образе fd.img имеется игрулина "Alley Cat"(год выхода 1984), так что можете проверить графические возможности 8086tiny, запустив из строки приглашения команду:
A:\>ALLEYCAT
Источник: http://airvikar.ru/publ/ehvrika/ehmuljator_8086tiny_na_ubuntu/6-1-0-10 |