спектрум

«Окошки» на «Спектруме»

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

Недавно я нашёл подтверждение этой, в общем-то, очевидной мысли.

Несколько месяцев назад волею судеб я попал в небольшую чешскоязычную группу «8 bit Windows». Она закрытая, поэтому ссылку не привожу.

По-чешки я не читаю, но тут переводчик поначалу и не понадобился. Меня заинтересовали картинки.

Автор группы Мобисек Марек на смеси Бейсика с ассемблером делает что-то типа «Виндоуса» под  «Спектрум» и мастерит собственную периферию. Из сделанного в железе больше всего гордится контроллером на четыре дисковода.

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

Открытый компьютер «Дидактик М»: зелёная печатная плата с электронными компонентами и процессором Зет-80.
«Дидактик М», принесённый Мареку на ремонт. Фото Мобисека Марека

Для эксприментов у него есть два компьютера: «Дидактик М» и «Дидактик Компакт». Оба — чехословацкие клоны компьютера «Спектрум». Изредка в группе появляются «Зет-Икс-81», «Дидактик Гама» и другая близкая техника, но чаще всего он пишет про свою спектрумовскую «Винду».

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

Судя по фоткам в группе, внешний вид системы менялся. Она успела побыть «Виндоус 2.0», затем 3.1 и 2000; были ещё ветки «Профессионал» и «Икс-Пи». Свежая версия называется «Виндоус Экспириенс», а внутреннее имя её ядра — «Диамант».

На экране компьютера «Дидактик Компакт» открыто меню «Пуск» системы «МобиСофт Виндоус Икс-Пи».
Меню «Пуск» системы «МобиСофт Виндоус Икс-Пи». Фото Мобисека Марека

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

Рабочий стол системы «МобиСофт Виндоус Икс-Пи» для компьютера на Зет-80: значки, кнопка «Пуск», окна и часы.
Рабочий стол системы «МобиСофт Виндоус Икс-Пи». Фото Мобисека Марека

В спецификации написано, что для запуска хватит процессора «Z-80» на 3,5 МГц и 48 КБ памяти. Килобайт, не мегабайт! Памяти у «Спектрума» было совсем мало, но позже появились клоны, где были более солидные объёмы.В перспективе он обещает поддержку конфигураций до 512 КБ, такие расширенные клоны выпускались и у нас в России.

Размер ядра — около 20 КБ. Примерно 40% кода написано на расширенном Бейсике, остальные 60% — на ассемблере. Предусмотрено и что-то вроде многозадачности: две обычные программы плюс одна маленькая встроенная.

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

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

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

Два наброска устройства памяти компьютера на Зет-80: ядро, часы, системная логика, диспетчер задач, приложения и свободное место.
Два наброска устройства памяти и защиты. Рисунок Мобисека Марека

Из-за отсутствия аппаратной защиты, пишет Марек, от программиста требуются порядок, логика и дисциплина. Забыла программа что-нибудь освободить? Вызвала несуществующую процедуру? Тогда система должна её остановить. Если получится — покажет сообщение или тот самый синий экран, а потом вернётся к жизни. Но попадание в жизненно важные места системы закончится обычной перезагрузкой.

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

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

На экране старого телевизора открыто несколько программ системы «МобиСофт Виндоус Икс-Пи» и переключатель задач.
Несколько работающих программ и переключатель задач. Фото Мобисека Марека

Группа, которую ведёт Марек довольно активна, я нечасто захожу, не чаще раза в неделю, за это время как раз накапливается что почитать через переводчик или поразглядывать.

Последняя заметка — сегодняшняя. В ней Марек выложил новую прошивку для компьютера «Дидактик Компакт»: исправил старую ошибку обработки немаскируемого прерывания, убрал неприятный звук после сброса и встроил «М-ДОС 2.2».

