Сообщество - IT минувших дней

IT минувших дней

1 259 постов 7 498 подписчиков

Популярные теги в сообществе:

26

OSF/1 в эмуляторе

Если вам успели надоесть и азиатки и знойные африканки и даже развратные животные, рассказываю про одну редкую UNIX-систему из далекого прошлого, которая был возвращена из небытия и выведена в интернет.

Так это выглядит в работе.

Так это выглядит в работе.

История

OSF/1 это еще одна редкая UNIX-система из далекого прошлого, которую вы врядли могли наблюдать в живую:

OSF/1 is a variant of the Unix operating system developed by the Open Software Foundation during the late 1980s and early 1990s. OSF/1 is one of the first operating systems to have used the Mach kernel developed at Carnegie Mellon University, and is probably best known as the native Unix operating system for DEC Alpha architecture systems.

Прямой участник корпоративных Unix‑разборок 90х известных как Unix Wars, но в отличие от A/UX (которую автор оживил и запустил в прошлом выпуске) OSF/1 не канула в лету в бурные 90е а будучи переименованной в TRUE64 UNIX поддерживалась аж до 2012го года.

Вот вам и «динозавр», внезапно отказавшийся умирать.

Еще из интересных фактов стоит упомянуть использование этой ОС для суперкомпьютеров:

IBM used OSF/1 as the basis of the AIX/ESA operating system for System/370 and System/390 mainframes.[12] Intel Paragon supercomputers used a version of OSF/1 featuring the Mach 3.0 kernel.[13] OSF/1 was also ported by Kendall Square Research to its proprietary microarchitecture used in the KSR1 supercomputer.

Суперкомпьютер KSR1 Единственное <a href="https://d.pikabu.ru/story/osf1_v_yemulyatore_14080919?u=https%3A%2F%2Fglobal.museum-digital.org%2Fsingleimage%3Fimagenr%3D2310146&t=%D1%84%D0%BE%D1%82%D0%BE&h=4b7b079fa2995c9379cb8f99799979f7e7eb5c34" title="https://global.museum-digital.org/singleimage?imagenr=2310146" target="_blank" rel="nofollow noopener">фото</a> в приличном разрешении этой редкой машины.

Суперкомпьютер KSR1 Единственное фото в приличном разрешении этой редкой машины.

А также попытку адаптации компанией Apple в качестве замены A/UX:

Apple Computer intended to base A/UX 4.0 for its PowerPC-based Macintoshes upon OSF/1,[11] but the project was cancelled and PowerOpen deprecated.

Которая была отменена вместе с самой A/UX.

OpenBSD/luna88k running inside GXemul, on an emulated SGI O2 running OpenBSD/sgi (on a FreeBSD/amd64 host). Теперь попробуйте осознать прочитанное.

OpenBSD/luna88k running inside GXemul, on an emulated SGI O2 running OpenBSD/sgi (on a FreeBSD/amd64 host). Теперь попробуйте осознать прочитанное.

Эмулятор

Полностью оно называется Gavare's eXperimental Emulator за авторством Anders Gavare и согласно официальному описанию с сайта проекта, считает себя фреймворком для виртуализации:

GXemul is a framework for full-system computer architecture emulation, mostly written in 2003-2005. Several real machines were implemented within the framework, consisting of processors (ARM, MIPS, Motorola 88K, PowerPC, and SuperH) and surrounding hardware components such as framebuffers, interrupt controllers, busses, disk controllers, and serial controllers. The emulation is working well enough to allow several unmodified "guest" operating systems to run.

По сути это такой сильно разросшийся «pet project», созданный одним энтузиастом ради эмуляции особо редких систем:

Простым обывателям из этого списка знакомы наверное только игровые платформы, в лучшем случае еще «малинка» (Rastberri Pi) а про некоторые особо редкие не знал даже автор, так что будут еще изыскания и эксперименты, посвященные этому удивительному проекту.

Сборка

К сожалению эмулятор достаточно давно не развивается, его последняя релизная версия 0.7.0 была выпущена в далеком уже 2021м году и содержала лишь мелкие исправления. Поэтому есть определенные проблемы со сборкой в современном окружении, которые опять придется исправлять вручную.

В этот раз все действия производились на обычном Mageia Linux, без BSD и прочих изысков, с использованием стандартного GCC:

Несмотря на строчку из документации по сборке:

This should work on most Unix-like systems, with few or no modifications to the source code. The basic requirement is a reasonably modern C compiler (C99).

Эмулятор написан все же на C++ а не на чистом С, поэтому для сборки требуется компилятор C++, который ныне устанавливается отдельным пакетом.

Но в остальном автор не врет:

GXemul does not require any additional third-party libraries to build.

И проект действительно не использует никаких внешних библиотек. Кроме X11, ради эмуляции графического экрана:

  • X11 headers and libraries: for graphical framebuffer emulation.

Так что ничего дополнительно устанавливать не придется.

С версии 0.6 разработка переехала на Github, откуда мы и заберем последние правки исходников (ветка master):

git clone https://github.com/BitEdits/gxe.git

Главная проблема с этим эмулятором — неправильная работа с некоторыми эмулируемыми ОС без специального ключа сборки --debug:

When compiling on Linux via a modern GCC please bear in mind that the emulator wont work correctly if compiled with -O optimization flags. Please use -debug configure option to disable such optimization

Что выяснилось далеко не с первой попытки.

Изучаемая OSF/1 как раз из числа проблемных, поэтому попытка запуска в версии эмулятора, собранного без этого волшебного ключа выдает kernel panic:

Теперь вы тоже видели как выглядел kernel panic в 1992м, поздравляю.

Теперь вы тоже видели как выглядел kernel panic в 1992м, поздравляю.

Согласно официальному описанию, ключ --debug всего лишь отвечает за отладочную сборку:

configure for a debug build (turn off optimizations)

На практике все несколько сложнее и этим ключом помимо отключения оптимизаций, еще собирается отдельный оконный отладчик. Чтобы не вводить параметр каждый раз, я прописал в начале скрипта configure вот такой параметр:

DEBUG=YES

Скрипт кстати не из известного пакета autotools а полностью собственной разработки. После каждой правки configure скрипта или шаблонов Makefile.skel (см. ниже) необходимо перезапускать настройку вызовом:

./configure

Теперь запускаем make для запуска сборки и ждем приключений.

Первая ошибка не заставит себя ждать:

Связана она с изменениями в спецификации самого языка C++ и по-хорошему стоило бы эту логику переделать. Но поскольку это не мой личный проект, пошел по пути упрощения — просто переключив используемую версию спецификации при сборке.

Файл, в котором появляется эта ошибка, включается в сборку только при ключе --debug , так что без него вы эту ошибку вообще не увидите.

В файле src/main/Makefile.skel в конец значения параметра CXXFLAGS необходимо дописать указание на версию спецификации --std=c++14:

CXXFLAGS=$(CWARNINGS) $(COPTIM) $(DINCLUDE) -std=c++14

Заново запускаем configure и сборку:

./configure
make

Следующая ошибка также связана с изменением в поведении компилятора:

И да, эта ошибка также обоснована и по хорошему код стоит отрефакторить. Когда-нибудь потом.

А на сейчас я просто отключил предупреждение, добавив в файл src/main/promemul/Makefile.skel параметр -Wno-narrowing:

