Интересная статья Ванюшы:
Иван Рощин, Москва
E-mail:
bestview@mtu-net.ru
WWW:
http://www.ivr.da.ru
ZX Spectrum сегодня
(Программист 8/2001)
Да, вы всё правильно прочитали; именно ZX Spectrum. Вы наверняка что-то уже слышали об этом замечательном компьютере; а может быть, именно на нём вам довелось написать свою первую программу.
В наше время, когда самые современные вычислительные системы считаются устаревшими через считанные месяцы, ZX Spectrum — настоящий долгожитель: с момента его появления на свет прошло почти два десятка лет, но им продолжают пользоваться — и не где-нибудь, а главным образом в России и странах СНГ.
1982—2001: коротко о главном
Родина ZX Spectrum — Англия. Именно там, в апреле 1982 года, компьютер, разрабатывавшийся компанией Sinclair Research LTD под кодовым названием ZX82, был впервые представлен публике. Технические характеристики даже по тем временам не очень впечатляли (процессор Z80 3,5 МГц; 16 КБ ROM; 16 или 48 КБ RAM; видео 256*192 16 цветов; подключается к телевизору; накопитель на магнитной ленте). Зато ZX Spectrum был дёшев, и быстро завоевал рынок: только в Англии уровень продаж достигал 12—15 тысяч компьютеров в неделю, а кроме этого, они продавались более чем в 30 странах по всему миру.
В конце 1985 года была выпущена более совершенная модель, ZX Spectrum 128: с трёхканальным музыкальным сопроцессором, увеличенной до 128 КБ памятью (в которой появилась вторая видеостраница) и улучшенным интерпретатором Бейсика.
В конце 80-х — начале 90-х в СССР началось массовое производство Spectrum-совместимых компьютеров. Далее, говоря о ZX Spectrum, я буду иметь в виду и их (кстати, совместимых Spectrum’ов гораздо больше, чем фирменных; у меня самого на столе стоит Пентагон-128 — одна из совместимых моделей…).
Постепенно компьютеры стали оснащать дисководами, в некоторых моделях появились и другие дополнительные возможности: больший размер ОЗУ, совместимость с CP/M, дополнительные графические режимы, возможность работы с винчестером и модемом… Некоторые модели Spectrum-совместимых компьютеров производятся и сейчас. Также разработаны и продолжают разрабатываться многочисленные схемы доработок уже существующих компьютеров — позволяющие увеличить память, быстродействие, графические и музыкальные возможности, подключить различные внешние устройства.
Вот таким ZX Spectrum вошёл в третье тысячелетие.
Архитектура
Об архитектуре ZX Spectrum я расскажу довольно кратко, более подробно останавливаясь лишь на особенно интересных деталях.
Процессор. Как уже упоминалось выше, называется он Z80. Разрядность шины данных — 8 бит, шины адреса — 16. Регистры общего назначения 8-разрядные, но есть возможность работы с двумя регистрами как с одним 16-разрядным (регистровая пара). Длины команд — от 1 до 4 байт, время выполнения — от 4 до 23 тактов.
Общение с внешними устройствами происходит посредством портов ввода-вывода. Имеется возможность обработки прерываний двух типов: маскируемых и немаскируемых.
Память. Z80 может непосредственно адресовать лишь 64 КБ памяти. В ZX Spectrum нижние 16 КБ занимает ПЗУ, верхние 48 КБ — ОЗУ. Поддержка большего объёма памяти осуществляется с помощью страничного механизма: память разделена на 16-килобайтные участки — страницы, и можно выбирать, какая из страниц ПЗУ будет подключена в нижние 16 КБ адресного пространства, и какая из страниц ОЗУ — в верхние 16 КБ. В некоторых моделях можно подключать в нижние 16 КБ не ПЗУ, а ОЗУ, что даёт возможность использовать ОС CP/M.
Представление графики. Это, пожалуй, наиболее оригинальная деталь архитектуры ZX Spectrum. 16-цветное изображение 256*192 занимает в памяти меньше семи килобайт! Рассмотрим, как это получается. Изображение хранится в памяти по адресам 4000h—57FFh (область пикселов) и 5800h—5AFFh (область атрибутов). Вторая страница видеопамяти в ZX Spectrum 128 имеет такую же структуру, но расположена в другой странице ОЗУ.
Каждая точка кодируется одним битом в области пикселов. Изображение разбито на знакоместа (8*8 пикселов), каждому из которых соответствует один байт в области атрибутов: там кодируются цвета ink (включённых пикселов) и paper (выключенных пикселов), а также признаки повышенной яркости и мерцания. Таким образом, фактически мы имеем не настоящее цветное изображение, а раскрашенное чёрно-белое.
По краям изображения расположена область одного цвета — бордюр. Дело в том, что ZX Spectrum проектировался с расчётом на подключение к телевизору, а там высоки искажения по краям экрана.
При программировании вывода на экран имеется возможность синхронизации с кадровой разверткой (импульс маскируемого прерывания приходит как раз в момент начала прорисовки очередного кадра), благодаря чему обеспечивается исключительная плавность анимации.
Дисковый интерфейс. Их разработано несколько, но в странах СНГ получил распространение лишь один — Beta Disk. Он позволяет использовать от 1 до 4 дисководов 5,25" или 3,5", и работать с двойной плотностью записи. Основа интерфейса — микроконтроллер ВГ93, выполняющий элементарные операции (позиционирование, чтение/запись сектора…). Операции чтения и записи происходят при непосредственном участии центрального процессора.
Музыкальный сопроцессор (AY8910/12 или YM2149F) — простой трёхканальный FM-синтезатор, имеющий два (в AY8912 — один) двунаправленных 8-разрядных порта ввода-вывода.
Клавиатура — 40 или 58 клавиш, и ничего сколько-нибудь интересного…
Джойстики. К ZX Spectrum могут быть подключены один или два джойстика, состоящих из перемещаемой в четырёх направлениях рукоятки и единственной кнопки.
Мышь. Обычно используют так называемую пассивную мышь, т.е. не генерирующую прерываний (интерфейс Kempston mouse). Её координаты можно прочесть в любой момент времени, и при синхронизации перерисовки курсора мыши с кадровой развёрткой курсор будет двигаться очень плавно (в отличие от PC — там, если приглядеться, видно, что курсор при движении как бы раздваивается).
Программирование
Программы для ZX Spectrum можно писать на Бейсике (его интерпретатор находится в ПЗУ), а также на других языках высокого уровня (Паскаль, C, Лисп, Пролог, Форт…), но они используются весьма редко. Для создания большинства серьёзных программ применяют ассемблер: только так можно добиться небольшого размера программы (ведь память ZX Spectrum невелика, а в ней должно ещё остаться место для данных) и высокой скорости её работы (вспомним о низком быстродействии).
Как пишут программы на ассемблере? Обычно для этого используется интегрированная среда: редактор, компилятор (далее я буду называть всё это одним словом ассемблер) и отладчик.
Различных ассемблеров существует более десятка. Одно из важных требований к ним — чтобы скорость компиляции была как можно выше, а расход памяти на хранение исходного текста компилируемой программы — как можно меньше. Для этого исходный текст обычно хранится в специальном токенизированном формате, за счёт чего его объём сокращается в 2—3 раза.
Отладка программ производится, естественно, с помощью отладчика. Обычно используется отладчик STS, который может применяться как вместе с ассемблером (тогда при отладке можно видеть вместо числовых значений меток символьные), так и отдельно (если, скажем, для ассемблера уже не хватает места в памяти).
На рис. 1. вы можете видеть исходный текст простой программы очистки экрана, набранный в ассемблере ZX ASM, а на рис. 2 показано, как эта программа, будучи уже откомпилированной, выглядит в отладчике STS.
Рис. 1
Рис. 2
Если в компьютере установлено ПЗУ TURBO-90 — становится возможным использовать имеющийся в нём отладчик, который вызывается в любое время с помощью специальной кнопки, генерирующей немаскируемое прерывание. Более мощный теневой отладчик имеется в Spectrum-совместимом компьютере Scorpion.
Разумеется, имея в своем распоряжении PC, можно использовать для написания спектрумовских программ кросс-ассемблер и эмулятор со встроенным отладчиком; при этом не придётся заботиться об ограничении размеров исходных текстов и о скорости компиляции. Но этот способ применяется всё же довольно редко.
Написание программ для ZX Spectrum на ассемблере без преувеличения можно назвать настоящим искусством. Чтобы программы получались короткими и быстрыми, приходится использовать множество приёмов оптимизации, подчас весьма необычных:
хранение частей программы в памяти в упакованном виде с распаковкой по мере необходимости;
использование самомодифицирующегося кода;
использование участков программы как в качестве кодов команд, так и в качестве данных;
использование некоторых команд процессора для таких целей, о которых, вероятно, и не подозревали его разработчики (скажем, команды работы со стеком — PUSH и POP — используются для быстрой пересылки блоков данных: такой способ оказывается быстрее, чем использование специально предназначенных для этой цели команд LDIR и LDDR);
использование многочисленных недокументированных команд процессора…
В общем, обо всех хитростях рассказать просто невозможно!
Программное обеспечение
Говорят, что компьютер умирает, когда для него перестают писать программы. По этому критерию ZX Spectrum вполне жизнеспособен: для него существует огромное количество самых разнообразных программ, и каждую неделю появляется что-нибудь новое!
Хотя современные Spectrum-совместимые компьютеры заметно мощнее классического ZX Spectrum 128 — базовая конфигурация, достаточная для работы подавляющего большинства программ, продолжает оставаться неизменной: 128K/AY/Beta Disk. Нет той ситуации, что сложилась на PC — когда пользователь должен постоянно апгрейдить свой компьютер, чтобы запускать свежий софт.
Рассказать обо всём разнообразии программ, к сожалению, не позволяет объём статьи; поэтому подробнее остановлюсь лишь на одной категории — играх. Не секрет, что именно игры часто привлекают внимание к компьютеру; именно благодаря огромному их количеству многие приобретали ZX Spectrum, а программировать начинали уже потом; зачастую — чтобы вставить бессмертие в понравившуюся игру…
Подавляющее большинство игр — зарубежные. Точное их количество подсчитать невозможно, но ориентировочно — 5—10 тысяч. Среди производителей — такие гиганты игровой индустрии, как Sega, Ocean, Konami, Code Masters (вспомним сериал DIZZY!), Virgin, Activision…
Заставка игры
Заставка игры
Если раньше эти игры доходили до пользователя, пройдя через руки хакеров (порой лишившись заставки и дополнительных уровней), то теперь можно сыграть в оригинальные версии, разыскав их в интернете в виде tzx-файлов, содержащих точную копию информации, считанной с фирменной кассеты.
Небольшая, но лучшая часть игр создана программистами из ex-USSR. Это и игры, перенесённые с других платформ (Prince of Persia, UFO, UFO II, Mortal Kombat), и полностью оригинальные (Звёздное наследие, Чёрный ворон, Зеркало, Crime of the Santa Claus: Deja Vu). Разумеется, здесь я перечислил лишь самые выдающиеся разработки.
О системных программах расскажу лишь вкратце. На ZX Spectrum имеются и текстовые редакторы (в одном из них я сейчас пишу эту статью), и графические, и музыкальные (так называемые трекеры); коммуникационные программы, средства разработки (ассемблеры, отладчики), служебные утилиты (файловые оболочки, архиваторы, конверторы…). Почти всегда есть возможность выбора из трёх-пяти аналогичных программ, а то и больше: файловых оболочек, к примеру, существует несколько десятков.
Эмуляторы
С помощью эмуляторов можно запускать программы для ZX Spectrum на более мощных компьютерах — таких, как PC или AMiGA. Эмуляторов существуют десятки (значительная часть из них написана нашими соотечественниками); отличаются они друг от друга качеством эмуляции, количеством поддерживаемых форматов хранения спектрумовских программ, уровнем системных требований и наличием дополнительных возможностей.
Среди наиболее популярных, по моему мнению, эмуляторов ZX Spectrum для PC — могу отметить ZX Emul, R80, X128, RealSpectrum, UKV; для AMiGA — CBSpeccy.
В чём-то эмуляторы даже удобнее реального ZX Spectrum. Так, они позволяют хранить спектрумовские программы не на куче дискет или кассет, а на винчестере или компакт-диске — а значит, можно забыть про многочасовые поиски какой-либо программы и про ошибки загрузки. Не обойтись без эмулятора и в случае, если вы хотите воспользоваться всем богатством программ, взятых из интернета: часто они находятся именно в эмуляторных форматах, перенос которых на реальный ZX Spectrum представляет значительную сложность.
Есть, разумеется, у эмуляторов и свои недостатки. В точности повторить работу реального ZX Spectrum часто не получается: то звук не такой, то изображение, то ещё что-нибудь… Возникают трудности и с переносом программ: бывает, что записанную на ZX Spectrum дискету не удаётся прочесть на PC. Да и клавиатура у PC отличается от спектрумовской…
Наиболее эффективно, как видим, совмещать использование реального ZX Spectrum и эмуляторов, делая правильный выбор в каждом конкретном случае.
ZX Spectrum и интернет
В интернете для ZX Spectrum можно найти буквально всё: софт, эмуляторы, документацию, описания игр и множество другой полезной информации. Сайтов, посвящённых ZX Spectrum, сотни! Приведу лишь несколько ссылок на наиболее известные:
void.demon.nl/spectrum.html (The World of Spectrum);
zx.ru (ZX software museum);
zx.da.ru (Virtual TRDOS);
nvg.ntnu.no/sinclair/planet/index.html (The Planet Sinclair);
scenergy.nm.ru (сайт Scenergy — среди прочего, там доступны свежие новости).
Во многом — именно интернет поддерживает ZX Spectrum на плаву, обеспечивая возможность оперативного распространения программ и обмена информацией. Для пользователя даже с невысоким уровнем доходов не будет обременительным раз в месяц сходить в интернет-кафе, чтобы познакомиться с новостями и скачать последние новинки программного обеспечения (благо, они в абсолютном большинстве freeware, да и размер их невелик).
А можно ли выйти в интернет с помощью самого ZX Spectrum? Из того, что пишут в конференциях, ясно следующее: пока для ZX Spectrum нет программ, поддерживающих необходимые сетевые протоколы. Однако доступ становится возможным, если с помощью программы — эмулятора терминала подключиться к другому компьютеру с установленной на нём UNIX-подобной ОС.
Общение спектрумистов
Как владельцу ZX Spectrum получить ответ на свои вопросы, поделиться новостями, поучаствовать в дискуссии, распространить свои разработки? В этом ему могут помочь электронные средства коммуникации. В интернете — IRC-канал #Z80. В сети FidoNet — четыре эхо-конференции: ZX.SPECTRUM (самая масштабная), REAL.SPECCY (посвящённая реальным компьютерам, а не эмуляторам), SPB.SPECCY и KHARKOV.SPECTRUM.
Есть у спектрумистов и своя сеть — ZXNet. В ней существуют конференции, посвящённые программированию (CODE.ZX), аппаратному обеспечению (ZX.HARDWARE), обсуждению софта (ZXNET.SOFT), игр (SPBZXNET.GAMES), музыки (MUSIC.ZX), и другие.
Demoparty
Чтобы подробно рассказать о том, что такое demoparty, потребуется отдельная большая статья, поэтому буду краток. Программисты, компьютерные художники и музыканты хотят сравнить свои творения — кто лучше? Зрители хотят увидеть новые работы и пообщаться. И вот они собираются, просматривают работы, голосуют и определяют победителей.
Обычно на demoparty проводятся такие конкурсы (compo): Demo (графические эффекты под музыку, часто связанные общей идеей), Intro (почти то же, но с ограничением размера программы — для ZX Spectrum чаще всего 512 байт, 1 КБ, 4 КБ, 16 КБ), а также конкурсы Graphic, Music и другие.
Вот некоторые demoparty 2000 года, на которых был представлен ZX Spectrum: Forever 2e3 (Trencin, Словакия), Paradox (Ростов-на-Дону), Millennium (Минск), Chaos Constructions (Санкт-Петербург), ZX Party (Wroclaw, Польша). Самое масштабное из них, без сомнения, Chaos Constructions — по разным оценкам, на этом party присутствовало от 400 до 600 участников и посетителей.
В этом году уже прошли demoparty Forever, ASCii, Paradox, Millennium; объявлено о том, что состоится Chaos Constructions. И это — не считая чисто виртуальных party, когда распространение работ и голосование происходит посредством компьютерных сетей.
ZX-пресса
Обзор будет неполным без упоминания о средствах массовой информации, посвящённых ZX Spectrum и/или издающихся на этой платформе.
В моей неполной коллекции насчитывается более 80 электронных газет и журналов для ZX Spectrum. Не все они издаются сейчас, но вместе с тем появляются и новые! Почти в каждом крупном городе выходит своя электронная газета, а бывает, что и не одна. Благо выпуск таких изданий — дело не очень сложное; были бы материалы. Да и с распространением проблем не возникает: обычно свежие выпуски рассылаются по сетям (Internet, FIDONet, ZXNet) и выкладываются на спектрумовские сайты.
Известные мне печатные издания — журнал Радиолюбитель. Ваш компьютер, регулярно отдающий примерно четверть объёма под материалы о ZX Spectrum, и выходящая в Вологде газета Абзац, полностью посвящённая ZX Spectrum.