В группе всего восемьдесят участников, и почти все записи делает сам Марек. Так что скорее это не столько группа, сколько личный технический блокнот — почти как мой сайт. Только язык другой и проект один, зато огромный. В ленте не одни отчёты, заметки разные, но плюс-минус по одной теме. Сегодня Марек чинит очередной «Дидактик», завтра показывает редкую микросхему или схему. Иногда выкладывает экранную заставку, иногда ругает современную технику.

В одном из постов Марек жалуется: за границей к его работе интереса заметно больше, чем в Чехии. Дома, по его словам, реакции почти нет. Получается симметричная история. Его записи на чешском проходят мимо большей части мира; мои русские записи — мимо него. А я до недавнего времени вообще не знал, что он существует.

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

23 комментария

Программа «Parrot»

Как-то ехали с дочкой в такси и разговаривали о её программах на «Скретче». Дочка спросила — а не мог бы я показать мои детские программы. Я ответил, что они не сохранились, а сам задумался — а чего я там вообще писал-то?

Для первого компьютера, доступ к которому я получил — «Радио-86РК», я писал какой-то простенький текстовый редактор и интерпретатор машины Тьюринга. Потом, через много лет, понимание как работает эта машина пригодилась мне на курсе Дискретной математики в Университете. Больше программ под него не помню, хотя они точно были.

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

«Паррот» («Parrot» — «попугай») умела записывать в память компьютера звук с самодельного микрофона. У «Спектрума» звукового входа не было, но я его как-то подключил — я тогда довольно неплохо знал как он устроен на уровне «железа».

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

Полученный звук можно было проиграть и сохранить на кассету («Спектрум» был подключен к кассетному магнитофону «Весна», программы загружались с кассет), откуда потом можно было загрузить его обратно в программу.

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

Позже у нас появился Интел-совместимый компьютер, но я уже ребёнком не был.

Пиксельный попугай и меню программы PARROT с пунктами: 1) RECORD, 2) PLAY, 3) SAVE FILE, 4) LOAD FILE, 5) QUIT.
Очень условно изображённая программа «Parrot»

4 комментария

Письма в спектрумовские журналы

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

Тогда я делал это вручную, но с тех пор я научился использовать распознавание текста, встроенное в «МакОСь» и решил попробовать посмотреть не упустил ли я что-нибудь. Написал скрипт, который перегоняет скачанные мной журналы, посвящённые «Спектруму», в картинки, потом преобразует их в текст и ищет мою фамилию.

Список читателей, приславших объёмные коллекции POKES и благодарственных писем за книги по машинным кодам, с указанием имён и городов.
«ZX-Форум», №1, Москва, 1994, страница 122

POKES, про которые пишут в этом отрывке, это вызовы команды POKE, встроенной в Бейсик «Спектрума», позволяющей вносить изменения в памяти по какому-либо адресу. Таким образом в код игр и других программ вносились правки.

Письмо Е.В. Степанишева (Лениногорск) о прохождении игры ADVENTURELAMD: трудности с медведем в THRONE-ROOM и загадками в MOVIE (IMAGINE).
«ZX-Ревю», №6, 1994, Москва, страница 67
Ответы на вопросы из «Перекрестка» от таинственного любителя адвентюр и Булгакова: в ADVENTURELAND — команда HOLLO, в MOVIE — найти девушку, у рыцаря с попугаем — OPEN.
«ZX-Ревю», №3, 1995, Москва, страница 60

Adventureland — текстовый квест 1983 года. Локации рисуются картинкой, к которой даётся текстовое описание. Все команды так же вводятся текстом. Игрушки этого жанра обычно понимали крайне упрощённые англоязычные конструкции вида «глагол», либо «глагол существительное».

Movie — изометрическая аркадная игра 1986 года, где действие происходит в криминальном Нью-Йорке 1930-х годов.

Степанишева Е.В. (Лениногорск): результаты «лечения» игр на «Компаньоне» из-за ошибок обработки прерываний 2 рода.
«ZX-Ревю», №4, 1994, Москва, страница 51