CXXFLAGS=$(CWARNINGS) $(COPTIM) $(DINCLUDE) -Wno-narrowing

Повторно запускаем configure и сборку:

./configure
make

В этот раз сборка должна завершиться успешно и в корне проекта появится бинарник gxemul:

Запуск

К сожалению не удалось найти установочный диск OSF/1, поэтому я использовал готовый образ диска, в котором ОС уже была развернута.

Взят он был отсюда, также продублирован в нашем Телеграм-канале, если владелец сайта вдруг решит заблокировать доступ.

Команда запуска выглядит так:

./gxemul -e 3max -X -d osf1_mips.img -j vmunix

Где -e 3max указание на тип эмулируемой машины, 3max это например DECstation 5000/200 (3MAX):

Ключ -X указывает использовать графический фреймбуфер, без него вы не увидите графического приглашения. Ключ -d указывает на путь к образу диска (в архиве по ссылке выше) а вот -j это уже особая уличная магия:

-j name  set the name of the kernel;

for DECstation emulation, this passes the name to the bootloader, for example:  --j netbsd  (NetBSD/pmax) 

-j bsd  (OpenBSD/pmax)

-j vmsprite  (Sprite/pmax)  

-j vmunix  (Ultrix/RISC)

Войти в систему можно под учетной записью root с паролем Jaguar64.

Новый пользователь создается в терминале xterm, с помощью команды adduser:

Изменить пароль можно стандартной командой passwd.

Сеть

Разумеется без поддержки сети толку от такой эмуляции было бы немного. К счастью эмулятор сделает за вас большую часть работы по пробросу сети в эмулируемую систему (сторону хоста) — сам поднимет виртуальный интерфейс, назначит IP‑адрес и даже выставит DNS.

Вам остается только вторая половина — настроить сеть в системе 1992 года.

Как уже описал выше, эмулятор сам создает виртуальный сетевой адаптер, который со стороны гостевой OSF/1 называется ln0.

Должна отрабатывать команда:

ifconfig ln0

В выводе должно быть видно текущее состояние адаптера.

Также эмулятор самостоятельно создает исходящий адаптер с IP-адресом 10.0.0.254, который также является маршрутизатором.

Эти детали отображаются в консоли при запуске эмулятора:

simulated network: 10.0.0.0/8 (max outgoing: TCP=100, UDP=100) simulated gateway+nameserver: 10.0.0.254 (60:50:40:30:20:10) simulated nameserver uses real nameserver 192.168.1.1

Так выглядит запрос состояния устройства со стороны гостевой OSF/1:

Как только назначим IP-адрес 10.0.0.2 виртуальному адаптеру, должна отрабатывать команда pingк хосту:

Таким образом обеспечен сетевой доступ к хосту из гостевой ОС.

Но чтобы заработал доступ еще и наружу — в интернет, необходимо включить маршрутизацию в гостевой ОС (со стороны хоста это NAT):

В этот момент автор наткнулся на свежую статью 2024го года от Kevin Read, где случились два важных открытия:

  • в интернете есть более современная версия OSF/1 2.0 (да оно официально так называется),

  • существует и подробно описана стандартная настройка сети.

Шаги настройки описанные выше в правильной версии закрываются командой netsetup:

Так вы получите базовую настройку сети и маршрутизацию, но вот с DNS все несколько сложнее. Отвечает за настройку работы резолвера команда bindsetup:

Вся последовательность выглядит как-то так:

Enter the default BIND domain name []: localdomain

Enter your choice [c]: c

Enter the host name of a BIND server: vigor

Enter the Internet address for 10.0.0.254. []: 10.0.0.254

# affected: /etc/rc.config, /etc/hosts

Would you like to run svcsetup now to edit the /etc/svc.conf file (y/n) [y] ?

Enter your choice(s).

For example "0 3 5" [no default] : 2 "hosts" database [2]: 3

# affected: /etc/svc.conf

# hosts: local,bind

Главное это задать IP-адрес хоста, который отвечает за DNS.

В результате всех этих манипуляций должен отрабатывать ping из гостевой OSF/1 и с использованием доменного имени:

OSF/1 2.0

С помощью образов дисков, взятых отсюда, удалось запустить и версию 2.0 этой системы:

Отличить можно по качеству картинки - в 2.0 версии больше цветов. Учетная запись в этой копии: root/test123

Команда запуска также несколько отличается:

./gxemul -X -e 3max -d osf1-2.0-root-full.img -d osf1-2.0-opt.img -M 128 -j genvmunix

Еще тут в каталоге /usr/local/src находится куча полезного софта в виде исходников, для примера удалось запустить сборку bash:

К сожалению не до конца:

Хотя Kevin пишет что should compile fine:

The installed MIPS C compiler is good enough to compile some basic things, and gcc 2.9.5 should compile fine. Apparently binutils is broken, but ld is installed anyway.

Думаю реальная проблема в лицензиях, которые в те времена выдавались на компиляторы в коммерческих UNIX-системах.

P.S.

Статья была опубликована на Хабре, оригинал в нашем блоге.

Показать полностью 19
18

Ответ на пост «Ретро-обзор персонального компьютера МК88 1992 года»1

Судя по скринам, это MS - DOS 3.2 На разборки с АДОС потратил в 1988 не более часа. Выяснив, что команда DIR заменена на СФ (Список Файлов) и СС (Список Системных, наверное файлов), решил дальше мозг не ломать. Имея опыт с хреновейшей русификацией ОСРВ (в девичестве UNIX для EC) и ДИАМС (MUMPS для Электроники, которая в девичестве PDP-11) Из отечественного официального софта могу вспомнить только комплект русификации BETA лаборатории Веселовского (железа был жуткий зоопарк) и редактор Лексикон (в МВД был базовым до нынешнего века!!!). Все остальное было стибрено и криво русифицыровано. СУБД Ребус - какой-то из фоксбейсиков, текстовый редактор Фотон 1 - MultiEdit 4. Все русское, что работало, писалось энтузиастами.

Судя по скринам, система загрузилась, отрабатывает команды ver и dir.

Дальше надо смотреть config.sys и autoexec.bat Отвечают за последовательность загрузки файлов. посмотреть можно командой type "имя_файла".

К вопросу о дисководах. Флопповоды (официально НГМД) не отличались хорошей совместимостью. Самыми крутыми считали Seagate, потом болгарские Изот, потом все остальные.

4

Sun-2 Workstation в эмуляторе

На экране стильно оформленная FreeBSD, в которой под задорную песенку происходит загрузка SunOS 2.0 из 1985 года:

Этим роликом можно приманивать сисадминов ;)

Сам эмулятор выложен на Github, но работает только под BSD-системами.

Показать полностью
37

Заводной абрикос

Помимо всем известной Apple, на свете существовала еще одна «фруктовая» компания, выпускавшая очень популярные компьютеры.

И сейчас мы цинично оживим и запустим эмулятор этих замечательных машин.

Главный герой все же справа а не слева.

Главный герой все же справа а не слева.

Поскольку и сама компания и ее компьютеры и даже их эмулятор (вместе с его автором)  — с берегов «туманного альбиона», большая часть ссылок в статье ведет в никуда на ресурсы, заблокированные для доступа из РФ, родной РКН к этому никакого отношения не имеет.

Поэтому надеваем монокли, цилиндры и поднимаем тост «За обход иностранных блокировок».

