Весьма неформатный для канала пост, трековая музыка. Как сейчас модно говорить, Хенд мейд и тд. Всем кто помнит *.ult, *.s3m, *.xm, *.669 и многое другое.. Простите с амигой не работал. Добра !
Задача оказалась нетривиальной и совсем неочевидной. Оказывается, что исходные файлы DOS не так-то уж и легко переносятся в git, и уж как минимум, не как текстовые файлы в кодировке UTF-8. Но, к счастью, в отличие от утечек исходников MS-DOS 6.0, здесь имеется полный комплект файлов и инструментов, достаточный для корректной сборки и тестирования. Остались сущие нюансы, которые попили много крови.
Поэтому я, как и многие — начал свои эксперименты по сборке MS-DOS 4.0, с исправлением ошибок, а также возможностью исследования исходных кодов и тестирования их на реальном железе.
В статье же изложено краткое руководство по сборке и созданию загрузочной дискетки.
❯ Инструментарий
Собирать всё буду в Linux Mint (читай Ubuntu). Средой DOS для сборки выбрал dosbox, к сожалению, это не самый лучший вариант, потому что там идёт замедление частоты (чтобы старые программы корректно работали), поэтому сборка идёт достаточно долго. Лучше всего использовать любой удобный DOS, запущенный в виртуальной машине.
Для создания загрузочной дискеты и тестирования полученной сборки буду задействовать виртуальную машину qemu. А чтобы получить дискеты с готовым образом, я буду использовать установочную дискету MS-DOS 4.0 (найденную тут см. 4.00 OEM [Sampo]).
Прежде чем пойдём дальше — важное замечание:
Никаких чужих прав задеть не собираюсь, все модификации кода были сделаны исключительно в юмористических целях, и не подлежат распространению. Модифицированные исходники удалены.
❯ В чём сложности сборки?
Проблемы две:
Некорректная инициализация переменных среды (в самом bat-файле SETENV.BAT содержится ошибки или опечатки).
Проблемы с кодировкой при переносе кода с дискеток DOS в GIT с кодировкой UTF-8.
Первая проблема легко исправляется даже самостоятельно, при беглом анализе исходного кода. Она легко вскрывается при сборке, дальше просто необходимо внести правки, либо создать свой обновлённый bat-файл, который будет инициализировать переменные среды окружения.
Значительно сложнее обстоят дела с тем, что в части кода, при переносе в UTF-8, побились некоторые символы. У меня была попытка сборки, которую я описывал у себя в ЖЖ, и, в конце концов, я получил вот это:
Это достаточно частая и болезненная проблема со старыми исходниками времён DOS. С аналогичной задачей я столкнулся и при попытке собрать программу RAM View. Об этом пути и исправлении проблемы, я подробно написал в статье Правка чужого кода.
Здесь же мы исключим ручной труд и автоматизируем исправление проблем с кодировками.
❯ Подготовительные операции перед сборкой
Итак, шаги по сборке ДОС. Клонируем оригинальный репозиторий:
sed -i -re 's/\xEF\xBF\xBD|\xC4\xBF|\xC4\xB4/#/g' MS-DOS/v4.0/src/MAPPER/GETMSG.ASM sed -i -re 's/\xEF\xBF\xBD|\xC4\xBF|\xC4\xB4/#/g' MS-DOS/v4.0/src/SELECT/SELECT2.ASM sed -i -re 's/\xEF\xBF\xBD|\xC4\xBF|\xC4\xB4/#/g' MS-DOS/v4.0/src/SELECT/USA.INF
и создаём там обновлённый бат-файл для переменных среды окружения, следующего содержания:
$ cat src/e.bat @Echo off echo setting up system to build the MS-DOS 4.01 SOURCE BAK... set CL= set LINK= set MASM= set COUNTRY=usa-ms set BAKROOT=e: rem BAKROOT points to the home drive/directory of the sources. set LIB=%BAKROOT%\src\tools\bld\lib set INIT=%BAKROOT%\src\tools set INCLUDE=%BAKROOT%\src\tools\bld\inc set PATH=%BAKROOT%\src\tools;%PATH%
В принципе этих операций достаточно для сборки, а то что ниже — это лично моё хулиганство, чтобы продемонстрировать, что DOS в действительности собрался, и нет подмены файлов. Я заменяю компанию Microsoft своим ником:
find -name "*.ASM" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} + find -name "*.INC" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} + find -name "*.H" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} + find -name "*.MAC" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} + find -name "*.MSG" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} + find -name "*.C" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} + find -name "*.CLB" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} + find -name "*.SKL" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} +
Всё, теперь исходники подготовлены, для того чтобы их можно было корректно собрать.
❯ Сборка
Собирать буду в dosbox, как показала практика — это не самое лучшее решение, сборка занимает около часа, что, мягко скажем, раздражает.
Запускаю dosbox:
dosbox
Далее в нём монтирую текущую директорию как диск E.
mount e: ./
И переходим на диск e, запускаем в dosbox бат-файл, который инициализирует среду окружения, и начинаем сборку:
e: cd SRC e.bat
и запускаем сборку командой nmake:
Если вы делаете это в dosbox, то можно пойти погулять. Окончанием сборки будет выглядеть следующим образом:
После этого надо скопировать все собранные файлы в один каталог. Создаём каталог «4» в корне диска и копируем все бинарники специальным скриптом:
mkdir \4 CPY.BAT \4
Далее самое интересное:проверка того, что файлы запускаются. Для этого надо сделать так, чтобы dosbox прикидывался старым ДОСом. Выполняем следующую команду:
ver set 4.0
После переходим в каталог\4и можно выполнить в нёмcommand.com:
Хулиганство сработало, ДОС собрался и прикидывается, будто бы я его разработал. Дело стало за малым — протестировать это на реальном железе.
❯ Создание загрузочной дискетки
Дальше я думал просто примонтировать в dosbox пустой образ дискетки, и прямо из собранных файлов выполнить перенос системных файлов командой:
sys <path> a:
Но, факир был пьян, и фокус не удался. Поэтому решил MBR (Master Boot Record) позаимствовать с загрузочной дискетки DOS 4.0. К сожалению, MBR от MS-DOS 6.22 у меня не заработал.
Загружаемся с установочной дискетки и ставим наш пустой образ 1,44 МБ дискетки в дисковод B, с помощью qemu:
qemu-system-i386 -fda Disk01.img -fdb fdd.img
Отменяем установку и форматируем дискету с переносом системных файлов:
По окончании можно закрывать окно qemu. Возвращаемся к окну с dosbox и монтируем полученный образ дискетки, с помощью следующей команды:
imgmount a: <path to fdd.img> -t floppy
И потом просто вручную переносим файлы COMMAND.COM, IO.SYS и MSDOS.SYS на дискету:
Всё, образ готов. Можно его протестировать в виртуальной машине, или даже записать на настоящую дискету и загрузиться!
Для запуска в qemu следует использовать следующую команду:
qemu-system-i386 -fda fdd.img
Записать на дискетку можно командой dd, я использую USB-FDD дисковод.
sudo dd if=fdd.img of=/dev/sdk status=progress
И, да! Эта система успешно работает на реальном железе. В данном случае проверка идёт на 386 компьютере.
❯ Выводы
Запуск свежесобранного MS-DOS 4.0 на реальном железе
Не буду лукавить, сборка MS-DOS 4.0 оказалась не столь простой. Пришлось посмотреть некоторые видео, пошерстить различные репозитории. Но всё же это прекрасный опыт, который позволяет заглянуть внутрь исторических исходников и покопаться в них.
Давняя утечка MS-DOS 6.0 была неполной, и собрать его не представлялось возможным. А теперь у исследователей есть готовый инструментарий, для того чтобы попрактиковаться в разработки каких-то своих модулей старой операционной системы.
Конечно же, я по-настоящему жду, когда же обнародуют исходники MS-DOS 6.22, так как ещё надеюсь увидеть их на своём веку.
Хорошо, что ребята с данного сайта перенсли с немецкого сервера на наш русский родной сервер.
Старые программы и системы от DOS до чистых сборок Windows XP для ретро-компьютеров от i286 до Pentium D (самый первый двухядерный процессор в мире) окончательно спасены. Ура!
Цель : захват видео для видеообзора старого железа. Приблизился вплотную к созданию видеообзоров на старое железо.
К примеру имеется старый компьютер с которого необходимо произвести захват видео с экрана.
Пусть то окно виндовс или скорее ДОС. Если с более менее свежими компьютерами типа пентиум 3 примерно понятно, то что делать скажем на 286 или даже PC XT? Снимать видео с экрана камерой?
Железа с функцией захвата видео у меня нет, да и монитор скажем EGA весьма специфичен в плане интерфейса.
Как выходят из положения другие ? Используют софт или аппаратный приспособы ?
Для затравки можно взять данный образец середины 80х годов со встроенной CGA картой. Внешние карты он не стартует. Придется колхозить телевизор для элементарного вывода изображения.
Можно конечно читерить используя DosBox но тогда смысл весь теряется. Эмуляция железа на мощном ПК не равно работе натурального старого компьютера в данном случае.
Потому как, даже на полуживом, и совершенно не тематическом форуме, тема пользуется некой популярностью (исключительно за счет поисковиков), продублирую и здесь.
Еще раз обращаю внимание, если кто не понял: c PCAD 2002/2004/2006 (for WINDOWS) данный пакет НИЧЕГО ОБЩЕГО (кроме названия) не имеет.
Это - сборка двух рабочих версий PCAD for DOS, пригодная для установки на современные машины (WINDOWS), вместе с самодельной оболочкой (в виде макросов DOS-Navigaor-а), кучей дополнительных программ (драйверы, русификаиторы, "печаталка", PLTPRINT ), и инструкцией по установке.
Также включен драйвер высоких разрешений экрана (VESA) , от OWA, пропатченный одним моим знакомым, на предмет быстрого рисования кружочков (кто знает - тот поймет), в таком виде этот драйвер в Сети не выкладывался.
Не на что не претендует, просто для тех кому надо (а как не странно, надо еще довольно многим).
Все действия типа "запаковать плату", "запаковать компонент", проверить DRC, у меня забиты в меню DOS Navigator-а. Всячески рекомендую пользоваться, ибо экономит массу времени. Вызывается по Alt-Enter, и Shift-Enter, в зависимости от расширения подкурсорного файла, что делается - можно посмотреть в DN.EXT, там все просто, это по сути bat-файлы, с той лишь разницей, что используются макроопределения !:\!\!.! и $:\$\$.$ обозначающие соответственно диск, путь, имя и расширение подкурсорного файла активной панели (!) и диск, путь, имя и расширение подкурсорного файла пассивной панели ($).
Кто еще помнит DOS - без труда разберется. Если чего - спрашивайте, а то я написать подробное описание всего этого счастья, наверное никогда не соберусь :)
Собственно сцылко. (ветку того форума - тоже советую прочитать, там есть полезности, весь остальной форум к PCAD и электронике отношения не имеет. Совсем.)
Сборка и все макросы - мои, некоторые патчи (PC-DRC) - тоже мои, (сам PCAD - естественно не мой). Если тег "мое", сочтут неуместным - ну пускай уберут.
Весь софт, кроме PCAD-а - free, сам PCAD - сейчас не продается уже лет 20 как :)
И да, я до сих пор работаю в этом пакете (я пригнулся, и все брошенные в меня яйца и помидоры пролетели мимо). Все "агитаторы" переходить на Альтиум и иже с ним - просьба не отнимать время, и не захламлять тему :).