«Компаньон» — это клон «Спектрума», который был у нас с братишкой. Отечественная промышленность тогда активно импортозамещала эти компьютеры, внося, как это водится, некие улучшения. В нашем клоне их было два — неизвестного назначения разъём с правого торца и русификация.

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

Прерывание второго рода — это вид аппаратных прерываний. Обычно через него в «Спектруме» делались какие-нибудь фоновые процессы, типа проигрывания звука в играх. Адрес, куда передаётся управление при прерывании вычислялся достаточно сложно: старший байт адреса брался из регистра I, младший — из какого-то порта (по умолчанию там было число 255), по этому адресу читался адрес на который уже и передавалось управление.

Так как ПЗУ в «Спектруме» находится в младших адресах, то какие-то значения регистра I приводили к чтению адреса из ПЗУ. Большинство авторов игр знать не знали, где-то в России в ПЗУ вносят какие-то изменения и считали его неизменным (оно действительно было постоянным и не обновлялось). Поэтому в играх нередко использовались адреса из ПЗУ для адресации прерываний второго рода, что приводило к проблемам в российских клонах.

Эти проблемы приходилось чинить самостоятельно. Мы с братишкой читали ассемблерный код, находили использование таких прерываний и подбирали им другой адрес. Либо записывали нужный адрес куда-то в ОЗУ (так сделано для игры «Саботёр 2», пробелы там нужны, так как адрес записывается в область для встроенного Бейсика).

Статья «Старые» программы: обсуждение багов MONS-3, критика старых версий MONS/GENS, защита классики и упоминание TASM 128.
ZX-Ревю, №6, 1994, Москва, страница 56

MONS-3 — ассемблерный отладчик, почему он вис, понятно, в общем-то: команда ассемблера HALT переводит процессор в состояние паузы до наступления прерывания. Так как во время выполнения MONS-3 прерыванию поступить неоткуда, программа зависала навсегда, нужно было перезагружаться. Думаю, в следующих версии отладчик просто игнорировал эту команду, поэтому и не зависал.

3 комментария

Худи «Sinclair ZX Spectrum»

В моём детстве были чрезвычайно распространены клоны британского компьютера «ЗетИкс Спектрум».

Я был настоящим фанатом — знал в нём каждый винтик, умел программировать на его ассемблере и многочисленных бейсиках, знал встроенный «код калькулятора» (программная реализация действий над числами с плавающей точкой). Даже к произвольному телевизору умел подключать (мониторы тогда мало у кого были), была бы схема.

Тёмно-синяя толстовка с капюшоном на деревянном полу; на груди белый логотип «Sinclair ZX Spectrum» и радужная полоса.
Худи «Sinclair ZX Spectrum» — клоны этого компьютера были чрезвычайно распространены в моём детстве

Вчера для смеха купил себе худи «Sinclair ZX Spectrum», сегодня надел. Большинство равнодушно скользит взглядом — молодёжи этот компьютер неизвестен, разве что малочисленным фанатам восьмибитной техники, но где их встретишь?

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

4 комментария

Скриншоты из «ZX-Ревю»

Продолжаю писать про свой «бессонный хакатон».

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

Скриншот меню программы для ZX Spectrum: пункты «Полоса прокрутки», «Изменить цвет текста», подсказки F6–F12, заголовок «21 ПРИ ПРОСМОТРЕ ВНЕШНЕГО РАЗДЕЛА...
Получившийся, в результате проделанных ниже шагов, скриншот

Получились следующие шаги:

  1. в эмулятор, кроме виртуального «диска» с журналом подключаем второй пустой диск;
  2. листаем на нужный экран внутри эмулятора;
  3. нажимаем в эмуляторе кнопки SS+S;
  4. переводим в появившемся окне курсор в поле выбора дисковода, пишем там B;
  5. в этом же окне переводим курсор в поле «Имя файла», пишем туда номер текущей страницы;
  6. повторяем шаги 2—5 до конца раздела;
