Письма в спектрумовские журналы
Вспоминали сегодня с братишкой за обедом «Спектрум» — первый компьютер, который появился у нас дома и второй, на котором мы когда-либо программировали. Вспомнили, как писали в тематические журналы, я даже как-то пытался найти наши письма в интернет-архивах.
Тогда я делал это вручную, но с тех пор я научился использовать распознавание текста, встроенное в «МакОСь» и решил попробовать посмотреть не упустил ли я что-нибудь. Написал скрипт, который перегоняет скачанные мной журналы, посвящённые «Спектруму», в картинки, потом преобразует их в текст и ищет мою фамилию.
POKES, про которые пишут в этом отрывке, это вызовы команды POKE, встроенной в Бейсик «Спектрума», позволяющей вносить изменения в памяти по какому-либо адресу. Таким образом в код игр и других программ вносились правки.
Adventureland — текстовый квест 1983 года. Локации рисуются картинкой, к которой даётся текстовое описание. Все команды так же вводятся текстом. Игрушки этого жанра обычно понимали крайне упрощённые англоязычные конструкции вида «глагол», либо «глагол существительное».
Movie — изометрическая аркадная игра 1986 года, где действие происходит в криминальном Нью-Йорке 1930-х годов.
«Компаньон» — это клон «Спектрума», который был у нас с братишкой. Отечественная промышленность тогда активно импортозамещала эти компьютеры, внося, как это водится, некие улучшения. В нашем клоне их было два — неизвестного назначения разъём с правого торца и русификация.
Русификация производилась добавлением второго набора символов в неиспользуемые части ПЗУ. Переключение на русский набор и обратно происходило, когда процедура печати встречала в потоке какой-то символ, код которого я уже не помню.
Прерывание второго рода — это вид аппаратных прерываний. Обычно через него в «Спектруме» делались какие-нибудь фоновые процессы, типа проигрывания звука в играх. Адрес, куда передаётся управление при прерывании вычислялся достаточно сложно: старший байт адреса брался из регистра I, младший — из какого-то порта (по умолчанию там было число 255), по этому адресу читался адрес на который уже и передавалось управление.
Так как ПЗУ в «Спектруме» находится в младших адресах, то какие-то значения регистра I приводили к чтению адреса из ПЗУ. Большинство авторов игр знать не знали, где-то в России в ПЗУ вносят какие-то изменения и считали его неизменным (оно действительно было постоянным и не обновлялось). Поэтому в играх нередко использовались адреса из ПЗУ для адресации прерываний второго рода, что приводило к проблемам в российских клонах.
Эти проблемы приходилось чинить самостоятельно. Мы с братишкой читали ассемблерный код, находили использование таких прерываний и подбирали им другой адрес. Либо записывали нужный адрес куда-то в ОЗУ (так сделано для игры «Саботёр 2», пробелы там нужны, так как адрес записывается в область для встроенного Бейсика).
MONS-3 — ассемблерный отладчик, почему он вис, понятно, в общем-то: команда ассемблера HALT переводит процессор в состояние паузы до наступления прерывания. Так как во время выполнения MONS-3 прерыванию поступить неоткуда, программа зависала навсегда, нужно было перезагружаться. Думаю, в следующих версии отладчик просто игнорировал эту команду, поэтому и не зависал.