Кто бы мне сказал еще десять лет назад, что попасть на фанатский сайт о старых британских компьютерах станет сложнее, чем на официальный сайт Северной Кореи.

Его звали "Apricot"

Изучая материалы из недавнего компьютерного прошлого, в который уж раз убеждаюсь:

за каждой успешной историей в ИТ есть натуральное кладбище из неудач и провалов.

А нынешние и всем известные «лидеры ИТ-индустрии» были отнюдь не первыми в своем деле и часто далеко не самыми инновационными. Еще у людей короткая память:

вчерашний «лидер рынка» и «король продаж» может легко и просто, а главное — невероятно быстро пропасть с концами из информационного поля.

Невзирая на всю шумиху в прессе, мощный пиар и даже народную любовь. Наша сегодняшняя история как раз про такую компанию:

Apricot Computers Ltd., originally Applied Computer Techniques Ltd. (ACT), was a British electronic company active from 1965 to 2005.

Как вам такие факты:

  • Who owned up to 30% market share in the UK, extended its sales in the USA and was ahead of IBM in the mid-80s in Europe?

  • Who was the first to launch speech recognition system for PC… in 1984?

  • Who introduced the first 3.5’’ floppy drive? The infrared trackball ? The keyboard with programmable functions keys along with a built-in LCD screen?

  • Who decided to deliver stylish designs, high resolution screens (800×400 in 1983), through a fully integrated conception in Scotland, allowing to manufacture in the early 90s one of the world’s most secure x86-based PCs?

Как видите, история получается более чем увлекательная, поскольку даже для весьма подкованного в винтажных вопросах автора эти факты оказались сюрпизом.

Так выглядел один из «абрикосов», предназначенный для корпоративного рынка:

<a href="https://d.pikabu.ru/story/zavodnoy_abrikos_14063656?u=https%3A%2F%2Fclassic.technology%2Fwp-content%2Fuploads%2F2017%2F10%2Fapricot_xi.pdf&t=%D0%A2%D1%83%D1%82&h=ba2d230b90be5629622fd4f923e9dc9292c97030" title="https://classic.technology/wp-content/uploads/2017/10/apricot_xi.pdf" target="_blank" rel="nofollow noopener">Тут</a> в высоком разрешении.

Тут в высоком разрешении.

Название к кириллице разумеется отношения не имеет — на экране отнюдь не буква «Ж», а стилизованное «Xi».

Поскольку был найден эмулятор этих интересных машин, решил попробовать это дело собрать и оживить. Однако все оказалось далеко не так просто и процесс написания этой статьи (вместе со сроками) пошел очень сильно не по плану, затянувшись на три месяца экзотических изысканий.

Эмулятор

Эмулятор компьютеров Apricot называется QDAE:

QDAE is a Quick and Dirty Apricot Emulator for Linux, Windows and MacOS X. This version emulates the Apricot F1, Xi and Portable; it may support other F-series and PC-series Apricots as well.

Основная разработка была закончена в далеком 2012 м году, собственно у файла Changelog, в котором находится описание изменений между версиями, дата последней модификации — май 2012 года. И с тех пор проект не развивается, можно сказать заброшен.

Сам эмулятор полностью оправдывает название «Quick & Dirty», поскольку был создан действительно «на коленке», на основе кодовой базы DOS-приложения а стабильность его работы — примерно как у Windows 95 оставляет желать лучшего.

Плюс документация (которой нет), ROM-файлы (которых тоже нет) и сами экзотические машины из далекого прошлого, физического доступа к которым нет и не предвидится.

Но разумеется все это меня не остановило.

Готовая сборка QDAE существует только для Windows, как оказалось в дальнейшем, автор эмулятора создавал эти сборки с помощью кросс-компиляции из-под Linux, причем очень старым компилятором.

Хотя все эти замечательные нюансы всплывут уже потом, скачивая первый раз сборку этого чуда, ни о чем подобном я и не подозревал.

Исходники находятся на личном сайте автора, никаких копий на GitHub обнаружено не было. Поэтому забирать придется оттуда:

wget https://www.seasip.info/Unix/QDAE/qdae-0.0.10.tar.gz

Также архив с исходниками присутствует в Windows-версии эмулятора — будет лежать в каталоге установленного приложения. На всякий случай оставлю еще пару линков на сборки, поскольку непонятно как долго еще будет существовать личный сайт автора.

Образы ROM

Первой проблемой с этим эмулятором оказалось полное отсутствие ROM-файлов, необходимых для работы. Сам автор с истинно британским юмором советует «снять дамп с работающей машины»:

For copyright reasons, QDAE is not supplied with any BIOS ROMs or disk images. Accordingly, when you launch QDAE for the first time, it will abort with the message: "Could not open f1.rom". You will need a dump of the F1 ROM (the F10 ROM is not suitable; the F2 ROM may work but has not been tested).

Если у вас есть возможность сгонять на выходные в Лондон, найти там одну из примерно таких сохранившихся машин:

И затем уломать владельца на проведение жестоких экспериментов с его музейным экспонатом — проблемы разумеется нет.

Но я был не в настроении путешествовать и подумал, что будет разумнее поискать эти самые ROM в сети.

И немедленно нашел прекрасное:

Только вдумайтесь:

простой народ в UK замучен копирайтерами до такой степени, что автор боится выложить загрузочный образ для компьютера из 1980х, произведенного компанией, которой давно не существует.

Представляете как надо было запугать людей? Зато обнаружился и легкий намек на то, как эти самые образы можно получить:

Дальнейшие изыскания показали, что образы вообщем-то в сети есть, причем их довольно много. Только с ними есть нюанс:

Файлов ROM оказалось два.

А эмулятору нужен один.

Что это вообще такое и как быть?

Не буду утруждать читателя всей историей изысканий, но мои поиски в итоге привели к этому gist:

Use this script to merge a pair of even+odd / low+high roms into a single file. You'll need to do this for games which have 16-bit CPUs which use 8-bit ROMs. Then, once you've merged each high/low pair, concatenate all the merged pairs into one single file to use in your disassembler.

Приведу код скрипта целиком:

#!/usr/bin/perl
#
# Merge a pair of hi/low byte roms into a single file
#
# Usage: merger.pl <low_or_even_byte_rom> <high_or_odd_byte_rom> >outputfile.bin
open LO, $ARGV[0] || die $!;
open HI, $ARGV[1] || die $!;

$i=0;
while(!(eof(LO) | eof(HI)))
{
$a=getc(LO);
print $a;

$a=getc(HI);
print $a;
}

Тут происходит чтение LO и HI-файлов, переданных в качестве аргументов а затем их побайтовая перекодировка в символы:

getc returns the next character from the input file attached to FILEHANDLE

В этом-то и была главная хитрость, выносившая мне мозг пару недель — надо не просто слить два ROM-файла в один, а еще и перекодировать.

Образы дисков

С дисками все оказалось сильно проще, они неплохо каталогизированы и доступны для скачивания:

Еще на известном Archive.org выложена огромная коллекция образов (~90Гб!), среди которых присутствуют интересные образы дисков и для машин Apricot.

Запуск и работа

При попытке запуска версии для Windows, эмулятор откажется работать, выдав сообщение о том что ROM-файлы не найдены:

ROM-файлы читаются из каталога ~/.qdae/Roms, либо из %USERPROFILE%/Documents/QDAE в Windows.