Скриншот интерфейса с диалоговым окном «Запись экрана на диск», где указан дисковод B и имя файла Screen02; на фоне — меню с настройками и инструкциями по клавишам.
Меню сохранения скриншота в файл внутри эмулятора, нужно выбрать дисковод и имя файла
  1. скидываем куда-то на диск компьютера образ со скриншотами;
  2. при помощи утилиты mctrd достаём из образа скриншоты;
  3. при помощи утилиты zx-image преобразовываем скриншоты в PNG;
  4. преобразовываем полученное в JPG, склеиваем с большой файл, закидываем в оболочку;

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

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

6 комментариев

А теперь неспеша всё отрефакторим

Несколько дней назад я рассказывал о своём бессоном хакатоне, — ухаживая за дочкой во время её болезни, я особо не спал, а чтобы не умереть от безделья, придумал себе задачу — за ночь изобрести и реализовать способ вытащить из эмулятора спектрумовский электронный журнал «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-Ревю». Результат захостил на «Гитхабе», можно посмотреть что получилось.

Вся навигация — курсором мыши, на пункты меню можно щёлкать, текст прокручивается (полосы прокрутки не видно, так как в оригинале её тоже нет).

Совершенно без сил отправляюсь почивать.

Оставить комментарий

Бессонный хакатон

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

А тут дочка после ветрянки подхватила какое-то ОРЗ с высокой температурой и у меня выдались две бессонные ночи — жена на конференции, мы с дочкой вдвоём. Из-за температуры она плохо спала, а я просыпался, потому что она меня часто будила.

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

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

В момент этого решения я как раз долистал в какой-то из лент до ностальгических воспоминаний о «Спектруме» и вспомнил как набрёл когда-то на архив журналов «ZX-Ревю» и «ZX-Форум». Когда-то в детстве, когда у меня у самого был «Спектрум», я их выписывал.

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

Так я и определился с целью: выковырять содержимое этих журналов наружу, чтобы их можно было смотреть на моём ноутбуке не только в эмуляторе.

Обложка журнала ZX-РЕВЮ №11-12 за 1997 год с перечнем статей: описание оболочки, путеводитель, новые программы, форум, советы экспертов и каталог.
Обложка электронного журнала «ZX-Ревю» №№ 11, 12 за 1997-й год

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

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

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

В итоге получился набор инструментов из двух файлов на смеси bash и PHP.

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

Второй, convert_to_jpegs превращает полученный набор скриншотов в файлы JPEG. Во множественном числе, потому что оказалось, что максимальная высота файла JPEG — 65535 пикселей. В такую высоту у меня всё не влезало, поэтому пришлось разбивать получающуюся простыню два файла. Вообще, можно было бы использовать PNG, там такого ограничения нет, но он в таком размере очень сильно нагружает браузер.

Потом я эти скриншоты уже руками обверстал в HTML и планирую результат тоже положить на «Гитхаб», как только у меня закончится процесс оптимизации JPEG. Он очень долгий, но овчинка выделки стоит — около 20—25% экономии, а файлы там большие — по несколько мегабайт.

Как будет готово, напишу про это отдельный небольшой пост.

6 комментариев

Трёхдюймовые дискеты

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

Компакт-диск Amsoft в прозрачном футляре с надписями «For Double Head Drive», «Compact Floppy Disc» и красной наклейкой «28» лежит на белой бумаге и серой плетёной поверхности.
Трёхдюймовая дискета, производства компании «Amsoft», купленная на ауционе

В этот раз приобрёл довольно экзотические трёхдюймовые дискеты, которые не следует путать со многим известными 3,5-дюймовыми. Трёхдюймовые были разработаны компанией «Amstrad» в восьмидесятых годах, имели прямоугольную форму (100×80×5 мм) и ёмкость от 125 до 720 килобайт.

