Русская версия Might and Magic V: Darkside of Xeen от наших коллег из Бюро Переводов Old-Games добавлена на Dos.Zone. Работа над переводом культовой РПГ началась еще в 2016 году, но была заморожена из-за смерти ведущего программиста. И вот спустя 10 лет локализация наконец то вышла!
У нас было 640Кб памяти, CGA-экран, 20-мегабайтовый диск и целых четыре мегагерца тактовой частоты. А еще старые пятидюймовые дискеты на 360кб. Не то чтобы это был необходимый набор для современного разработчика C++, но если уж начали коллекционировать дичь, то сложно остановиться..
Весь сетап целиком.
Проклятая выдача
Наверное все уже в курсе, что социальные сети и поисковые системы постоянно подкручивают ленту выдачи под каждого пользователя на основе его предыдущих запросов и проявленных интересов?
На меня эти алгоритмы тоже начали влиять, но.. особенным образом:
формируя персональную ленту из самой отмороженной компьютерной дичи, которая только есть на свете.
Когда я уже не мог выдерживать накал выдаваемого проклятыми алгоритмами — начал про всю эту дичь писать. На свет стали появляться статьи, испортившие безвозвратно психику, взгляды на жизнь и карьеру многим несчастным.
Если серьезно, то конечно же этот материал появился не на пустом месте и не за один день, это результат довольно долгого изучения матчасти, ковыряния исходников и темных ритуалов из Некрономикона.
Все ради того чтобы в очередной раз показать читателям невозможное, по мнению ИИ и обитателей StackOverflow.
Технический ультрахардкор
Коль уж читаете эту статью — скорее всего и так знаете через какое место как именно программы появляются на свет и какова роль компилятора в этом сложном процессе.
Для простых обывателей поясняю:
чтобы получить тот самый steam.exe, которым вы жадными ручками запускаете любимые игры, его необходимо собрать из исходников.
Сотрудник компании Valve вместо работы над Half-Life 3 запускает компилятор, который собирает из набора файлов с исходниками «финальный билд», который затем упаковывается в инсталлятор и выкладывается на официальный сайт Steam.
Откуда его потом скачивают ушастые простые пользователи.
Теперь представьте:
внезапно настал зомби-апокалипсис и всех программистов, которые занимались разработкой игр в Valve сожрали зомби, после чего процесс сборки, вся документация и тулчейны были утрачены.
C концами.
Все что осталось — несколько старых бекапов на забытых носителях, с трудом извлеченные из.. ээ останков голодного зомби. Из задней части.
Спустя пару сотен лет, вы — представитель жалких остатков человечества, выживших на небольшой колонии с обратной стороны Луны, вновь ступаете на опустевшую Землю в поисках артефактов погибшей цивилизации.
И находите на развалинах бывшего офиса Valve ту самую флешку с исходниками альфа-версии Half-Life 3.
Конечно прогресс в разработке программ к тому времени успел уйти далеко вперед, у вас в ходу на лунной базе теперь какие-нибудь C++-157 и clang-777, с встроенным Rust, тремя слоями виртуализации и сборщиком мусора, работающим через промпты LLM. А про язык C вы узнали лишь из лекции по истории, про исторический период между египетскими пирамидами и вторжением инопланетян.
Встает очевидный вопрос:
как же все-таки насладиться шедевром далеких предков, так и не увидевшим свет в свое время?
Многое можно отдать за запуск этой красоты, даже спустя пару сотен лет после зомби-апокалипсиса:
Нет, это не релизная версия.
Несмотря на весь этот «апокалиптический треш», ситуация сама по себе — более чем реальная:
прямо сейчас эксплуатируются полностью виртуальные системы, собственных средств разработки для которых либо уже нет совсем, либо такая разработка чрезвычайно затруднена.
В первую очередь это мейнфреймы, которые до сих пор живее всех живых, вроде такого красавца от Unisys:
Далеко не только IBM занимается мейнфреймами до сих пор.
Если немного снизить накал технического фетишизма экстрима и обратить взор к современной коммерческой разработке — можно внезапно обнаружить, что фактически вся ее продуктовая часть (там где создается приложение, устанавливаемое у конечного пользователя) работает с обязательной поддержкой устаревшего окружения:
поддержка Windows 7/10, поддержка старых версий Android и iOS, обязательная работа на JRE 1.8+ и так далее и тому подобное.
Разумеется на машинах разработчиков используется современный софт, но собирает он так чтобы конечное приложение без проблем запускалось и работало в устаревшем окружении.
Обратное портирование
Процесс, с помощью которого в окружении 21го века создается нечто работающее на оборудовании из века 20го называется обратным портированием (backporting). И мы уже неоднократно о нем рассказывали, например тут или тут.
Обычно бекпорт создается для окружения с не очень большим устареванием — лет на 5-10 с момента релиза, поскольку на таком промежутке и проходят все основные обновления пользовательского окружения.
В редких случаях (и за отдельную плату) разработчик ПО может согласиться покопаться в чем-то еще более древнем, но уже без гарантий.
Однако то что покажу в этой статье — однозначно выходит за любую границу разумности, проходя даже среди коллег по категории отбитой дичи научной фантастики:
приложение на современном C++, с современными фичами, созданное в современной ОС, которое работает в окружении из 1986 года!
Операционной системой, которую выпустили 40 лет назад выступит известная MS-DOS 3.20. Именно эта версия была выбрана ввиду одной интересной исторической особенности:
Version 3.20 – First retail release (non-OEM); Release date: July 1986
Это первая версия MS-DOS, продаваемая конечным пользователям напрямую от самой Microsoft, с полок магазинов.
До нее Microsoft продавала свою операционную систему только производителям компьютеров, которые включали ее в поставку своих продуктов и под своим собственным брендом:
Наконец показываю, как выглядит компьютер тех лет, для которого мы будем сейчас писать код на современном C++:
Фото современное, таких машин в живом состоянии сохранилось довольно много.
Комната жениха
Для начала, опишу тестовое окружение, которое будет использовано для столь задорной задачи. Три ключевых компонента, необходимых для осуществления задуманного злодейства:
Компилятор C++ DigitalMars, который до сих пор официально поддерживает сборку под DOS;
Думаю уже по одному этому абзацу можно догадаться о накале предстоящей дичи, хотя ряд нюансов все же стоит пояснить.
Во-первых Вена это не только столица Австрии, но еще и небольшой городок на севере США, на 15к жителей, где (внезапно) находится штаб-квартира серьезной софтверной компании, выпускающей эпические компиляторы аж с 1988 года:
In 1988, Zortech was the first C++ compiler to ship for Windows. PC Magazine ran a graphics benchmark and reported that most executables produced by Zortech ran faster than executables produced by Microsoft C 5.1 and by Watcom C 6.5.[3]
Вот так, парни переплюнули официальный компилятор от самого Microsoft, несмотря на весь инсайд и поддержку. Кстати «Zortech» — старое название компилятора (если вдруг будете искать в архивах), продукт по какой-то причине несколько раз переименовывался.
Есть еще один удивительный факт, связанный с этой компанией:
The company gained notice in the software development community for creating the D programming language. D resulted from Bright's frustration with the direction of the C++ language and from his experience implementing it.
Ребята до такой степени угорели по С++, что создали свой собственный язык, «по мотивам»:
resulted from Bright's frustration with the direction of the C++ language
Но вернемся к другим талантам этой замечательной компании — к разработкам для совсем старой школы:
Includes C++ templates, exception handling and rtti.
Most other compilers for 16 bit code were abandoned nearly a decade ago. Digital Mars has a modern compiler for 16 bits.
Все перечисленные выше радости — для официально поддерживаемой сборки под DOS и 16-битных приложений.
Догадываюсь, что современным программистам тяжело воспринимать реалии разработки тех лет и технические ограничения софта из далекого прошлого, поэтому в качестве иллюстрации, покажу таблицу моделей памяти создаваемых приложений:
Сравните это с современными "запускаемыми архивами" с играми, по 100Гб в одном .EXE
Это предельные размеры создаваемого приложения, в случае MS-DOS 3.20 мы будем использовать «s» модель памяти, поэтому размер финальной сборки не должен превышать 64Кб.
Сборка и запуск
Компиляторы C и C++ от DigitalMars изначально были коммерческим продуктом и до сих пор существует коммерческая версия, включающая помимо компиляторов еще и собственную среду разработки (IDDE). Однако не так давно компиляторы стали бесплатным и открытым проектом, с исходниками на Github.
К сожалению проект пока не портируемый — собирается и работает исключительно под Windows.
Тем не менее, поскольку создавали его очень опытные люди — все отлично работает в Wine, что мы и будем использовать для его запуска на FreeBSD. Чтобы снова не раздувать статью — не стал заморачиваться сборкой компилятора из исходников (хотя это не очень сложный процесс), использовав готовую сборку версии 8.5.7.
Инсталлятора тут нет, в архиве сразу готовые бинарники, поэтому распаковываем и запускаем:
Внутри будут дополнительные бинарники, главный из которых это довольно известный EXE2BIN.COM, используемый для генерации COM-файлов из EXE.
С EXE2BIN есть один важный нюанс — он не запустится с помощью Wine, поскольку является DOS-приложением.
Чтобы использовать эту утилиту для создания COM-файлов — необходимо запускать ее с помощью DOSbox:
Теперь переходим к основному эмулятору.
Официальный логотип 86Box
86Box
Достаточно новый проект (разрабатывается с 2016 года), который сейчас активно развивается и позволяет эмулировать огромное множество x86-совместимых систем:
86Box is an IBM PC system emulator that specializes in running old operating systems and software designed for IBM PC systems and compatibles from 1981 through fairly recent system designs based on the PCI bus.
Готовой сборки для FreeBSD пока нет (как и присутствия в портах) и еще год назад были проблемы, требующие ручных правок исходников:
Initially exclusive to Windows, it was ported to Linux in version 3.2 and macOS in version 3.4.
Но на момент написания статьи все поправлено и эмулятор отлично собирается из исходников без каких-либо проблем, а в инструкции по сборке появился раздел про FreeBSD.
Для релизных версий эмулятора — ROM-файлы надо брать в другом месте, со страницы releases. Запускается эмулятор с указанием путей к каталогу с ROM-файлами следующим образом:
./src/86Box --rompath /opt/src/roms
После запуска эмулятора (по прямой аналогии с каким-нибудь VirtualBox) необходимо создать новую виртуальную машину, задав ей вот такие настройки:
Это не единственный возможный сетап эмулируемого оборудования, но максимально приближенный к реалиям 1986 года.
Так выглядела обложка коробочной версии с MS-DOS. Помимо префикса, слово "Microsoft" встречается трижды ;)
MS-DOS
Образы самого MS-DOS достать в сети очень легко, например отсюда. Все они уже давно находятся в публичном пользовании (public domain), поэтому за их использование Microsoft вас не съест засудит.
Более того, даже исходный код некоторых версий MS-DOS был выложен в публичный доступ:
The original sources of MS-DOS 1.25, 2.0, and 4.0 for reference purposes
Коробочная версия поставлялась на 5-дюймовых дискетах, размером в 360Кб, собственно их образы и выложены в сети.
Нам нужен лишь первый:
Этот файл нужно выбрать в меню после запуска эмулятора:
После чего перезагрузить эмулируемую систему.
При запуске пойдет проверка памяти, затем MS-DOS будет просить ввести ей дату и время, достаточно нажать пару раз <Enter> для пропуска:
MS-DOS из 1986 года готов к работе.
Mtools
Разумеется есть проблемы с пробросом данных с хоста в столь старую эмулируемую систему. Существуют несколько возможных решений, но самое простое и очевидное:
с помощью генерации образа floppy-диска на хосте и подключения его на эмулируемой системе, в виртуальный floppy-привод.
Тот самый, с которого мы выше загружали образ MS-DOS.
Для генерации образов флоппи я использовал известный пакет GNU Mtools,
In addition to file access, it supports many FAT-specific features: volume labels, FAT-specific file attributes (hidden, system, ...), "bad block" map maintenance, access to remote floppy drives, Iomega ZIP disk protection, "secure" erase, display of file's on-disk layout, etc.
Пакет довольно известный, поэтому присутствует практически везде, для FreeBSD установить его можно так:
pkg install mtools
Так выглядят те самые пятидюймовые дискеты (5.25").
Как видите все отлично работает в операционной системе 40-летней давности:
Покажите вашему преподу по C++.
Следующим шагом проверил обработку ошибок:
#include <iostream.h> #include <exception>
int main() { try { int age = 15; if (age >= 18) { cout << "Access granted - you are old enough."; } else { throw 505; } } catch (int myNum) { cout << "Access denied - You must be at least 18 years old.\n"; cout << "Error number: " << myNum; } return 0; }
Тут стоит уточнить, что поддержку обработки ошибок надо включать отдельно, ключом -Ae:
dmc -0 -ms -Ae -NV -o+space ex.cpp
Не поверите, но оно тоже работает:
Вот такие дела, конструкция try-catch на языке высокого уровня спокойно работает в MS-DOS образца 1986 года.
Еще больше балета
Разумеется я показал лишь малую часть возможностей компилятора, в первую очередь потому что уже декабрь а статья опять превратилась в простыню не успел закончить историю с STL:
STLport 4.5.3 ported to Digital Mars C++ (requires Digital Mars C++ 8.32 or later)
Это отдельная, весьма своеобразная версия STL, совместимая с DigitalMars, доступная для скачивания в собранном виде (плюс исходники). Но собрана она для целевой платформы Win32, поэтому для сборки под DOS ее готовую версию использовать не получится, надо пересобирать самостоятельно.
Сама возможность такой пересборки под DOS существует, но необходима либо платная версия DigitalMars, которая содержит собственную систему сборки (smake), либо очередной «кровавый патчинг», чтобы собрать STLport вручную.
Не поверите, но еще существует Boost (хоть и очень старый) с поддержкой компилятора DigitalMars:
Boost 1.30.0 for Digital Mars C++
Вот уж где раздолье и настоящий угар: писать под DOS c помощью самой жирной библиотеки для C++ на свете!
Чтобы окончательно добить вашу психику и чувство прекрасного, показываю несколько проектов «обратного портирования» STL — как раз для особых случаев, вроде истории с DigitalMars.
Первый проект:
A recreation of much of the modern C++ standard library in ISO C++98
Тут основная цель это C++11, который DigitalMars поддерживает очень слабо, плюс будут проблемы с Windows-платформой:
Does it work on Windows? Sorry, POSIX mostly. Would love for some Windows devs to help.
Но проект сам по себе весьма интересный и ничего не мешает надергать отсюда необходимых кусков в свою реализацию.
Возвращение на Землю
Несмотря на описанное в статье, дела с компиляторами C/C++ от DigitalMars обстоят несколько печальней чем кажется. Во-первых этот компилятор очень сильно устарел и совместимость со стандартом языка осталась на уровне C++98.
Для более новых версий стандарта есть поддержка лишь отдельных фич и планов по улучшению ситуации я не видел.
Фактически активная разработка остановилась в 2004м году, с тех пор выпускаются лишь мелкие патчи и обновления, поскольку фокус авторов сместился на поддержку языка D.
Во-вторых этот компилятор по прежнему имеет серьезные проблемы с лицензированием:
несмотря на открытие исходного кода, для полноценной сборки требуется закрытый инструментарий.
Так что использовать DigitalMars без цели угара для обычных проектов наверное мало осмысленно, хотя и привнесет определенную толику веселья в тяжелые будни C++ разработки.
Добавлю, что компилятор для наших краев довольно редкий, по крайней мере лично я не встречал проектов, где бы он использовался.
Но для целей кросс‑компиляции под DOS (если вас жизнь заставит) — инструмент более чем интересный.
P.S.
Статья была опубликована на Хабре, оригинал как обычно в нашем блоге, процесс всех этих изысканий и отбитых экспериментов выкладываем в нашем Телеграм канале.
Древний дисковод ожил и издавая чудовищный скрежет стал медленно загружать мое послание. Через какое-то время на экране появились строки:
NE PUERO GLADIUM, DR. KRIGER. 04.03.2026
Три пары глаз повернулись ко мне в немом изумлении.
— Это длинная история, нам лучше присесть.
Все герои в сборе.
Человек, перешагнувший порог моего маленького офиса в тот летний вечер явно имел отношение к спецслужбам — армейскую выправку и годы тренировок не спрячешь так просто.
Рослый и поднятутый, в безупречном костюме и с острым, пронзительным взглядом — он производил серьезное впечатление.
И тем странее выглядел этот заказ.
— Алекс, полагаю?
— Он самый, рад наконец познакомиться лично. Вы написали, что для нас есть работа. Хотя исходя из содержания письма, задача выглядит довольно.. необычной.
— Это проблема? Мне рекомендовали вас как опытных профессионалов..
— Нет, не проблема. Просто уточняю детали, дабы убедиться, что мы понимаем друг друга. Итак, вы действительно используете компьютеры.. из 1987 года?
АРХЕОТЕХ
Копаясь в сети в поисках очередного археотеха, был обнаружен удивительный репозиторий, в котором один почтенный джентельмен, недавно отошедший от дел, собрал невероятную подборку дичи инструментов разработки для компьютеров конца 70х — начала 80х:
CP/M 2.2 compilers, assemblers, and interpreters
CP/M, если кто вдруг не знает (коих среди читателей точно будет большинство), это такая операционная система из далекого-далекого прошлого, созданная аж в 1974 году. Разумеется давно и крепко забытая обывателями.
Практически любые компьютерные материалы тех лет представляют историческую ценность, а тут аж целый репозиторий, забитый под завязку редчайшим археотехом.
Чтобы вы смогли оценить объем и сложность проделанной работы:
каждый компилятор или средство разработки из этой коллекции пришлось специально оцифровывать, считывая данные с невероятно старых носителей информации — дискет или магнитной ленты.
C помощью дисководов, возрастом слегка за пятьдесят, типа такого:
8-дюймовый (!) диск с дисководом начала 70х. Слева для сравнения "современная" 1'44 дискета.
Представляете, чего стоило все это оживить, запустить и заставить работать?
Физические процессы, механические повреждения и влияние среды при этом никто не отменял.
Если быть совсем точным, то сначала был обнаружен немного другой репозиторий от этого же почтенного автора, где была собрана похожая коллекция, но для более обыденного DOS. Лишь несколько недель спустя обнаружилось, что совсем рядом находится настоящее сокровище утраченной цивилизации — чистый археотех. И понеслась.
От такого изобилия начала капать слюна и дергаться глаз:
Сообщения коммитов вроде "macos build" и "linux build" в одной строке с компиляторами из 70х невероятно доставляют.
Скорее всего ничего из длинного списка выше вам знакомо не будет, поскольку все эти древности на десяток-другой лет старше даже автора этих строк.
Отдельный восторг у искушенной публики вызовет наличие скриптов сборки под Unix (Linux/Mac/BSD).
Примерно из-за таких изумительных проектов хорошие инженеры навсегда бросают пить. Но вернемся в мой кабинет — к гостю с армейской выправкой и странными, хотя и законными запросами.
— Этот разговор будет долгим. Не найдется ли у вас чем освежиться?
..
Искусство искусством, но прежде чем погружаться по локоть в «кровавый ад разработки» 80х c линковщиками и компиляторами, стоит рассказать о технических реалиях тех лет — оборудовании и самой операционной системе CP/M. Будет интересно, даже если вы, дорогой читатель, сами не старше третьего GTA.
Между огромными мейнфреймами, занимающими машинные залы и первым домашним PC с DOS а затем и Windows, был относительно краткий период рассвета (1970-1980) микрокомпьютеров:
Да, это официальное название, «микрокомпьютерами» назывались множество разных девайсов от разных производителей, предназначенных для игор домашнего использования.
Это был настоящий бум домашней электроники и сотни разных компаний по всему миру начали создавать свои линейки для новой отрасли — домашних компьютеров.
— Интересная история, крайне.. необычная.
Рассказ гостя определенно интриговал.
За долгую жизнь со мной случилось столько разнообразной херни, что заказ на разработку для компьютера из 80х от мультяшного персонажа из сериала про супершпионов уже не казался чем-то невероятным. Куда больше вопросов вызывал сам процесс.
— Но все же, что конкретно мы должны реализовать? И под какую машину?
KAYPRO II
Одной из компаний, решивших поучаствовать в гонке первых домашних компьютеров была Kaypro Corporation:
Kaypro Corporation was an American home and personal computer manufacturer based in Solana Beach, California, in the 1980s
Хотя сама компания давно не существует, она успела наследить оставить след в истории компьютеров и сердцах благодарных потомков. Первый же ее продукт имел оглушительный успех:
by mid-1983 the company was selling more than 10,000 units a month, briefly making it the fifth-largest computer maker in the world
Пятая в мире по продажам, рядом с Apple и IBM — в первом ряду, не где-то сбоку, причем с первого продукта.
Именно этот продукт — домашний компьютер Kaypro II был выбран в качестве полигона для восстановления процесса разработки под CP/M. И последующей сдачи этого фантастического проекта для столь особенного заказчика.
Только посмотрите на эту брутальную «няшу» в стильном металлическом корпусе:
Ну как можно было пройти мимо такого сказочного девайса?
— Видите ли, Алекс. У нас в.. организации есть один сотрудник. С наци.. ээ немецкими корнями и такой же педантичностью.
Мой гость сделал еще один глоток виски, явно наслаждаясь процессом.
— Отвечает за техническое сопровождение и разные.. эксперименты. В некотором смысле — ваш коллега. К великому сожалению, последнее время он начал.. скажем так, проявлять неустойчивость. Рассказывал коллегам о своей избранности и незаменимости. Стал требовать сдавать ему кровь. Даже представлять не хочу, для чего ему могло понадобиться столько крови, но нам срочно необходимо это прекратить.
— С нашей помощью, полагаю?
Создатель операционной системы CP/M Gary Kildall за работой, 1978 год. Огромный ящик слева это.. дисковод.
CP/M
Стоит рассказать и про операционную систему тех лет, благо очень немногие из читателей дожили имели шанс с ней поработать:
Внешне это сильно похоже на более привычный отечественному пользователю DOS, хотя конечно же CP/M появилась гораздо раньше.
Зеленые буквы на черном фоне, за тридцать лет до выхода "Матрицы".
Кстати скриншот выше это тоже настоящий артефакт, который был сделан после случайной археологической находки — были обнаружены исходники четырех первых версий CP/M, примерно 1975-79 годов. Так вот на этом скриншоте — работающая CP/M версии 1.3.. собранная из найденных исходников!
..
— Несмотря на все наши таланты и умения, думаю не сможем помочь.
Окинув гостя взглядом и оценив его серьезную физическую подготовку, я добавил:
— Полагаю в вопросах наказания, проучения и приручения вы дадите сто очков форы кому угодно..
— Ну что вы, Алекс. Конечно же речи не идет о применении насилия, мы мирные землепашцы люди. К тому же для такого существуют.. профильные специалисты. Нет, боюсь все несколько сложнее. Я хочу чтобы вы проучили коллегу морально — с помощью вашего ума и инженерных талантов. Мы договорились?
ЭМУЛЯЦИЯ
Нетрудно догадаться, что настоящего микрокомпьютера из 1987 года у меня никогда не было, поскольку в те годы я успел только появиться на свет. Поэтому большая часть описываемых ниже приключений снова будут происходить в эмуляции.
«Большая часть» — потому что действующий компьютер 80х я все же нашел и даже смог запустить на нем собранное приложение.
Вообще 8-битные микрокомпьютеры быстро завоевали популярность, фактически создав новый рынок домашней электроники и оставив заметный след рваную рану в юных сердцах. Благодарные пользователи, убившие детство на первые компьютерные игры и выросшие затем в бородатых программистов, наклепали горы самых разных эмуляторов этих машин.
Я отобрал три абсолютно разных эмулятора, для максимального погружения в тему микрокомпьютеров и эстетику 80х.
В качестве тестовой среды на этот раз использовался обычный Mageia Linux, чтобы не отвлекать внимание читателей на любимую FreeBSD. Кстати вот тут находится очень интересная подборка образов дискет для компьютеров Kaypro, включая исходники — на случай, если статьи покажется мало и захотите продолжить банкет.
MYZ80
Начнем с самого отбитогохардкорного. Перед вами настоящий дедушка эмуляции — действующий эмулятор CP/M, написанный в 1991м году под MS-DOS:
MyZ80 does more than just emulate the CPU though, it's a complete Z80 computer emulation
Этот эмулятор когда-то был коммерческим продуктом — «shareware», хотя и без каких-либо технических ограничений. Исходного кода найти не удалось, так что использовать будем его готовую сборку.
Ссылка указанная выше, на самом деле лишь сохраненная копия сайта автора, поскольку и сайт и сам проект были давным давно заброшены. Тем не менее нужный файлик myz80124.zip со сборкой эмулятора легко находится в сети, можно скачать например тут.
Внутри будет весьма необычный для современности набор файлов:
MYZ80.EXE — очевидный бинарник эмулятора, но проблема в том что это 16-битное приложение для DOS, запустить которое в современном окружении представляет проблему. Так что придется использовать еще один известный эмулятор — Dosbox, чтобы запустить внутри винтажный MYZ80. А так эта «матрешка» выглядит в работе:
Самое важное, ради чего были нужны заморочки аж с двумя эмуляторами — виртуальные диски, связанные с файловой системой DOS:
Поскольку Dosbox в свою очередь дает виртуализацию дисков непосредственно из хоста — получаем отличный способ быстро перебрасывать файлы в виртуальную CP/M.
Что важно при любой разработке с использованием эмулятора.
Собственно, то самое тестовое приложение EXMPL.COM на заглавной картинке было сначала скопировано в каталог с эмулятором:
Все это проще и быстрее, нежели описываемый ниже вариант с Mame и полной эмуляцией Kaypro II, но к сожалению не дает того самого «ощущения от использования», что это реальная машина тех лет. Так что я пошел дальше в своих изысканиях.
..
— Интересное предложение. Проучить коллегу по опасному инженерному делу, еще и за приличные деньги..
Моему гостю этого знать не следовало, но я готов был таким заниматься совершенно бесплатно и на регулярной основе.
— ..путем разработки под столь винтажный компьютер. Практически совершить уринотерапию..
— Боюсь, уринотерапия тут не поможет — коллега все же имеет немецкие корни. У каждой нации свои.. культурные особенности.
— Ну да ладно. Обсудим конкретику?
MAME
Mame это очень известный эмулятор самых разных машин и архитектур, как устаревших так и современных, когда-то созданный ради запуска игор, выгруженных из старых игровых автоматов.
С помощью Mame, мы получим почти настоящий Kaypro II, с оригинальным ROM и оригинальным образом загрузочной дискеты с CP/M — прямо из 80х.
Дальше нужно будет скачать загрузочный образ 5.25-дискеты с CP/M 2.2, например отсюда, затем специальные ROM-файлы для самого Kaypro II и его весьма специфической клавиатуры, отсюда.
Архивы называются kayproii.zip и kaypro10kbd.zip, их необходимо копировать как есть, не распаковывая. Создаем структуру каталогов:
mkdir kayproii-machine && cd kayrpoii-machine mkdir roms disks
Копируем ROM-файлы:
cp ~/Downloads/kaypro*.zip ./roms/
Распаковываем образ дискеты:
7z e ~/Downloads/KAYPRO\ II\ 64k\ CPM\ vers\ 2.2.7z -o./disks/
Если все шаги выполнены правильно, появится заставка Mame с описанием эмулируемой машины:
После нажатия любой клавиши, загрузится сама CP/M и вы увидите такое приглашение:
..
— Да все просто.
Если бы мне давали доллар каждый раз, когда я слышу эту фразу — давно бы стал миллионером..
— Наш коллега из организации, назовем его для простоты доктор Кригер, свято уверен, что только он один может.. как это он выразился?
Создать новую электронную жизнь в древнем компьютерном теле.
— Надеюсь, ваш коллега хотя-бы вводит код руками а не другим органом.
Гость посмотрев с удивлением, ненадолго задумался.
— Какая интересная мысль! Мне бы такое в голову не пришло. Я уже упоминал, что вы с ним похожи?
CPMTOOLS
Это весьма известный (среди некрофилов) набор инструментов для работы с файловыми системами CP/M, за авторством Michael Haardt. К сожалению работа над оригинальным проектом давно прекращена, так что мы будем использовать более современный форк:
В результате сборки появится несколько бинарников, готовых к запуску:
Думаю даже по названию нетрудно догадаться об их предназначении.
Для всех последующих увеселений будут использоваться в основном эти два: cpmls и cpmcp. Первый предназначен для просмотра содержимого образа диска, второй — для копирования внутрь файлов с хоста.
Копируем созданный образ диска в текущий каталог:
cp ../../work/kayproii-machine/test2.dsk .
Проверяем что диск читается:
./cpmls -f kpii test2.dsk
Копируем тестовый файл:
./cpmcp -f kpii test2.dsk README 0:README.TXT
Повторный запуск cpmpls должен показать содержимое диска с тестовым файлом:
Virtual CP/M Machine. Emulates CP/M and the 8080/Z80 on Linux, MacOS, Windows, and real-mode 8086 DOS to run CP/M .com files
Кстати последний он еще и в том смысле, что это новая разработка, созданная (судя по коммитам) буквально пару лет назад.
Этот самый ntvcm придется собрать и добавить в переменную PATH, поскольку эмулятор создан тем же автором, что собрал репозиторий с компиляторами под CP/M и используется из скриптов для тестов и.. кросс-компиляции. Под CP/M, ага.
Дальше просто добавляете этот каталог в переменную PATH:
export PATH=$PWD:$PATH
На этом подготовка к оргии празднику древней разработки наконец завершена и мы снова переносимся обратно в офис.
..
— Короче, коллега Кригер считает, что только он один в силах что-то написать для нашего Kaypro II. Что вообщем-то правда, поскольку остальные умеют все эти ваши компьютеры только включать и выключать. Обычно пинком.
Тут мой гость понял, что наверное не стоило показывать зависимость от будущего исполнителя.
— Но разумеется, у нашей организации есть и другие варианты. Пробовали привлекать «юные дарования», как самые перспективные. Закончилось.. не очень хорошо.
Достав из внутреннего кармана пиджака конверт, гость выложил на стол несколько фотографий.. полных неописуемого ужаса.
Увиденное на фото заставило шевелиться последние остатки волос.
— Когда его нашли, он был в бреду и ползал в ванной, обмазавшись собственными экскрементами. Весь пол, стены и даже потолок были изрисованы чем-то коричневым — символами, похожими на египетские иероглифы:
All 24 and 28 pins EPROM pinout 2708 - 27512. Отсюда.
— Это распиновка EPROM, для Z80.
— Хм, гляжу вы действительно разбираетесь.
Тут гость привлек мое внимание, указав на одну из фотографий.
— Вот здесь, на стене было загадочное послание, оставленное.. аналогичным способом. Но его смысл мы так и не смогли разгадать.
Я пригляделся к фотографии:
640КБ ХВАТИТ НА ВСЕХ
— Нет идей что бы это могло значить?
Пол Аллен и юный Гейтс за четыре года до основания Microsoft.
НЕПРЕРЫВНОЕ ВЕСЕЛЬЕ
Возвращаясь к тому адскому репозиторию с компиляторами, наконец рассказываю основное:
как современному ребенку программисту вести разработку для компьютера из 1987 года.
Цепочка необходимых действий выглядит следующим образом:
Сборка;
Тестовый запуск с помощью ntvcm;
Запуск с помощью myz80;
Запуск в Mame с образом настоящего Kaypro II;
Сеанс рукоблуд.. ээ переход к следующему примеру.
И начнем мы с того самого примера, показанного на заглавной картинке в фоне. Заранее предупреждаю:
собираем только самые простые варианты, так как каждый сложный имеет свою специфику, требующую отдельного описания.
Но даже в этом случае показать получится очень далеко не все — интересных компиляторов и тулчейнов в репозитории просто чудовищное количество. Начнем разумеется с компилятора языка С, но.. особенного.
Судя по обнаруженным материалам, это был весьма известный и популярный продукт для тех лет. А еще это вариация языка Сдо стандартизации, поэтому и называется не просто компилятором, а прям отдельным языком:
Aztec C — a programming language for a variety of platforms
Редкое для современных бюрократических реалий зрелище: компилятор, забивающий на стандарты и правила. Так что это был популярный и известный инструмент, с весьма скромными прайсами:
Сложно из 2026 года оценивать цены 1980х, но судя по прайсу выше, Aztec C был явно не самым дорогим софтом, тем более для разработчиков. Но мы опять отвлеклись.
Переходим в каталог manx aztec c v106d и запускаем сборку примера:
Да, обязательно КАПСЛОКОМ и обязательно без указания расширения, поскольку в скрипте идет вызов как компилятора, так и линковщика. Будет собран COM-файл для CP/M, который проще всего запустить с помощью эмулятора от автора репозитория:
Теперь запустим на втором эмуляторе — MYZ80, чтобы убедиться в корректности только что собранного приложения. Копируем созданный EXMPL.COM в каталог с эмулятором и запускаем его через Dosbox:
Чтобы не раздувать статью до совсем уж скотских размеров, для всех остальных компиляторов покажу только финальный запуск в Mame. Пусть ваше больное воображение дорисует недостающее.
..
— Ладно, думаю мы договорились. Небольшое приложение для Kaypro II образца 1987 года, для причинения моральных страданий немецкому инженеру.
На этом мой гость задумался, как будто вспоминая важную деталь.
— Как же оно называется? Туда запихиваются такие плоские черные штуки? Д.. дди.. доо..
— Дисковод, для дискет. Работу необходимо сдать на 5.25 дискете, я уже понял.
Это был первый раз в моей жизни, когда надо было сдать работу на пятидюймовой дискете. Но с учетом роста цен на чипы памяти и SSD — думаю далеко не последний.
(гомерический хохот за кадром)
Так выглядела обложка от оригинальной упаковки с комплектом дискет.
Для запуска помимо SQUARO.COM надо перебросить в эмулятор еще и файл RUNCOB.COM, иначе не заработает. Так этот пример выглядит в работе, на фоне (в редакторе) можно заметить исходный код на COBOL:
Microsoft COBOL оказался хотя и интересным, но все же мало актуальным компилятором, так и не нашедшим широкого применения в свое время. Врядли приложение на COBOL было лучшим вариантом, чтобы утереть нос немецкому коллеге-инженеру.
Так что я стал искать дальше. Однако был еще один важный вопрос, который стоило закрыть прежде чем выбрать наконец язык реализации.
..
alex0x08: дарова!
alex0x08: нужны тайные знания ордена
alecv: излагай
alex0x08: надо программку одну запустить, на железе из 1987 года :)
..
Единственное фото дискеты с этим компилятором, которое удалось найти.
Prospero Pascal
Кто ищет — всегда находит, поэтому очень скоро обнаружилась еще одна невероятная дичь редкость:
Prospero Pascal is a full-featured Pascal that includes everything you need to begin writing stand-alone programs for your Atari ST.
Компилятор Паскаля для 8-битных компьютеров с блекджеком и блудницами с дополнениями и доработками:
Prospero Pascal is a superset of ISO Standard Pascal. In addition to the standard features, this package offers a number of extensions including dynamic strings, single- and double-precision floating-point arithmetic, an assembler-level interface, and separate compilation of program segments. Moreover, Prospero Pascal offers a high degree of portability.
Динамические строки, вычисления с плавающей точкой, поддержка ассемблерных вставок и все это в 1983м году! На Паскале и под Atari, если кто вдруг не понял.
Все выше конечно весьма занимательные (для археологов и некрофилов) штуки, но самое интересное я приберег напоследок.
Borland Pascal 1.0
Тот самый Паскаль, ставший для многих первой любовью первым языком программирования, поскольку именно на нем много лет обучали кодингу в школах и некоторых ВУЗах этой страны.
В результате чего появлялись на свет такие как автор, для которого Паскаль тоже когда-то был самым первым.
Но то что я сейчас покажу — не просто «какой-то там Паскаль» и даже не «какой-то там Паскаль» от фирмы Borland, ставшей законодательницей мод в паскалестроении.
Это его первая релизная версия, с которой все началось.
А еще с первой версии стартовала история и знаменитой среды разработки, с помощью которой осуществлялась сборка и отладка программ.
Вот он, тот самый TURBO.COM, который позже превратится в TURBO.EXE:
Кусочек руководства пользователя с адресом «небольшой компании-стартапа» на просторах Калифорнии:
А я почему-то всегда был уверен, что Borland начиналась как европейская компания — удивительные открытия порой приносит компьютерная археология.
Для тестов, были скопированы TURBO.COM и HELLO.PAS на образ дискеты, который затем подключили в эмулятор. Так все действо выглядит в эмуляторе Mame:
НЕЛЕГКИЙ ВЫБОР
Итак, у меня набралось четыре варианта на выбор:
Первая релизная версия Borland Pascal;
Редкая версия Pascal, с крутыми (для 1983 года) фичами;
Microsoft COBOL, без комментариев.
И конечно же Aztec C — реализация языка С до его стандартизации, настоящий артефакт. Что выбрала для меня судьба?
И.. да, это Aztec C.
(бурные аплодисменты)
Но не потому, что верю в судьбу или так подсказал какой-то кубик. Просто в любой непонятной ситуации я всегда выбираю С. И такой подход еще ни разу не подводил.
В такое безусловно сложно поверить далекому от Сант-Петербурга обывателю, но это настоящий барельеф с масонским гербом.
ПОСЛЕДНЯЯ ПРОВЕРКА
Старый, дореволюционной постройки дом в самом центре Питера, с гербом масонского ордена на барельефах разумеется привлекал внимание туристов, наделавших немалое количество селфи на его фоне. Но мало кто даже из коренных петербуржцев догадывался, что находится внутри.
Меня встретили у неприметной двери, в которую надо было постучать определенным образом и строго в нужной последовательности. Затем надев на голову черный мешок, непроницаемый для любого света, аккуратно сопроводили в тайное помещение ордена.
Ордена «Свидетелей Спектрума».
С незапамятных времен Советского Союза, этот тайный орден хранил уникальные знания и что самое важное — поддерживал в рабочем состоянии удивительные машины из далекого прошлого.
Тут было все:
Спектрумы, Амиги, старые рабочие станции Sun и HP, DEC и даже Alpha.
Денно и нощно (обычно по субботам) монахи ордена без устали смазывали, паяли и окуривали все это благовониями, дабы ублажить «дух машины» обитающий в старом железе. Орден ревностно хранил свои секреты и мне очень далеко не сразу было позволено хотя бы приблизиться к их древностям. Но все же мне необходима была их помощь для последней проверки перед сдачей этого фантастического проекта:
запуска собранного приложения для машины из 1987го на реальном компьютере 1987го.
Меня сопроводили в специальную, строго охраняемую комнату, где на постаменте, под защитным стеклом находился артефакт из далекого прошлого.
Версия 1715M, сохраненная в ордене это «экспортный» вариант, когда-то давно поставляемый в Советский Союз. С величайшим почтением нашептывая молитвы загрузки, послушник в черном балахоне приблизился к постаменту и приложил ладонь к считывателю отпечатков пальцев. Защитное стекло начало медленно опускаться.
Наконец запуск и загрузка операционной системы SCP ( аналога CP/M, но из ГДР) были завершены. Появилось приглашение ввода команд:
А>
Послушник взял мою пятидюймовую дискету с записанной сборкой и с благоговением вставил ее в древний дисковод, не забыв выставить специальную защелку в вертикальное положение.
Затем на не менее древней механической клавиатуре он ввел:
Дисковод ожил и издавая чудовищный скрежет начал загружать мое послание. Через какое-то время на экране появились строки:
NE PUERO GLADIUM, DR. KRIGER. 04.03.2026
Что в переводе с латыни означает:
НЕ СТОИТ ДАВАТЬ БОЕВОЙ МЕЧ МАЛЬЧИКУ, ДОКТОР КРИГЕР.
Проверка удалась и написанное мой приложение для компьютеров 80х под CP/M действительно успешно запустилось на настоящем компьютере из 1987 года. Так это выглядело в живую:
Залип на одной фишке - можно делать рекламу в стиле скриншотов point-and-click игр 90-х через GPT Image 2. Нашёл туториал на Reddit, попробовал 4 промпта на разные тематики - реклама электронной музыки, яблок с рынка, пиратских туров и съезда астрономов. Каждая картинка выглядит как реальный кадр из старой DOS-игры, надписи на русском читаются без косяков.
Всё генерится в одной модели - GPT Image 2 от OpenAI. Промпт - пара абзацев на русском. Время - 5-7 минут на картинку. Покажу все 4 промпта, чтобы вы могли повторить.
1. Реклама музыкального лейбла
Универсальный шаблон для рекламы любого музыкального/креативного бизнеса. Сцена - комната-студия с синтезатором, барабанной машиной, виниловыми пластинками. Внизу - классический point-and-click UI с глаголами.
Скриншот ретро пиксель-арт point-and-click adventure игры, стиль VGA 1993 года с крупными низкоразрешёнными пикселями.
Сцена - смесь домашней студии и рейв-окружения. Только один персонаж в кадре - молодой человек в чёрной футболке с явно видимым на груди логотипом "DIY Records". За спиной - винтажный синтезатор, барабанная машина TR-808, виниловые пластинки на полках, диско-шар свисает с потолка, неоновые блики.
Сцена должна явно выглядеть как скриншот старой DOS adventure игры - низкое разрешение, ограниченная палитра (8-16 цветов), без современного плавного шейдинга.
Внизу простой point-and-click UI с глаголами: "Посмотреть", "Взять", "Использовать", "Поговорить", "Открыть", "Закрыть", "Дать", "Толкать".
Сверху белая надпись на чёрной полосе: "ZX-Spectrum Records - DIY музыка для своих".
2. Реклама товара - яблоки с рынка
Для рекламы FMCG-продуктов. Сцена - старый европейский рынок, торговый прилавок, продавщица и покупатель. Подставляете любой товар - молочка, выпечка, мёд, что угодно.
Создай рекламу яблок (фрукт). Сделай так, чтобы кадр выглядел как сцена внутри point-and-click adventure игры 90-х годов. Персонаж в игре должен взаимодействовать с продуктом или рекламировать его каким-либо образом.
Стиль: пиксель-арт VGA 1993 года, крупные низкоразрешённые пиксели, ограниченная палитра, без современного шейдинга.
Сцена: уютный рыночный прилавок старого европейского города. Продавщица с косынкой улыбается и протягивает покупателю крупное красное яблоко. На прилавке корзины с яблоками разных сортов - красные, жёлтые, зелёные. Большая вывеска над прилавком на русском: "Свежие яблоки - прямо из сада".
Внизу классический point-and-click UI с глаголами: "Посмотреть", "Взять", "Купить", "Поговорить", "Использовать".
Снизу пиксельный слоган-баннер: "Природные витамины - яблоки от фермера".
3. Туристическое предложение - пиратские туры
Для туров, экскурсий, отелей. Закатный пляж, корабль у берега, капитан-пират с картой, группа туристов. Подойдёт для гастро-туров, хайков, ретритов, ивентов.
Создай рекламу туристических поездок по историческим пиратским локациям Карибского моря. Сделай так, чтобы кадр выглядел как сцена внутри point-and-click adventure игры 90-х годов. В сцене должны быть несколько персонажей, и логотип-эмблема "Пиратские туры" с черепом и скрещенными саблями должна быть интегрирована в кадр.
Стиль: пиксель-арт VGA 1993 года, крупные низкоразрешённые пиксели, ограниченная палитра, без современного шейдинга.
Сцена: песчаный карибский пляж с пальмами на закате. На переднем плане старый пиратский корабль у берега, на палубе - бородатый капитан-пират в треуголке держит карту сокровищ. Рядом туристическая группа из 3 человек с рюкзаками слушает его рассказ. Над сценой большой деревянный баннер с черепом и скрещенными саблями и надписью на русском: "Пиратские туры - в поисках сокровищ".
Внизу point-and-click UI: "Посмотреть", "Поговорить", "Купить тур", "Дать", "Использовать".
Снизу пиксельный слоган: "Карибы как 300 лет назад - погружение в эпоху пиратов".
4. Реклама мероприятия - съезд астрономов
Для конференций, фестивалей, любительских встреч. Горное плато ночью, звёздное небо, телескопы, палатка. Тёмно-синяя палитра с белыми точками звёзд.
Создай рекламу вымышленного раз-в-два-месяца съезда астрономов-любителей. Сделай так, чтобы кадр выглядел как сцена внутри point-and-click adventure игры 90-х годов. В сцене должны быть несколько персонажей, и логотип "Большая Медведица" из семи звёзд должен быть интегрирован в кадр.
Стиль: пиксель-арт VGA 1993 года, крупные низкоразрешённые пиксели, ограниченная палитра тёмно-синих и фиолетовых тонов с белыми точками звёзд, без современного шейдинга.
Сцена: ночное горное плато под звёздным небом. На переднем плане три астронома-любителя с большими телескопами на штативах, направленными в небо. Один пожилой бородатый учёный показывает молодой девушке-новичку что-то в окуляр телескопа, рядом мальчик с тетрадью записывает наблюдения. На фоне - яркая Большая Медведица из семи звёзд (логотип съезда), Млечный Путь, силуэты гор. Палатка для отдыха в углу кадра, термос с горячим чаем на складном столике.
Над сценой деревянная вывеска с надписью на русском: "Съезд астрономов-любителей".
Внизу point-and-click UI: "Посмотреть", "Взять телескоп", "Поговорить", "Записать", "Дать".
Снизу пиксельный слоган: "Каждые два месяца - встреча под звёздами".
Универсальная формула - вы перечисляете в промпте: (1) стиль "retro pixel art point-and-click adventure game screenshot VGA 1993", (2) описание сцены, (3) главный объект рекламы, (4) заголовок и слоган в кавычках, (5) глаголы нижней панели. Модель сама расставляет компоновку.
Где это сделать в боте: @gptcyber_bot → /start → 🖼 Создать изображение → 🎨 Images 2.0 (ChatGPT) → ⚙️ Задать параметры → Модель: GPT Image 2, Пропорция: 16:9, Качество: 2K → вставить промпт → 🎬 Сгенерировать. 10 ₽ за картинку. При первом переходе - пробный баланс.
Museum Madness — образовательная приключенческая игра, выпущенная в 1994 году для компьютеров MS-DOS. Разработана компанией Novotrade Software Kft. и опубликована MECC
обучающая игра
Сюжет
Игра начинается в спальне американского старшеклассника-подростка, который сидит за компьютером, пытаясь получить доступ к системе интерактивного обслуживания Национального музея, но видит, что она отключена для ремонта. Интерактивный робот из музея по имени МИК (Museum Information Computer Kiosk) появляется на экране и разговаривает с подростком, объясняя, что музею грозит вечная потеря секретов. МИК объясняет, что экспонаты ожили и ведут себя странно, и объявляет, что вирус заразил систему, когда музей перестраивался на полное автономное компьютерное управление.
Игрок берёт на себя роль подростка и входит в музей. В ходе игры он посещает каждый из экспонатов, разгадывая тайны и головоломки, разговаривая с историческими персонажами, переставляя предметы. По пути игроку помогает МИК, который следует за ним по экспонатам, инструктирует его и даёт дополнительную помощь и совет по запросу.
1/6
Как только 25 экспонатов будут восстановлены, сам вирус должен быть уничтожен — это последняя головоломка, которую предстоит решить.
Геймплей
Решение экологических головоломок — часто требуют сбора и использования предметов, найденных в сценах.
Взаимодействие с экспонатами — игрок общается с историческими личностями для сбора информации и продвижения истории.
Короткие мини-игры — привязаны к конкретным экспонатам. Например, игра на сопоставление, позволяющая реконструировать динозавров на палеонтологической выставке.
Возможность перезапускать головоломки или повторно посещать области в любое время.
Продолжаю свою маленькую ностальгическую серию по портированию старых головоломок эпохи MS-DOS на Android. Это уже второй мой хобби-проект, в котором я постарался максимально сохранить механику оригинальной игры и перенести её на мобильную платформу без упрощений.
На этот раз это игра Tesserae. Если кто-то не играл — это головоломка с плитками, но с довольно необычными правилами объединения и очистки поля. В отличие от современных казуальных игр, здесь никто не ведёт за руку и не прощает ошибки. Нужно думать, просчитывать ходы и иногда начинать сначала.
Старался перенести игру максимально близко к оригиналу, но при этом сделать удобное управление для телефона. Проект делал в качестве хобби, поэтому буду рад любому отзыву или замечанию.