September 7th, 2017

moose, transparent

эмуляторное

Сегодня смотрел на то, какие есть эмуляторы старых Макинтошей (тех, что с процессором 68k, модели 1984-1996 примерно). Оказалось, что их не так много. Внутри браузера работает только один эмулятор, PCE.js, который является джаваскрипт-версией (через транслятор Emscripten) эмулятора PCE, написанного на олдскульном C человеком с неправдоподобным именем Hampa Hug.

Однако PCE - и соответственно его браузерная версия - поддерживает только ранние модели с монохромными дисплеями, вплоть до Macintosh Classic (1990). Первая модель Макинтоша с цветным дисплеем была Macintosh II (1987), в другой линейке - он ее не умеет. На словах больше моделей, включая II, поддерживает проект MAME, и он также утверждает, что все в нем можно скомпилировать в джаваскрипт через Emscripten (JSMAME); но конкретного работающего примера такого Мака нет, а MAME это такие дебри непроходимого и страшного кода, что мне не хочется туда и соваться. Сомневаюсь, что это хорошо работает: когда недавно энтузиасты archive.org сделали коллекцию ранних Макинтошных игр и программ, запускаемых в браузере, они воспользовались вышеупомянутым PCE.js, а не JSMAME.

Собственно, нашел только один эмулятор, хорошо поддерживающий цветные Макинтоши, конкретно модель Mac II. Он называется "Mini vMac", легкий, быстрый, удобный. Увы, только для десктопных ОС, не в браузере; но работает отлично. Когда мне захотелось посмотреть на его исходники, узнал удивительнейшую вещь о нем. Если скачать исходники эмулятора, то получаешь имидж диска для старых Макинтошей, который следует воткнуть... в сам эмулятор! Нет, сама компиляция исходников (написанных на C) в конечном счете будет под Windows, или Linux, или где еще надо. Но автор практически всё в эмуляторе сделал опцией времени сборки - и какую модель эмулировать, и сколько у нее памяти, итд. итд. И написал для всего этого собственную систему сборки, которой надо дать набор аргументов, а она на их основе создает подогнанный под них набор исходников на C и Makefile. Эта система сборки - программа для древнего Макинтоша и бежит внутри эмулятора! Это самый экстремальный пример принципа "eat your own dogfood", что я припоминаю.

До недавнего времени процесс выглядел так, если я верно понял. Скачиваешь готовый эмулятор для своей системы и имидж диска с исходниками. Запускаешь диск под эмулятором, запускаешь систему сборки, она пишет набор исходников на тот же диск. Теперь тебе его нужно вытащить из древнего эппловского формата HFS, в котором отформатирован диск, в свою настоящую ОС. Но недавно автор упростил этот процесс следующим образом. Он вставил в свой эмулятор специальную дырку, с помощью которой система сборки может сбежать за пределы своей виртуальной клетки, и приказать эмулятору записать такие-то данные на "настоящем" компьютере. Намного удобнее! Но как это все странно.