Однако имена самих файлов зашиты в коде, например для машины «Apricot F1» файл называется f1.rom. Соответственно для того чтобы ROM-файл был найден и загружен эмулятором — недостаточно просто положить его в нужный каталог, нужно еще и соблюсти именование.

Напоминаю:

Без ROM-файлов эмулятор не заработает, совсем.

Как уже было отмечено выше, ROM-файл еще нужно собрать из двух частей, поскольку все доступные в интернете образы разделены на HI и LO части. В качестве примера, покажу весь процесс на ROM-файле для Apricot F1.

Скачиваем архив, например отсюда или отсюда.

Как нетрудно догадаться по адресам сайтов, эти ROM были созданы для более известного и популярного эмулятора Mame, но мы ведь не ищем легких путей, правда?

В архиве будет два файла, которые необходимо соединить в один:

Вот так выглядит вся цепочка:

perl merger.pl lo_f1_1.6.8f hi_f1_1.6.10f > f1.rom

Копируем полученный ROM в домашний каталог с эмулятора:

cp f1.rom ~/.qdae/Roms/

Дальше можно пробовать запускать c использованием образа диска apr00007.dsk:

/opt/own/qdae/bin/qdae ~/Downloads/apr00007.dsk

Будет загружен MS-DOS 2.11 прямиком из 1984 года, так это выглядит:

Сборка

Если вы считаете себя нормальным или хотя-бы психически стабильным — просто скачайте готовую Windows-версию, благо она отлично устанавливается и затем запускается с помощью Wine.

Автор же заморачивался со сборкой и кровавым патчингом этого чудища только ради того чтобы повесить отрубленную башку над камином принципа и высоких достижений. Если вы простой обыватель — вам такие страдания и лишения точно не нужны. Теперь рассказываю как это было.

Скачав и распаковав архив с исходниками:

wget https://www.seasip.info/Unix/QDAE/qdae-0.0.10.tar.gz
tar xvf ~/Downloads/qdae-0.0.10.tar.gz

Получим каталог с набором трешевых исходников на C и C++ и скриптов сборки (autotools разумеется):

cd qdae-0.0.10
./configure --prefix=/opt/own/qdae

Сборка происходила на Linux Manjaro, ниже будут детали и особенности только по этому дистрибутиву. Эмулятор использует известную библиотеку SDL, причем первую версию, убедитесь что она установлена:

Как видите, я использовал даже не саму 1.х версию а слой совместимости для более современного SDL2

Как видите, я использовал даже не саму 1.х версию а слой совместимости для более современного SDL2

Запускаем сборку командой make и готовимся к первому «боссу». Первая ошибка, которая появляется при сборке на Linux выглядит так:

compress.c: In function ‘comp_open’:
compress.c:137:37: error: implicit declaration of function ‘major’ [-Wimplicit-function-declaration]
137 | if (S_ISBLK(st.st_mode) && (major(st.st_rdev) == 2)) return DSK_ERR_NOTME;

Связана она с тем что функции major и minor объявлены устаревшими в заголовках текущей версии ядра Linux:

/* BSD defines `major', `minor', and `makedev' in this header.
However, these symbols are likely to collide with user code, so we are
going to stop defining them here in an upcoming release. Code that needs
these macros should include <sys/sysmacros.h> directly. Code that does
not need these macros should #undef them after including this header. */
# define __SYSMACROS_DEPRECATED_INCLUSION
# include <sys/sysmacros.h>
# undef __SYSMACROS_DEPRECATED_INCLUSION

Для исправления, необходимо добавить использование заголовка sys/sysmacros.h в начало файла LibDsk/lib/compress.c и перезапустить сборку.

Следующая ошибка, также связанная с этой проблемой выглядит так:

drvlinux.c: In function ‘linux_open’:
drvlinux.c:182:13: error: implicit declaration of function ‘major’ [-Wimplicit-function-declaration]
182 | if (major(st.st_rdev) != 2) return DSK_ERR_NOTME;

Исправление аналогично предыдущей ошибке — просто добавляем эти строки в начало файла LibDsk/lib/drvlinux.c:

#include <sys/sysmacros.h>

После перезапуска сборки, появится куча ошибок вида:

f1_keyboard.cxx:57:32: error: invalid use of incomplete type ‘struct tm’
57 | pkt[ 3] = 0x403 | ((ptm->tm_hour % 10) << 4);
| ^~

Связаны эти ошибки с изменением структуры заголовков, конкретно — с переносом описания структуры времени из sys/time.h в просто time.h.

Для исправления ситуации, необходимо добавить включение этого заголовка в файле bin/sysdep.h:

#include <time.h>

После исправлений, сборка наконец завершается успешно. Однако собранный эмулятор откажется запускаться из каталога сборки:

Поэтому необходимо выполнить установку:

make install

В каталоге /opt/own/qdae появится сборка эмулятора, бинарник будет находиться в каталоге /opt/own/qdae/bin.

И уже отсюда собранный эмулятор можно наконец запустить.

Так выглядит успешный запуск эмулятора с правильным ROM-файлом, но без каких-либо загрузочных дисков:

Мигающие индикаторы фиска и флоппи - как раз легкий намек на отсутствующий загрузочный диск.

Казалось бы все и вот она — победа, достойный результат многомесячного превозмогания, гугления и заморочек с ROM-файлами.

Увы но нет, дела с этим эмулятором обстояли куда сложнее, чем казалось изначально.

Внимание на экран:

На этом интересном месте происходит зависание эмулятора, отладчика и эмулируемой ОС — проще говоря:

наступает полный и тотальный.. конец всему.

Полный Пэ

Перед вами баг в эмуляторе компьютеров из 1980х от компании, которой больше не существует. Доживших до наших дней, действующих компьютеров Apricot осталось крайне мало, ближайший находится где-то в Лондоне.

Сам эмулятор написан 20 лет назад, с использованием ископаемых технологий тех лет, активная разработка давно прекращена, сайт заброшен а сам автор не отвечает.

Чтобы просто запустить эту йобу, пришлось потратить месяц на поиск и сборку ROM-файлов. Более-менее работает лишь Windows-версия, собранная последний раз в 2012м году.

Для Windows 7.

Мануалов фактически нет, исходный код внутри такой, что одним своим видом может напугать неподготовленного человека.

Даже без знания C/C++.

Ну что, взялись бы за работу по исправлению при таких-то вводных?

Письмо автору

На всякий случай сообщаю, что я не окончательно поехавший (несмотря на все статьи), поэтому первым делом честно попытался написать автору эмулятора:

Greetings Mr. Elliott.

I'm trying to resurrect the QDAE emulator and found a problem that I cannot solve.

I was able to fix the build process on Linux, found and successfully merged ROM files, found working disk images. But when emulator loads any graphical environment (ex. Activity) — emulated OS crashes or reboots.

Same problem persist with all types of emulated machines: right after it goes into graphics mode — emulated OS reboots or crashes.

I’ve tried to use this «server version» of MS DOS, found some disk images without automatic start for graphics. That worked and was more-less stable. But without graphics. Not fun.

Then tried to reduce speed ticks (in source code) — down to 1000, 500 or even 100 — emulation has became much slower, but issue not gone.

Tried to use fake year (1985) instead of calculated from the current timestamp — also didn’t help.

I’m not asking for exact solution, just point to right direction, because issues like that always come from something small or stupid.

There were some minor fixes I did, related to missing headers (due to changes in Linux kernel sources) with date-time functions, but don't think that it could be responsible for described issue.

