спектрум
«Окошки» на «Спектруме»
Иногда, во время подготовки очередной заметки на сайт, я задумываюсь о том, что используя русский, я остаюсь невидимкой для подавляющего большинства пользователей интернета. Наверняка существует много интересных людей, пишущих на других языках, которые так же невидимы для меня.
Недавно я нашёл подтверждение этой, в
Несколько месяцев назад волею судеб я попал в небольшую чешскоязычную группу «8 bit Windows». Она закрытая, поэтому ссылку не привожу.
Автор группы Мобисек Марек на смеси Бейсика с ассемблером делает
Вся техника — из девяностых. Современные накопители и прочие удобства не считаются; всё обязано крутиться на настоящем старом железе. В описании группы Марек отдельно приписал, что обходится без нейросетей.

Для эксприментов у него есть два компьютера: «Дидактик М» и «Дидактик Компакт». Оба — чехословацкие клоны компьютера «Спектрум». Изредка в группе появляются
Конечно это не перенос настоящей системы «Виндоус», и программы для неё на «Дидактике» не запускаются. Марек написал свою графическую среду, позаимствовав знакомый всем вид интерфейса: рабочий стол, меню «Пуск», проводник, панель управления, калькулятор, часы, диспетчер задач и переключение между программами. Есть даже синий экран смерти — иначе, видимо, сходство было бы недостаточно убедительным.
Судя по фоткам в группе, внешний вид системы менялся. Она успела побыть «Виндоус 2.0», затем 3.1 и 2000; были ещё ветки «Профессионал» и

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

В спецификации написано, что для запуска хватит процессора «
Размер ядра — около 20 КБ. Примерно 40% кода написано на расширенном Бейсике, остальные 60% — на ассемблере. Предусмотрено и
Сейчас двадцать килобайт занимает небольшая иконка, а тут в них помещается ядро графической среды. Например, один хранитель экрана — 549 байт. Зимняя заставка со снегом — 600. Псевдотрёхмерное пространство — 720. Рабочий стол с максимально возможным количеством значков занял 4050 байт при лимите 4096.
В процессоре нет ни защищённого режима, ни аппаратного разделения памяти между ядром и программами. Всё это пришлось изображать программно: придумать раскладку кода и несколько уровней защиты. Криво написанная программа вполне способна задеть соседнюю — или саму систему.
Ниже устройство памяти, нарисованное от руки. Внизу — ядро, часы, системная логика и диспетчер задач. Выше лежат области двух приложений; остальное место пока свободно. Специальная стартовая процедура определяет, что именно ей подсунули: обычную программу на Бейсике, приложение для

Разработка идёт не только в сторону добавления новых деталей, но и увеличения производительности, что очень актуально для такой слабой машины.
Недавние изменения в меню «Пуск» дали плюс 10% к скорости. Столько же выиграл общий отклик. Диспетчер задач, по оценке Марека, разогнался сразу на 70%. Ещё одна затея — ускоренная отрисовка окон. Цель: уложиться примерно в одну десятую секунды. На глаз это уже будет почти мгновенно.