Использовались они в компьютерах Amstrad CPC, Amstrad PCW, Tatung Einstein, Sega SF-7000, Galivan SC и ZX Spectrum +3 — последний является вершиной линейки «спектрумов», некогда очень распространённой в нашей стране.

Такие дискеты обходились дороже, чем стандартные 3,5-дюймовые, при меньшем объёме памяти — фактически сам магнитный диск занимал внутри дискеты менее половины места, остальное было использовано под механизмы герметизации и защиты носителя.

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

Но несмотря на эти недостатки, компания довольно активно их продвигала вместе с продажей своей продукции — одних только компьютеров Amstad CPC было продано более трёх миллионов штук.

2 комментария

Загрузка на «Спектруме»

Пиксельная обложка игры «LIVINGSTONE SUPONGO» (1987, OPERA soft): человек в гамаке между пальмами на фоне хижин и облаков.
Игра «Ливингстон, я полагаю?», созданная испанскими разработчиками в ноябре 1986 года, выпускалась и версия под ДОС

Примерно три года моего детства были отданы компьютеру «Спектрум», с ним я проводил подавляющую часть своего свободного времени — играл, программировал, перепаивал. Игры хранились на обычных аудиокассетах (позже появились модели с дисководами, но не у меня) и средняя игра загружалась около пяти минут.

Мощи́ у компьютера хватало лишь на небольшое разрешение 256×192, пиксели были по современным меркам чудовищной величины и чтобы их ещё больше не растягивать, но сделать экран зрительно больше, создатели «Спектрума» сделали вокруг экрана специальную одноцветную область «бордюра» — используя 254-й порт ей можно было задавать один из небольшого набора цветов.

Если менять цвета достаточно быстро, в области бордюра появлялись разноцветные полосы — развёртка не поспевала за обновлением видопамяти. Встроенное ПО использовало этот эффект, чтобы оживлять процесс загрузки — пять минут можно было пялиться не только на заставку игры, но и на разноцветные полосы.

Экран загрузки с текстом: «Loader. Insert tape and press PLAY. To cancel - press BREAK twice» на фоне красно-бирювых полос.
Так выглядел процесс загрузки стандартным загрузчиком

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

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

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

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

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

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

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

11 комментариев

Как появился первый отечественный «Спектрум»

«Спектрум» (ZX Spectrum) — это компьютер, с которым связано три года моей жизни, несмотря на то, что настальгии по нему давно нет, всё равно иногда интересно узнать что-то новое о нём. В шестом номере газеты «Optron» за 10 января 1998 года была, оказывается, такая статья «Так, кто же первый?», о том как появился первый отечественный клон «Спектрума».

Статья интересна, помимо самой истории, описанием (хоть и без деталей) как вообще клонировалась тогда такая техника. Например:

Был такой Женя, где-то он имел контакты. Кто-то из иностранных студентов привез фирменный Спектрум сюда, в ОКБ. Этот Женя контактировал с Натоптой Евгением Евгеньевичем, который, увидев этот компьютер, попросил Женю взять его себе домой поиграться… Мы берем с работы 99-й осциллограф, тащим его туда и буквально проходим по всем ножкам, зарисовываем осциллограммы этой ULA’шки. Кроме того, у нас была информация по структуре программного обеспечения: буквально был исписан один листок.

Еще мы считали информацию из ROM компьютера. И начали работать. Евгений Евгеньевич Натопта занимался программным обеспечением, а  я, молодой еще тогда специалист, — конкретно железом. Собственно разработкой. По осцилограммам восстанавливал схему. (…)

Это было недолго. Месяц максимум.

Первый отечественный клон появился во Львове, а «разломали» его в ОКБ Львовского Политехнического института.

9 комментариев

ZX Recoloring

К дню рождения «Спектрума» на «Хабре» был анонсирован интересный проект — ZX Recoloring. Идея простая до зевоты: эмуляторы «Спектрума» существуют для чего угодно, кроме, разве что, кофеварок, игр для «Спектрума» — вагон, есть просто шедевры, но нюанс: графика, по нынешним временам, просто ужасная.

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