Как видите, прежде чем писать письмо, было перепробовано много разных вариантов исправления ситуации для такого рода проблем, но ни один не сработал.

Дорога приключений

Собственно при таких раскладах оставалось только два пути:

потратить пару лет жизни (опять) на ковыряние кривых исходников на древнем C++, либо попытаться восстановить сборку Windows-версии, поскольку та по какой-то причине продолжала работать.

Для завершения этой статьи я выбрал второй путь. Так выглядит установка Windows-версии QDAE в Wine:

Инсталлятор NSIS - проект на века ;)

Кстати на ролике выше используется новый 10й Wine, с режимом WOW64 — т.е одна и та же версия может запускать как 32 так и 64-битные приложения, без всяких отдельных префиксов:

Так выглядит запуск Windows-версии эмулятора в Wine:

ROM-файлы необходимо скопировать в каталог .wine/drive_c/Program\ Files\ \(x86\)/QDAE/Lib/Roms/ :

Изучение

Я решил применить свои «особые навыки» и залезть внутрь Windows-версии эмулятора, использовав PE Explorer, который оказывается весьма неплохо работает под Wine:

Ковыряем один эмулятор с помощью инструментов, запущенных в другом эмуляторе.

Ковыряем один эмулятор с помощью инструментов, запущенных в другом эмуляторе.

Конечно я догадывался, что шансов встретить серьезную защиту в таком ПО не очень много, поэтому не заняло много времени выяснить ряд важных деталей:

  1. сборка Windows-версии осуществлялась кросс-компиляцией из Linux, с помощью MinGW окружения;

  2. использовалась 32-битная версия компилятора и соответственно получился 32-битный бинарник;

  3. использовалась отдельная библиотека ministl (набор заголовков), вместо обычного STL — см. ниже.

Версия MinGW, используемого автором для сборки эмулятора оказалась невероятно древней:

Чтобы вы оценили всю винтажность этой штуки, нашел информацию о релизе:

GCC-2.95.2 for Mingw (i386-mingw32) -- Release information =================================================================== Release date: Nov 7, 1999. I'm pleased to announce prebuilt gcc-2.95.2 packages for GNU Mingw (i386-mingw32).

1999 год!

И вот этой ископаемой штукой, автор QDAE делал сборки своего эмулятора аж до 2012 года, причем из-под Linux.

Но это еще не все.

История с ministl

В каждой профессии обязательно есть вещи, о которых не принято говорить в приличном обществе. Обычно это знание спрятано за семью замками и железной дверью, в самом темном углу, дорогу к которому вам так просто не расскажут.

В случае программирования на C++ такой вещью является кастомный STL — «левая» реализация (от Васяна) стандартной библиотеки шаблонов «в переводе Гоблина».

Это самый темный угол C++, кладезь бесконечных и самых феерических багов, король дичи и программного треша, которые только можно сотворить в этом замечательном языке.

О самой возможности замены STL вам врядли расскажут вменяемые программисты, поэтому пишу отдельную статью по этой замечательной теме.

Думаю вы уже догадались, что автор QDAE как раз из таких использовал кастомный ministl при создании сборок своего эмулятора:

Тут должно быть драматическое молчание и МХАТовская пауза — для осознания.

Чиним сборку с ministl

Коль уж мы идем по пути восстановления сборки — придется пытаться собрать эмулятор с этим недоразумением вместо нормального STL.

Для этого необходимо запустить скрипт configure с указанием специального параметра:

./configure --with-ministl

И заново запустить сборку:

make clean
make

Разумеется сборка немедленно упадет:

Вы правда думали, что код на C++ из 1996 года соберется в современном окружении?

Вы правда думали, что код на C++ из 1996 года соберется в современном окружении?

Хотя конкретно эта ошибка исправляется легко и просто — достаточно заменить устаревший заголовок <iostream.h> на просто <iostream>:

#include <iostream>

Сохраняем изменения в файле ministl/bstring.h и перезапускаем сборку. Но вот дальше.. дальше начинается ад и вьетнамские джунгли:

Хотя за исправление такого треша мне и платят.

Хотя за исправление такого треша мне и платят.

Вас ожидает простыня ошибок из самых разных интересных мест, общий смысл которых:

иди своей дорогой сталкер, тебе тут не рады

Как понять, что вас ждут ад и погибель удивительные приключения и сутки тяжелой отладки?Копирайт с датами начала 90х в заголовке исходника на C++:

Copyright (c) 1994-1995 Modena Software Inc.,

Стоит рассказать потомкам, откуда вообще взялся этот bstring.h, вот так выглядит его оргинал из 1996 года. Все дело в том, что на свете есть одна известная и очень старая книжка по C++, которая называется:

STL Tutorial and Reference Guide:C++ Programming with the Standard Template Library

By David R. Musser and Atul Saini
Addison-Wesley Professional Computing Series
ISBN 0-201-63398-1 Hardcover 432 pages * 1996

Книга, повторюсь, известная (даже я о ней слышал), думаю кое-кто из читателей держал такую на полке в свое время:

В комплекте с книгой шли примеры исходного кода на C++, одним из которых как раз и был наш bstring.h. Но это все лирика, реалии к сожалению таковы, что сил моих на исправление и переделку под современный C++17 этого древнего шаблона уже не хватило.

Точнее хватить-то хватило (на bstring.h), но обновленная версия ministl сломала весь остальной проект эмулятора, с концами.

Поэтому я его просто.. удалил.

Да, это еще одно тайное знание о заменяемом STL — возможность замещения системных шаблонов по частям.

На самом деле удалить нужно лишь файл string, из которого уже включается bstring.h:

rm ministl/string

Точно также я поступил и с vector.h, где вылезла следующая ошибка на тему новых стандартов и ограничений:

error: ‘void* operator new(size_t, void*)’ may not be declared as static

Объяснить с

Затем с list.h и ошибкой:

h6301.hxx:71:14: error: ‘list’ in namespace ‘std’ does not name a template type
71 | std::list<unsigned char> m_input;
| ^~~~

Наконец последняя ошибка, связанная с ministl:

Path.cxx:199:9: error: ‘sort’ was not declared in this scope; did you mean ‘short’?
199 | sort(v.begin(), v.end());
| ^~~~

«Исправил» ее я аналогичным образом — цинично удалив заголовок ministl/algorithm.

Разумеется так делать нельзя и в нормальном проекте за подобные выкрутасы вас скорее всего побьют, возможно даже ногами.

Но и использовать «васянские» STL вместо стандартных — экстрим еще тот.

Со всеми этими правками, костылями и патчами сборка эмулятора наконец успешно завершается.

(бурные аплодисменты)

Но только собранный эмулятор все также не работает, зависая ровно на том же самом месте.

З2 веселых бита

Как мы уже успели выяснить выше, работающая сборка эмулятора под Windows — 32-битная и была создана 32-битным компилятором, поэтому следующий логичный шаг это попытка сборки 32-битной версии.

И скажу сразу:

в современной системе такая сборка — то еще скотство

Нужно будет установить gcc multilib и 32-битные версии библиотек: SDL и всех остальных используемых библиотек, например libxml2. И все зависимости.

Так выглядит набор параметров, передаваемых скрипту configure для сборки и линковки 32-битного приложения в 64-битном окружении:

./configure --build=i686-pc-linux-gnu CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32

