Настройка DosEmu
Установка нового FreeDOS
Скачиваем новенький FreeDOS 1.2 (ISO)
- Устанавливаем его в qemu:
$ qemu-img create disk.raw 1G Formatting 'disk.raw', fmt=raw size=1073741824 $ qemu -m 48M -cdrom FD12CD.iso -hda disk.raw -boot d
- Распаковываем образ в каталог:
$ mkdir dosemu $ 7z x disk.raw -odosemu
Запускаем FreeDOS в DOSEmu
$ xdosemu -i`realpath dosemu`
- Должно получиться примерно так:
- Должно получиться примерно так:
Выход из xdosemu — Ctrl+Alt+PageDown
Настраиваем русский в FreeDOS
Редактируем AUTOEXEC.BAT и FDCONFIG.SYS по вкусу, должно остаться что-то вроде этого:
FDCONFIG.SYS:
SWITCHES=/F SET DOSDIR=C:\FDOS !COUNTRY=007,866,C:\FDOS\BIN\COUNTRY.SYS !LASTDRIVE=Z !BUFFERS=20 !FILES=40 DOS=HIGH DOS=UMB DOSDATA=UMB DEVICE=C:\FDOS\BIN\HIMEMX.EXE SHELLHIGH=C:\FDOS\BIN\COMMAND.COM C:\FDOS\BIN /E:1024 /P=C:\AUTOEXEC.BAT
AUTOEXEC.BAT:
@ECHO OFF SET DOSDIR=C:\FDOS SET LANG=RU SET TZ=UTC SET PATH=%dosdir%\BIN SET NLSPATH=%dosdir%\NLS SET HELPPATH=%dosdir%\HELP SET TEMP=%dosdir%\TEMP SET TMP=%TEMP% SET BLASTER=A220 I5 D1 H5 P330 SET DIRCMD=/P /OGN /Y SET COPYCMD=/-Y IF EXIST %DOSDIR%\BIN\DOSLFN.COM LH DOSLFN NLSFUNC %dosdir%\BIN\COUNTRY.SYS DISPLAY CON=(EGA,866,2) MODE CON CP PREP=((866) %dosdir%\CPI\EGA3.CPX) MODE CON CP SELECT 866 SET AUTOFILE=%0 SET CFGFILE=C:\FDCONFIG.SYS alias reboot=fdapm warmboot alias reset=fdisk /reboot alias halt=fdapm poweroff alias shutdown=fdapm poweroff alias cfg=edit %cfgfile% alias auto=edit %0 set OS_NAME=FreeDOS set OS_VERSION=1.2 unix -e
- Обратите внимание на то, что в dosemu для ALT приезжает «диск D:» с полезными утилитами
Русские буквы уже есть:
Настраиваем русский в DosEmu
Настроим преобразование utf→cp866, а заодно и раскладку для консольной версии dosemu. Для этого в системный файл /etc/dosemu.conf или в пользовательский ~/.dosemurc впишем такое:
$_layout = "ru" $_external_char_set = "utf8" $_internal_char_set = "cp866"
- Проверяем:
- и
$ ls dosemu AUTOEXEC.BAT COMMAND.COM FDCONFIG.SYS FDOS KERNEL.SYS голоса.txt $ hexdump -C dosemu/голоса.txt 00000000 8a e3 aa a0 e0 a5 aa e3 21 20 0d 0a |........! ..|
- Что ещё смешнее, всё это работает и в консоли:
$ dosemu . . . C:\>dir Volume in drive C is mu/drives/c Directory of C:\ FDOS <DIR> 26.01.2017 6:23 AUTOEXEC BAT 683 26.01.2017 10:02 COMMAND COM 66 945 28.08.2006 23:38 FDCONFIG SYS 241 26.01.2017 9:45 KERNEL SYS 46 685 11.05.2016 21:42 ГОЛОСА TXT 12 26.01.2017 10:15 5 file(s) 114 566 bytes 1 dir(s) 2 147 450 880 bytes free
Обработка командной строки
Чтобы, например, скомпилировать файл с помощью BPC.EXE, надо:
Положить BP куда-нибудь (например, на C:)
- Сделать так, чтобы компилируемый файл лежал в корне отдельного диска (чтобы не заморачваться с путями)
- Перенаправить В/В
Итак:
- Скопируем Паскаль на С:
$ cp -a /var/home/george/.doses/BP/BP dosemu
Добавим C:\BP в путь (в AUTOEXEC.BAT, его надо отредактировать; если бинарники BP лежат не там, на, например, в c:\BP\BIN, добавим этот путь):
$ grep PATH dosemu/AUTOEXEC.BAT SET PATH=%dosdir%\BIN;D:\DOSEMU;C:\BP
Положим туда вот такой сценарий BPCE.BAT:
$ cat > dosemu/BP/BPCE.BAT <<EOF heredoc> @echo off e: if _%1==_ goto bp bpc /Uc:\bp %1 %2 %3 %4 %5 %6 %7 %8 %9 goto end :bp bp /Uc:\bp :end EOF
Положим в linux-путь (например, в /usr/local/bin/ или в ~/bin/) пользователя вот такой скрипт bpc:
1 #!/bin/sh 2 3 ENC=cp866 4 DEHOME="$HOME/.dosemu" 5 6 case "$#" in 7 0) rm -f "$DEHOME/drives/e" ; ln -s "$(pwd)" "$DEHOME/drives/e" 8 xdosemu bpce ;; 9 *) FILE="$1"; shift 10 DIR="$(dirname $(realpath $FILE))" 11 rm -f "$DEHOME/drives/e" ; ln -s "$DIR" "$DEHOME/drives/e" 12 dosemu -dumb "bpce $(iconv -t $ENC <<< "$(basename $FILE) $*")" | iconv -f $ENC | tr '[[:upper:]]' '[[:lower:]]' 13 ;; 14 esac
Не забудем сделать chmod +x этому bpc
Использование всей этой тряхобрахии
BP запускается с помощью bpc
Компиляция файла с выводом ошибок в stdout — bpc file.pas
Запуск файла — xdosemu файл.exe, можно с полным путём
TODO
TODO Настройка geany, чтобы он ошибки парсил
минимизация freedos в стиле dosemu-freedos (в перспектив — вместо)