Идея неплохая, но в таком виде годится только для совсем простых игр. Даже если взглянуть на скриншот игры «Everyones a Wally» из моего предыдущего поста, сразу станет видно, что спрайты там пересекаются: справа скамейка перекрывает дерево, а скамейку закрывает фуксиновый мужик.

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

Snoopy (5.46КиБ)

Или вот взять одну из моих любимых игр на «Спектруме» — «Snoopy & Peanuts» (на иллюстрации): плинтус на заднем фоне, какой-то грустный гуманоид закрывает собой окно и кресло, а поверх него стоит Снупи, банка с чем-то стрёмным закрывает собой тумбочку.

Хотя, в эту игру я и сейчас, не морщась, могу сыграть.

4 комментария

Кроссплатформенная среда: ZX Spectrum

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

«Яве» и прочим кроссплатформенным языкам такая переносимость и не снилась.

Everyones a Wally (11.38КиБ)

Кстати, очень хорошая возможность потестировать браузеры на производительность (там 644 килобайта ядрённого JS-кода). Лучше всех себя показал Safari4 beta 528.16, похуже — Opera 10 alpha 1413, ещё хуже — FireFox 3.0.9, совсем плохо — Google Chrome 1.0.154.53. Под Internet Explorer эмулятор не пошёл (JSSpeccy заточен под Canvas). К сожалению, последней беты FireFox 3.5 у меня нет, но можете попробовать сами потестировать.

18 комментариев

Спектруму 27 лет!

«Спектрум» был вторым компьютером в моей жизни (первым был «Радио РК-86»), но первым и единственным, который я знал от и до — полностью всю программную и аппаратную часть. Сегодня компьютерам этой серии исполняется 27 лет.

Всё утро ностальгируя, я нашёл на одном сайте все (!) выпуски «ZX Форум» и «ZX Ревю» и в первом же номере «ZX Форума» наткнулся на свою фамилию:

Но  особенно приятны нам письма, в  которых читатели делятся своими несколькими первыми (но, конечно  же, не  последними) POKES, найденными самостоятельно после того, как они начали активно изучать машинный код. Большинство из них пишут, что им очень помогли в работе наши книги по  программированию в  машинных кодах. Это Селифонтов Михаил из  г. Углич Ярославской обл., Степанищев Е.В. из  Лениногорска […]

Правда, я писал, кажется, в «ZX Ревю», а не «ZX Форум» и, к тому же, писал вместе с братишкой. Надо будет пошарить по архиву 94-го года, попробовать найти что мы там отсылали. Кажется, чинили игры, которые не шли на нашем с ним клоне «Спектрума».

Добавлено 23.04.2009 11:27: вот ещё:

ИФК: Степанищев Е.В. из г. Лениногорска (Татарстан) пишет: КОРР: Недавно обнаружил неприятную особенность MONS-3: попробуйте выполнить в пошаговом режиме команду HALT — и он зависнет.

MONS-3 — это был такой ассемблерный отладчик для «Спектрума».

Добавлено 23.04.2009 11:32: И ещё:

А пока приводим информацию Степанищева Е.В. из Лениногорска (Татарстан) — результаты «лечения» игр, не идущих на «Компаньоне» всё по той же причине — неправильная обработка прерываний второго рода. […]

«Компаньон» — это как раз тот клон «Спектрума», который был у нас с братишкой.

Добавлено 23.04.2009 13:13: Из «ZX Ревю» №3 за 1995 год:

Таинственный любитель адвентюр и творчества Булгакова, проживающий в Воркуте, и подписавший свое письмо так: «FLAT 50, MESSIR», отвечает на ряд вопросов из  «Перекрестка». В частности, Степанищеву Е.В. из Лениногорска: В ADVENTURELAND, чтобы избежать проблем с  медведем, надо дать команду HOLLO (кричать).

18 комментариев