Если скрипт и проследующая сборка пройдут без ошибок, в каталоге bin появится 32-битный бинарник:

Который наконец заработает как надо.

Результат

Показываю наконец результат всех этих адских мучений:

эмулируемые системы Apricot в действии.

Обратите внимание на даты — многие из читателей имеют отцов, которые младше этих систем;)

Использован образ диска: apr00230.dsk , описание:

apricot SOFTWARE *** BETA TEST COPY ***

Date Issued:15/07/85

Return by:29/07/85

F1 (UK) MSDOS 2.11 BIOS 1.6 Disk One - Activity, Tutor Disk Two - Diary,Sketch,Async,GWBASIC 1F1U04B Disk 1 of 3

Образ диска: apr00256.dsk , описание:

APRICOT DEMONSTRATION PICTURES BIOS V1.4 JAN 1984

Так выглядел далекий предок Microsoft World

Образ диска: apr00076.dsk , описание:

24/4/84 PS PSMATE SUB-MASTER 211 NOT FOR RELEASE

Образ диска: apr00190.dsk , описание:

2.6 BOOT PC/XI WITH LINKWORD INC MSBASIC MASTER 61

Образ диска: apr00264.dsk , описание:

BASIC GAMES, ENCHANTE, MASON, QUEST MASTER 19

В качестве эпилога:

P.S.

Статья была опубликована на Хабре, более вольный оригинал как обычно в нашем блоге.

Будут еще статьи по Apricot, поскольку не влезла история с 32-битной сборкой эмулятора на FreeBSD и установкой первых версий Windows.

Ntcn

Показать полностью 31
7

Запуск Doom на IBM AS/400

Отвечая за запросы читателей, показываю как выглядит запуск Doom на этой столь редкой системе.

В интернете существует поднятый энтузиастами сервер IBM, куда может подключиться любой желающий (если осилит регистрацию) и поработать с этой уникальной системой.

Небольшой ролик как это выглядит:

Показать полностью 1
28

Необычный заказ: разработка под CP/M

Древний дисковод ожил и издавая чудовищный скрежет стал медленно загружать мое послание. Через какое-то время на экране появились строки:

NE PUERO GLADIUM, DR. KRIGER. 04.03.2026

Три пары глаз повернулись ко мне в немом изумлении.

— Это длинная история, нам лучше присесть.

Все герои в сборе.

Все герои в сборе.

Человек, перешагнувший порог моего маленького офиса в тот летний вечер явно имел отношение к спецслужбам — армейскую выправку и годы тренировок не спрячешь так просто.

Рослый и поднятутый, в безупречном костюме и с острым, пронзительным взглядом — он производил серьезное впечатление.

И тем странее выглядел этот заказ.

— Алекс, полагаю?

— Он самый, рад наконец познакомиться лично. Вы написали, что для нас есть работа. Хотя исходя из содержания письма, задача выглядит довольно.. необычной.

— Это проблема? Мне рекомендовали вас как опытных профессионалов..

— Нет, не проблема. Просто уточняю детали, дабы убедиться, что мы понимаем друг друга. Итак, вы действительно используете компьютеры.. из 1987 года?

АРХЕОТЕХ

Копаясь в сети в поисках очередного археотеха, был обнаружен удивительный репозиторий, в котором один почтенный джентельмен, недавно отошедший от дел, собрал невероятную подборку дичи инструментов разработки для компьютеров конца 70х — начала 80х:

CP/M 2.2 compilers, assemblers, and interpreters

CP/M, если кто вдруг не знает (коих среди читателей точно будет большинство), это такая операционная система из далекого-далекого прошлого, созданная аж в 1974 году. Разумеется давно и крепко забытая обывателями.

Для сравнения и понимания исторического периода:

в 1977м году вышел первый фильм Джорджа Лукаса по вселенной «Звездных Войн», а в 1975м закончилась война во Вьетнаме.

Практически любые компьютерные материалы тех лет представляют историческую ценность, а тут аж целый репозиторий, забитый под завязку редчайшим археотехом.

Чтобы вы смогли оценить объем и сложность проделанной работы:

каждый компилятор или средство разработки из этой коллекции пришлось специально оцифровывать, считывая данные с невероятно старых носителей информации — дискет или магнитной ленты.

C помощью дисководов, возрастом слегка за пятьдесят, типа такого:

<a href="https://d.pikabu.ru/story/neobyichnyiy_zakaz_razrabotka_pod_cpm_14058329?u=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FHistory_of_the_floppy_disk&t=8-%D0%B4%D1%8E%D0%B9%D0%BC%D0%BE%D0%B2%D1%8B%D0%B9&h=cd61eab45f544483eb7ee1c8de57cbbf55554ef9" title="https://en.wikipedia.org/wiki/History_of_the_floppy_disk" target="_blank" rel="nofollow noopener">8-дюймовый </a>(!) диск с дисководом начала 70х. Слева для сравнения "современная" 1'44 дискета.

8-дюймовый (!) диск с дисководом начала 70х. Слева для сравнения "современная" 1'44 дискета.

Представляете, чего стоило все это оживить, запустить и заставить работать?

Физические процессы, механические повреждения и влияние среды при этом никто не отменял.

Если быть совсем точным, то сначала был обнаружен немного другой репозиторий от этого же почтенного автора, где была собрана похожая коллекция, но для более обыденного DOS. Лишь несколько недель спустя обнаружилось, что совсем рядом находится настоящее сокровище утраченной цивилизации — чистый археотех. И понеслась.

От такого изобилия начала капать слюна и дергаться глаз:

Сообщения коммитов вроде "macos build" и "linux build" в одной строке с компиляторами из 70х невероятно доставляют.

Скорее всего ничего из длинного списка выше вам знакомо не будет, поскольку все эти древности на десяток-другой лет старше даже автора этих строк.

Отдельный восторг у искушенной публики вызовет наличие скриптов сборки под Unix (Linux/Mac/BSD).

Примерно из-за таких изумительных проектов хорошие инженеры навсегда бросают пить. Но вернемся в мой кабинет — к гостю с армейской выправкой и странными, хотя и законными запросами.

— Этот разговор будет долгим. Не найдется ли у вас чем освежиться?

..

Искусство искусством, но прежде чем погружаться по локоть в «кровавый ад разработки» 80х c линковщиками и компиляторами, стоит рассказать о технических реалиях тех лет — оборудовании и самой операционной системе CP/M. Будет интересно, даже если вы, дорогой читатель, сами не старше третьего GTA.

Аукционный дом <a href="https://d.pikabu.ru/story/neobyichnyiy_zakaz_razrabotka_pod_cpm_14058329?u=https%3A%2F%2Fwww.christies.com%2F&t=Christie%27s&h=668bd8bd8985e0826c77a55bac7d97b5689ffd47" title="https://www.christies.com/" target="_blank" rel="nofollow noopener">Christie's</a>, <a href="https://d.pikabu.ru/story/neobyichnyiy_zakaz_razrabotka_pod_cpm_14058329?u=https%3A%2F%2Fonlineonly.christies.com%2Fs%2Ffirsts-history-computing-paul-g-allen-collection%2Fgroup-nine-early-microcomputers-120%2F230058&t=%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B0%D1%8F%20%D0%BA%D0%BE%D0%BB%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D1%8F%20%D0%9F%D0%BE%D0%BB%D0%B0%20%D0%90%D0%BB%D0%BB%D0%B5%D0%BD%D0%B0&h=cb7e7057a8bda4da9e09231074fbf666bca6f0a7" title="https://onlineonly.christies.com/s/firsts-history-computing-paul-g-allen-collection/group-nine-early..." target="_blank" rel="nofollow noopener">частная коллекция Пола Аллена</a>.