Группа, которую ведёт Марек довольно активна, я нечасто захожу, не чаще раза в неделю, за это время как раз накапливается что почитать через переводчик или поразглядывать.
Последняя заметка — сегодняшняя. В ней Марек выложил новую прошивку для компьютера «Дидактик Компакт»: исправил старую ошибку обработки немаскируемого прерывания, убрал неприятный звук после сброса и встроил
В группе всего восемьдесят участников, и почти все записи делает сам Марек. Так что скорее это не столько группа, сколько личный технический блокнот — почти как мой сайт. Только язык другой и проект один, зато огромный. В ленте не одни отчёты, заметки разные, но
В одном из постов Марек жалуется: за границей к его работе интереса заметно больше, чем в Чехии. Дома, по его словам, реакции почти нет. Получается симметричная история. Его записи на чешском проходят мимо большей части мира; мои русские записи — мимо него. А я до недавнего времени вообще не знал, что он существует.
Принято говорить, что интернет стёр расстояния, но с языками он справился гораздо хуже. За привычной мне частью сети наверняка существуют тысячи таких небольших, но любопытных проектов. В одном человек годами строит операционную систему для забытого компьютера. В другом чинит старый станок. В третьем по крупицам собирает историю своего города. Никто ничего не прячет, но найти друг друга мы не можем.
Программа «Parrot»
Для первого компьютера, доступ к которому я получил —
Потом у меня появился «Спектрум» и, хотя под него я программировал довольно много, но программ почти не помню. Вспомнилась только неоконченная игра «Казино», которую мы писали двоём с братишкой (точно помню как мы рисовали карты для игры в блэкджек), и программа «Паррот».
«Паррот» («Parrot» — «попугай») умела записывать в память компьютера звук с самодельного микрофона. У «Спектрума» звукового входа не было, но я его
Сжатие, вроде бы, не использовалось — я помню, что память расходовалась очень быстро, при том, что использовалась вся доступная, даже экранная, поэтому меню было в верхней трети экрана.
Полученный звук можно было проиграть и сохранить на кассету («Спектрум» был подключен к кассетному магнитофону «Весна», программы загружались с кассет), откуда потом можно было загрузить его обратно в программу.
Разумеется она тоже не сохранилась, даже изображение, я нарисовал предполагаемый вид, но, думаю, он далёк от оригинала, я, например, совсем не помню как выглядел попугай и какими были в точности пункты меню.
Позже у нас появился
Письма в спектрумовские журналы
Вспоминали сегодня с братишкой за обедом «Спектрум» — первый компьютер, который появился у нас дома и второй, на котором мы
Тогда я делал это вручную, но с тех пор я научился использовать распознавание текста, встроенное в «МакОСь» и решил попробовать посмотреть не упустил ли я
POKES, про которые пишут в этом отрывке, это вызовы команды POKE, встроенной в Бейсик «Спектрума», позволяющей вносить изменения в памяти
Adventureland — текстовый квест 1983 года. Локации рисуются картинкой, к которой даётся текстовое описание. Все команды так же вводятся текстом. Игрушки этого жанра обычно понимали крайне упрощённые англоязычные конструкции вида «глагол», либо «глагол существительное».
Movie — изометрическая аркадная игра 1986 года, где действие происходит в криминальном
«Компаньон» — это клон «Спектрума», который был у нас с братишкой. Отечественная промышленность тогда активно импортозамещала эти компьютеры, внося, как это водится, некие улучшения. В нашем клоне их было два — неизвестного назначения разъём с правого торца и русификация.
Русификация производилась добавлением второго набора символов в неиспользуемые части ПЗУ. Переключение на русский набор и обратно происходило, когда процедура печати встречала в потоке
Прерывание второго рода — это вид аппаратных прерываний. Обычно через него в «Спектруме» делались
Так как ПЗУ в «Спектруме» находится в младших адресах, то
Эти проблемы приходилось чинить самостоятельно. Мы с братишкой читали ассемблерный код, находили использование таких прерываний и подбирали им другой адрес. Либо записывали нужный адрес
Худи «Sinclair ZX Spectrum»
В моём детстве были чрезвычайно распространены клоны британского компьютера «ЗетИкс Спектрум».
Я был настоящим фанатом — знал в нём каждый винтик, умел программировать на его ассемблере и многочисленных бейсиках, знал встроенный «код калькулятора» (программная реализация действий над числами с плавающей точкой). Даже к произвольному телевизору умел подключать (мониторы тогда мало у кого были), была бы схема.
Вчера для смеха купил себе худи «Sinclair ZX Spectrum», сегодня надел. Большинство равнодушно скользит взглядом — молодёжи этот компьютер неизвестен, разве что малочисленным фанатам восьмибитной техники, но где их встретишь?
Зато забавно видеть как расширяются глаза у некоторых дядек из старшего поколения! Они сначала цепляют взглядом логотип и буквы, потом внимательно смотрят мне в лицо и снова переводят взгляд обратно. Прям система
Скриншоты из «ZX-Ревю»
Продолжаю писать про свой «бессонный хакатон».
В комментариях к первой заметке читатель Евгений Суреев посоветовал использовать внутренние средства оболочки электронного журнала, чтобы получать скриншоты. Этот способ существует, но мне он показался чересчур сложным и медленным. Но для очистки совести я сего всё же попробовал.
Получились следующие шаги:
- в эмулятор, кроме виртуального «диска» с журналом подключаем второй пустой диск;
- листаем на нужный экран внутри эмулятора;
- нажимаем в эмуляторе кнопки SS+S;
- переводим в появившемся окне курсор в поле выбора дисковода, пишем там B;
- в этом же окне переводим курсор в поле «Имя файла», пишем туда номер текущей страницы;
- повторяем шаги 2—5 до конца раздела;
- скидываем
куда-то на диск компьютера образ со скриншотами; - при помощи утилиты mctrd достаём из образа скриншоты;
- при помощи утилиты zx-image преобразовываем скриншоты в PNG;
- преобразовываем полученное в JPG, склеиваем с большой файл, закидываем в оболочку;
Весь этот интерактив с браузером (вызвать меню, ввести диск, ввести имя) — довольно долгий,
В общем, кажется слишком много проблем, которые надо решать, причём я ещё не знаю удастся ли их решить хорошо.
А теперь неспеша всё отрефакторим
Несколько дней назад я рассказывал о своём бессоном хакатоне, — ухаживая за дочкой во время её болезни, я особо не спал, а чтобы не умереть от безделья, придумал себе задачу — за ночь изобрести и реализовать способ вытащить из эмулятора спектрумовский электронный журнал «ZX-Ревю».
Способ я придумал, реализовал и выложил на «Гитхаб». Но мозгу задача понравилось, не могу остановиться и перестать думать о том как всё переделать. Уже начал накидывать новый прототип. Выкладывать целиком пока не буду, там не готово,
Первое, что мне хотелось бы сделать — избавиться от привязки к браузеру. В прошлой реализации я просто активизировал «Сафари», после чего считал, что в активном окне открыт нужный мне эмулятор. Я подумал, что хорошо бы посмотреть какие у нас запущены браузеры и проверить открыто ли
Так как я делаю всё под «Мак», программировать решил на «ЭплСкрипте» — так проще всего.
on is_running(appName)
tell application "System Events" to (name of processes) contains appName
end is_running
set browsers to {"Safari", "Chrome", "Opera", "Firefox", "Edge", "Yandex"}
repeat with browser in browsers
if is_running(browser) then
tell application browser
if exists window "ZX Spectrum online emulator" then
log browser
activate
exit repeat
end if
end tell
end if
end repeatЧто тут происходит? Я перебираю все известные мне браузеры по имени, ищу какие из них запущены, в них смотрю — называется ли активное окно «ZX Spectrum online emulator», если да, остаюсь в нём, сообщая наружу какой из браузеров найден.
Можно было бы ещё перебрать окна каждого из браузеров, но есть опасность остановиться не в том эмуляторе — мало ли, вдруг у человека несколько запущено. Сделать несложно, но кажется это может добавить проблем.
Так как основная оболочка у меня на «Баше», осталось
BROWSER=$(osascript <<BROWSERS 2>&1
# … тут программа на «ЭплСкрипте»
BROWSERS
)В итоге, в переменной $BROWSER будет лежать имя браузера или пусто, если подходящий не найден.
Перенаправление потока 2>&1 необходимо, так как команда log «ЭплСкрипта» выведет имя браузера в поток для ошибок, а конструкция $( … ) ждёт его в стандартном выводе.
ZX-Ревю 11 и 12 за 1997 год
В результате своего хакатона я сконвертировал в формат HTML совмещённый номер 11 и 12 за 1997 год электронного журнала «ZX-Ревю». Результат захостил на «Гитхабе», можно посмотреть что получилось.
Вся навигация — курсором мыши, на пункты меню можно щёлкать, текст прокручивается (полосы прокрутки не видно, так как в оригинале её тоже нет).
Совершенно без сил отправляюсь почивать.
Бессонный хакатон
Думаю
А тут дочка после ветрянки подхватила
В итоге, было проще не спать, чем спать вот так урывками, но просто так без сна листать ленты социальных сетей скучно, и я надумал устроить себе хакатон.
Условия — до рассвета решить
В момент этого решения я как раз долистал
Некоторые из них я тогда не смог посмотреть, так как они были в виде программ для «Спектрума» — издательство пыталось перейти на более прогрессивный формат электронного журнала.
Так я и определился с целью: выковырять содержимое этих журналов наружу, чтобы их можно было смотреть на моём ноутбуке не только в эмуляторе.
Для начала я поискал чем можно расковырять формат, в котором распространяется журнал. Утилита нашлась быстро и я даже поправил в ней небольшой баг — она не собиралась под «МакОС».
Изучение расковырянного содержимого принесло одно расстройство — внутри оказалось бинарное представление программы на Бейсике и несколько файлов неизвестного формата. Судя по тому как отображается журнал в эмуляторе, формат не текстовый. Вряд ли я бы справился с его обратным инжинирингом за ночь.
Поэтому я решил попробовать другую идею — сделать автоматическую скриншотилку, которая сдирала бы содержимое экрана эмулятора и собирала бы из него длинный графический файл. Так как у журнала двухуровневое меню, файлов должно образоваться несколько, а всю интерактивщину я решить сделать в обычном HTML и CSS.
В итоге получился набор инструментов из двух файлов на смеси bash и PHP.
Первый, make_screenshots скриншотит эмулятор, вырезает оттуда экран «Спектрума», жмёт на кнопку «вниз», заботится о том, чтобы экраны не дублировались и понимает когда больше не удаётся пролистнуть. Многие вещи там захардкожены — например, задержки, положение экрана эмулятора и кнопки на виртуальной клавиатуре.
Второй, convert_to_jpegs превращает полученный набор скриншотов в файлы JPEG. Во множественном числе, потому что оказалось, что максимальная высота файла JPEG — 65535 пикселей. В такую высоту у меня всё не влезало, поэтому пришлось разбивать получающуюся простыню два файла. Вообще, можно было бы использовать PNG, там такого ограничения нет, но он в таком размере очень сильно нагружает браузер.
Потом я эти скриншоты уже руками обверстал в HTML и планирую результат тоже положить на «Гитхаб», как только у меня закончится процесс оптимизации JPEG. Он очень долгий, но овчинка выделки стоит — около 20—25% экономии, а файлы там большие — по несколько мегабайт.
Как будет готово, напишу про это отдельный небольшой пост.
Трёхдюймовые дискеты
Несмотря на то, что с выставочными площадями сейчас у нашего музея вычислительной техники пока не ладится, иногда докупаю в него
В этот раз приобрёл довольно экзотические трёхдюймовые дискеты, которые не следует путать со многим известными
Использовались они в компьютерах Amstrad CPC, Amstrad PCW, Tatung Einstein, Sega
Такие дискеты обходились дороже, чем стандартные
Кроме того, ранние модели дисководов не умели читать сразу с двух сторон — дискеты во время использования приходилось вынимать и переворачивать.
Но несмотря на эти недостатки, компания довольно активно их продвигала вместе с продажей своей продукции — одних только компьютеров Amstad CPC было продано более трёх миллионов штук.
Загрузка на «Спектруме»
Примерно три года моего детства были отданы компьютеру «Спектрум», с ним я проводил подавляющую часть своего свободного времени — играл, программировал, перепаивал. Игры хранились на обычных аудиокассетах (позже появились модели с дисководами, но не у меня) и средняя игра загружалась около пяти минут.
Мощи́ у компьютера хватало лишь на небольшое разрешение 256×192, пиксели были по современным меркам чудовищной величины и чтобы их ещё больше не растягивать, но сделать экран зрительно больше, создатели «Спектрума» сделали вокруг экрана специальную одноцветную область «бордюра» — используя
Если менять цвета достаточно быстро, в области бордюра появлялись разноцветные полосы — развёртка не поспевала за обновлением видопамяти. Встроенное ПО использовало этот эффект, чтобы оживлять процесс загрузки — пять минут можно было пялиться не только на заставку игры, но и на разноцветные полосы.
Разработчики игр и скучающие хакеры приделывали к играм собственный загрузчик, который после старта брал на себя процесс дальнейшей загрузки и менял цвета полос, их количество, ширину и прочее. Реже встречались такие, которые умели
Это забытый сейчас уже вид искусства, требовавший от создателя, как фантазии, так и мастерства программирования на ассемблере
Мы с братишкой тоже поучаствовали в общем безумии — приделали к игре «Ливингстон, я полагаю?», которая на скриншоте, загрузчик собственного изготовления, помню моя была идея и графика, а братишка больше программировал.
Не помню трогали ли мы область бордюра, скорее да, чем нет, но что точно помню — мы тогда сделали загрузку заставки «змейкой», а после подключалась анимация — Ливингстон в гамаке качал ножкой, а птица (не помню какая из двух) махала крыльями.
Недавно разговаривали с братишкой на эту тему, с удовольствием вспоминали то время.
Любопытно было бы взглянуть на тот загрузчик сейчас, но боюсь очень мало шансов, что
Как появился первый отечественный «Спектрум»
«Спектрум» (ZX Spectrum) — это компьютер, с которым связано три года моей жизни, несмотря на то, что настальгии по нему давно нет, всё равно иногда интересно узнать
Статья интересна, помимо самой истории, описанием (хоть и без деталей) как вообще клонировалась тогда такая техника. Например:
Был такой Женя,
где-то он имел контакты.Кто-то из иностранных студентов привез фирменный Спектрум сюда, в ОКБ. Этот Женя контактировал с Натоптой Евгением Евгеньевичем, который, увидев этот компьютер, попросил Женю взять его себе домой поиграться… Мы берем с работы99-й осциллограф, тащим его туда и буквально проходим по всем ножкам, зарисовываем осциллограммы этой ULA’шки. Кроме того, у нас была информация по структуре программного обеспечения: буквально был исписан один листок.Еще мы считали информацию из ROM компьютера. И начали работать. Евгений Евгеньевич Натопта занимался программным обеспечением, а я, молодой еще тогда специалист, — конкретно железом. Собственно разработкой. По осцилограммам восстанавливал схему. (…)
Это было недолго. Месяц максимум.
Первый отечественный клон появился во Львове, а «разломали» его в ОКБ Львовского Политехнического института.
ZX Recoloring
К дню рождения «Спектрума» на «Хабре» был анонсирован интересный проект — ZX Recoloring. Идея простая до зевоты: эмуляторы «Спектрума» существуют для чего угодно, кроме, разве что, кофеварок, игр для «Спектрума» — вагон, есть просто шедевры, но нюанс: графика, по нынешним временам, просто ужасная.
Автор проекта предлагает накладывать на эмулятор специальный «облагораживатель» графики — создаются два набора спрайтов: «что искать» и «на что заменять». Программа, работающая поверх эмулятора, ищет в кадре знакомые спрайты и заменяет их на спрайты из второго набора. Получается красивая графика без вмешательства в код.
Идея неплохая, но в таком виде годится только для совсем простых игр. Даже если взглянуть на скриншот игры «Everyones a Wally» из моего предыдущего поста, сразу станет видно, что спрайты там пересекаются: справа скамейка перекрывает дерево, а скамейку закрывает фуксиновый мужик.
Если же попытаться заменять спрайты по неполному совпадению, расставлять приоритеты (мужик перекрывает скамейку, скамейка мужика — нет), то тут такой цирк получается, что игру проще переписать, чем оттестировать все случаи (что если

Или вот взять одну из моих любимых игр на «Спектруме» — «Snoopy & Peanuts» (на иллюстрации): плинтус на заднем фоне,
Хотя, в эту игру я и сейчас, не морщась, могу сыграть.
Кроссплатформенная среда: ZX Spectrum
Прочитав в «Википедии», что ZX Spectrum — самая эмулируемая платформа, я подумал — а есть ли эмулятор на JavaScript? Скорости должно уже хватать (там процессор Zilog Z80, 3,5 МГц и видеопамять несколько килобайт). Оказывается, есть, называется JSSpeccy. Можно посмотреть online и даже запустить 10 игр.
«Яве» и прочим кроссплатформенным языкам такая переносимость и не снилась.

Кстати, очень хорошая возможность потестировать браузеры на производительность (там 644 килобайта ядрённого
Спектруму 27 лет!
«Спектрум» был вторым компьютером в моей жизни (первым был «Радио
Всё утро ностальгируя, я нашёл на одном сайте все (!) выпуски «ZX Форум» и «ZX Ревю» и в первом же номере «ZX Форума» наткнулся на свою фамилию:
Но особенно приятны нам письма, в которых читатели делятся своими несколькими первыми (но, конечно же, не последними) POKES, найденными самостоятельно после того, как они начали активно изучать машинный код. Большинство из них пишут, что им очень помогли в работе наши книги по программированию в машинных кодах. Это Селифонтов Михаил из г. Углич Ярославской обл., Степанищев Е.В. из Лениногорска […]
Правда, я писал, кажется, в «ZX Ревю», а не «ZX Форум» и, к тому же, писал вместе с братишкой. Надо будет пошарить по архиву
Добавлено 23.04.2009 11:27: вот ещё:
ИФК: Степанищев Е.В. из г. Лениногорска (Татарстан) пишет: КОРР: Недавно обнаружил неприятную особенность
MONS-3: попробуйте выполнить в пошаговом режиме команду HALT — и он зависнет.
Добавлено 23.04.2009 11:32: И ещё:
А пока приводим информацию Степанищева Е.В. из Лениногорска (Татарстан) — результаты «лечения» игр, не идущих на «Компаньоне» всё по той же причине — неправильная обработка прерываний второго рода. […]
«Компаньон» — это как раз тот клон «Спектрума», который был у нас с братишкой.
Добавлено 23.04.2009 13:13: Из «ZX Ревю» №3 за 1995 год:
Таинственный любитель адвентюр и творчества Булгакова, проживающий в Воркуте, и подписавший свое письмо так: «FLAT 50, MESSIR», отвечает на ряд вопросов из «Перекрестка». В частности, Степанищеву Е.В. из Лениногорска: В ADVENTURELAND, чтобы избежать проблем с медведем, надо дать команду HOLLO (кричать).