Аукционный дом Christie's, частная коллекция Пола Аллена.

ЭПОХА МИКРО

Между огромными мейнфреймами, занимающими машинные залы и первым домашним PC с DOS а затем и Windows, был относительно краткий период рассвета (1970-1980) микрокомпьютеров:

A microcomputer is a small, relatively inexpensive computer having a central processing unit (CPU) made out of a single integrated circuit microprocessor.

Да, это официальное название, «микрокомпьютерами» назывались множество разных девайсов от разных производителей, предназначенных для игор домашнего использования.

Знаменитый <a href="https://d.pikabu.ru/story/neobyichnyiy_zakaz_razrabotka_pod_cpm_14058329?u=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FCommodore_128&t=Commodore%20128D&h=a8faf68b98c488a7565ecaeae3695fafd7f55edb" title="https://en.wikipedia.org/wiki/Commodore_128" target="_blank" rel="nofollow noopener">Commodore 128D</a>

Знаменитый Commodore 128D

Не менее знаменитый <a href="https://d.pikabu.ru/story/neobyichnyiy_zakaz_razrabotka_pod_cpm_14058329?u=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FTRS-80&t=TRS-80&h=562f4f5c590fd1e17a9c83a77d3c676ae9e688a7" title="https://en.wikipedia.org/wiki/TRS-80" target="_blank" rel="nofollow noopener">TRS-80</a>.

Не менее знаменитый TRS-80.

Это был настоящий бум домашней электроники и сотни разных компаний по всему миру начали создавать свои линейки для новой отрасли — домашних компьютеров.

— Интересная история, крайне.. необычная.

Рассказ гостя определенно интриговал.

За долгую жизнь со мной случилось столько разнообразной херни, что заказ на разработку для компьютера из 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 <a href="https://d.pikabu.ru/story/neobyichnyiy_zakaz_razrabotka_pod_cpm_14058329?u=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FGary_Kildall&t=Gary%20Kildall&h=9f2249d31f7fb95184c772e94dd2cdfbf20db77e" title="https://en.wikipedia.org/wiki/Gary_Kildall" target="_blank" rel="nofollow noopener">Gary Kildall</a> за работой, 1978 год. Огромный ящик слева это.. дисковод.

Создатель операционной системы CP/M Gary Kildall за работой, 1978 год. Огромный ящик слева это.. дисковод.

CP/M

Стоит рассказать и про операционную систему тех лет, благо очень немногие из читателей дожили имели шанс с ней поработать:

CP/M,originally standing for Control Program/Monitor and later Control Program for Microcomputers, is a mass-market operating system created in 1974 for Intel 8080/85-based microcomputers by Gary Kildall of Digital Research, Inc.

Внешне это сильно похоже на более привычный отечественному пользователю 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 со сборкой эмулятора легко находится в сети, можно скачать например тут.

Скачиваем и распаковываем:

wget http://www.z80.eu/downloads/myz80124.zip
mkdir myz80cpm && cd myz80cpm
unzip ../myz80124.zip

Внутри будет весьма необычный для современности набор файлов:

MYZ80.EXE — очевидный бинарник эмулятора, но проблема в том что это 16-битное приложение для DOS, запустить которое в современном окружении представляет проблему. Так что придется использовать еще один известный эмулятор — Dosbox, чтобы запустить внутри винтажный MYZ80. А так эта «матрешка» выглядит в работе:

Самое важное, ради чего были нужны заморочки аж с двумя эмуляторами — виртуальные диски, связанные с файловой системой DOS:

Поскольку Dosbox в свою очередь дает виртуализацию дисков непосредственно из хоста — получаем отличный способ быстро перебрасывать файлы в виртуальную CP/M.

Что важно при любой разработке с использованием эмулятора.

Собственно, то самое тестовое приложение EXMPL.COM на заглавной картинке было сначала скопировано в каталог с эмулятором:

cp ../../src/cpm_compilers/manx\ aztec\ c\ v106d/EXMPL.COM .

Затем импортировано в виртуальный диск CP/M:

И запущено уже в CP/M.

Все это проще и быстрее, нежели описываемый ниже вариант с 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 kayproii -w -rompath ./roms -flop1 disks/KAY64CPM.IMD

Если все шаги выполнены правильно, появится заставка Mame с описанием эмулируемой машины:

После нажатия любой клавиши, загрузится сама CP/M и вы увидите такое приглашение:

..

Да все просто.

Если бы мне давали доллар каждый раз, когда я слышу эту фразу — давно бы стал миллионером..

— Наш коллега из организации, назовем его для простоты доктор Кригер, свято уверен, что только он один может.. как это он выразился?

Создать новую электронную жизнь в древнем компьютерном теле.

— Надеюсь, ваш коллега хотя-бы вводит код руками а не другим органом.

Гость посмотрев с удивлением, ненадолго задумался.

— Какая интересная мысль! Мне бы такое в голову не пришло. Я уже упоминал, что вы с ним похожи?

CPMTOOLS

Это весьма известный (среди некрофилов) набор инструментов для работы с файловыми системами CP/M, за авторством Michael Haardt. К сожалению работа над оригинальным проектом давно прекращена, так что мы будем использовать более современный форк:

Собираем и запускаем сборку:

./configure
make

В результате сборки появится несколько бинарников, готовых к запуску:

Думаю даже по названию нетрудно догадаться об их предназначении.

Думаю даже по названию нетрудно догадаться об их предназначении.

Для всех последующих увеселений будут использоваться в основном эти два: cpmls и cpmcp. Первый предназначен для просмотра содержимого образа диска, второй — для копирования внутрь файлов с хоста.

Копируем созданный образ диска в текущий каталог:

cp ../../work/kayproii-machine/test2.dsk .

Проверяем что диск читается:

./cpmls -f kpii test2.dsk

Копируем тестовый файл:

./cpmcp -f kpii test2.dsk README 0:README.TXT

Повторный запуск cpmpls должен показать содержимое диска с тестовым файлом:

NTVCM

Наконец последний эмулятор CP/M, который тоже придется использовать, хотя и опосредованно:

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. <a href="https://d.pikabu.ru/story/neobyichnyiy_zakaz_razrabotka_pod_cpm_14058329?u=http%3A%2F%2Fwww.z80.info%2F&t=%D0%9E%D1%82%D1%81%D1%8E%D0%B4%D0%B0&h=0538d55ccd2e382340c71e498d719cfb76e91df1" title="http://www.z80.info/" target="_blank" rel="nofollow noopener">Отсюда</a>.

All 24 and 28 pins EPROM pinout 2708 - 27512. Отсюда.

— Это распиновка EPROM, для Z80.

— Хм, гляжу вы действительно разбираетесь.

Тут гость привлек мое внимание, указав на одну из фотографий.

— Вот здесь, на стене было загадочное послание, оставленное.. аналогичным способом. Но его смысл мы так и не смогли разгадать.

Я пригляделся к фотографии:

640КБ ХВАТИТ НА ВСЕХ

— Нет идей что бы это могло значить?

Пол Аллен и юный Гейтс за четыре года до основания Microsoft.

Пол Аллен и юный Гейтс за четыре года до основания Microsoft.

НЕПРЕРЫВНОЕ ВЕСЕЛЬЕ

Возвращаясь к тому адскому репозиторию с компиляторами, наконец рассказываю основное:

как современному ребенку программисту вести разработку для компьютера из 1987 года.

Цепочка необходимых действий выглядит следующим образом:

  • Сборка;

  • Тестовый запуск с помощью ntvcm;

  • Запуск с помощью myz80;

  • Запуск в Mame с образом настоящего Kaypro II;

  • Сеанс рукоблуд.. ээ переход к следующему примеру.

И начнем мы с того самого примера, показанного на заглавной картинке в фоне. Заранее предупреждаю:

собираем только самые простые варианты, так как каждый сложный имеет свою специфику, требующую отдельного описания.

Но даже в этом случае показать получится очень далеко не все — интересных компиляторов и тулчейнов в репозитории просто чудовищное количество. Начнем разумеется с компилятора языка С, но.. особенного.

Aztec C

Спасая цитату из погибающей википедии:

Aztec C is a discontinued C programming language compiler for CP/M-80, MS-DOS, Apple II (both Apple DOS 3.3 and ProDOS), Commodore 64, early Macintosh, Amiga, and Atari ST. It was sold commercially by Manx Software Systems[1].

Судя по обнаруженным материалам, это был весьма известный и популярный продукт для тех лет. А еще это вариация языка С до стандартизации, поэтому и называется не просто компилятором, а прям отдельным языком:

Aztec C — a programming language for a variety of platforms

Редкое для современных бюрократических реалий зрелище: компилятор, забивающий на стандарты и правила. Так что это был популярный и известный инструмент, с весьма скромными прайсами:

Сложно из 2026 года оценивать цены 1980х, но судя по прайсу выше, Aztec C был явно не самым дорогим софтом, тем более для разработчиков. Но мы опять отвлеклись.

Переходим в каталог manx aztec c v106d и запускаем сборку примера:

./m.sh EXMPL

Да, обязательно КАПСЛОКОМ и обязательно без указания расширения, поскольку в скрипте идет вызов как компилятора, так и линковщика. Будет собран COM-файл для CP/M, который проще всего запустить с помощью эмулятора от автора репозитория:

ntvcm EXMPL.COM

Так весь процесс выглядит в действии:

Теперь запустим на втором эмуляторе — MYZ80, чтобы убедиться в корректности только что собранного приложения. Копируем созданный EXMPL.COM в каталог с эмулятором и запускаем его через Dosbox:

cp ../../src/cpm_compilers/manx\ aztec\ c\ v106d/EXMPL.COM .
dosbox MYZ80.EXE

Затем, уже из CP/M выполняем:

import EXMPL.COM

Этим действием, файл будет скопирован с хоста в виртуальный диск (дискету) CP/M, откуда его наконец можно будет запустить:

EXMPL

В действии:

Наконец в качестве дембельского аккорда контрольного примера, показываю запуск и работу в Mame. Переходим в каталог с cpmtools и выполняем:

./cpmcp -f kpii ../../work/kayproii-machine/test2.dsk ../cpm_compilers/manx\ aztec\ c\ v106d/EXMPL.COM 0:EXMPL.COM

Этим действием мы запишем наше собранное приложение EXMPL.COM в образ дискеты для Kaypro II. Для проверки выполняем:

./cpmcp -f kpii ../../work/kayproii-machine/test2.dsk

Должно быть видно содержимое образа дискеты, с новым файлом внутри:

Наконец запускаем максимально близкую к реальности эмуляцию компьютера Kaypro II в Mame:

mame kayproii -w -rompath ./roms -flop1 disks/KAY64CPM.IMD -flop2 test2.dsk

Так это выглядит в действии:

Чтобы не раздувать статью до совсем уж скотских размеров, для всех остальных компиляторов покажу только финальный запуск в Mame. Пусть ваше больное воображение дорисует недостающее.

..

— Ладно, думаю мы договорились. Небольшое приложение для Kaypro II образца 1987 года, для причинения моральных страданий немецкому инженеру.

На этом мой гость задумался, как будто вспоминая важную деталь.

— Как же оно называется? Туда запихиваются такие плоские черные штуки? Д.. дди.. доо..

— Дисковод, для дискет. Работу необходимо сдать на 5.25 дискете, я уже понял.

Это был первый раз в моей жизни, когда надо было сдать работу на пятидюймовой дискете. Но с учетом роста цен на чипы памяти и SSD — думаю далеко не последний.

(гомерический хохот за кадром)

Так выглядела обложка от оригинальной упаковки с комплектом дискет.

Так выглядела обложка от оригинальной упаковки с комплектом дискет.

Microsoft COBOL

Малоизвестный ныне факт, но компания Microsoft когда-то продавала компилятор COBOL:

Microsoft produced a COBOL compiler for CP/M. This product was also licensed to IBM as IBM Cobol Compiler.

Я собрал и запустил пример, который производит вычисление корня методом Ньютона:

./m.sh SQUARO

Для запуска помимо 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, если кто вдруг не понял.

В качестве примера была взята реализация "симулятора жизни":

./m.sh LIFE

К сожалению автоматически (из скрипта сборки) оно не линкуется, так что пришлось вызывать этот шаг отдельно:

ntvcm PROLINK.COM LIFE,PASLIB/S

Так эта программа выглядит в работе:

Все выше конечно весьма занимательные (для археологов и некрофилов) штуки, но самое интересное я приберег напоследок.

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го.

Меня сопроводили в специальную, строго охраняемую комнату, где на постаменте, под защитным стеклом находился артефакт из далекого прошлого.

Robotron 1715 — 8-разрядный персональный компьютер производства ГДР. Производился на заводе VEB Robotron.

Версия 1715M, сохраненная в ордене это «экспортный» вариант, когда-то давно поставляемый в Советский Союз. С величайшим почтением нашептывая молитвы загрузки, послушник в черном балахоне приблизился к постаменту и приложил ладонь к считывателю отпечатков пальцев. Защитное стекло начало медленно опускаться.

Наконец запуск и загрузка операционной системы SCP ( аналога CP/M, но из ГДР) были завершены. Появилось приглашение ввода команд:

А>

Послушник взял мою пятидюймовую дискету с записанной сборкой и с благоговением вставил ее в древний дисковод, не забыв выставить специальную защелку в вертикальное положение.

Затем на не менее древней механической клавиатуре он ввел:

Дисковод ожил и издавая чудовищный скрежет начал загружать мое послание. Через какое-то время на экране появились строки:

NE PUERO GLADIUM, DR. KRIGER. 04.03.2026

Что в переводе с латыни означает:

НЕ СТОИТ ДАВАТЬ БОЕВОЙ МЕЧ МАЛЬЧИКУ, ДОКТОР КРИГЕР.

Проверка удалась и написанное мой приложение для компьютеров 80х под CP/M действительно успешно запустилось на настоящем компьютере из 1987 года. Так это выглядело в живую:

Мое послание, запущенное на настоящем Роботроне.

Мое послание, запущенное на настоящем Роботроне.

P.S.

Все персонажи (кроме автора) - пародия на известный сериал Archer. Статья в более развернутом виде была опубликована на Хабре, оригинал в нашем блоге.

Показать полностью 36
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества