Новости
by Alone Coder
Этот номер планировалось выпустить под ёлочку, но по семейным
обстоятельствам затянуло в празднование :)
Номер специальный - он собран из дневниковых записей во время
работы над ускорением прошивки Pentagon 2.666LE (про эту
доработку в Info Guide #14 было только краткое упоминание).
Известно, что железячники редко описывают свой процесс работы,
поэтому такой пробел буду заполнять я (хоть и не железячник).
Эти описания должны помочь тем, кто тоже начнёт делать что-то
похожее или продолжит эту работу.
- было: весь проект на VHDL, с процессором T80 (доработанным).
- стало: большая часть проекта на Verilog, с процессором TV80
(доработанным). - было: асинхронная схема с двумя разнофазными клоками по 114
МГц и 42 дополнительными клоками (синхронизацией сигналов друг
от друга). - стало: синхронная схема с одним клоком на 57 МГц.
- было: фиксированная сетка обращений к ОЗУ: процессор,
видеоконтроллер, процессор, видеоконтроллер и т.д. (контроллер
дисковода вклинивался в свободные такты процессора). - стало: адаптивная сетка обращений к ОЗУ (арбитраж с
приоритетами). - было: скорость процессора регулировалась специальным
вычисляемым для него клоком, не более 28.5 МГц. - стало: процессор работает по общему клоку 57 МГц, скорость
процессора регулируется по cen (разрешённый такт) + Mode
(сокращённые растактовки команд), эффективная частота до 63 МГц
по тесту dhrystone - самый быстрый клон ZX Spectrum на текущий
момент. - было: отладчик не мог читать память, поэтому в нём не было
дампа памяти, только адресная шина процессора, адреса точек
останова и состояние контроллера дисковода. - стало: отладчик читает память, регистры, порты, отображает
дамп и дизасм. - было: процессор останавливался после точки останова, адрес
выполнения (PC) нельзя было сменить. - стало: процессор останавливается на точке останова, в
отладчике можно менять PC и содержимое памяти. Умеет пропускать
halt при шагании.
Всё сделано небольшими постепенными изменениями.
Опыт, как обычно, показал, что чем больше изменение, тем больше
возни с отладкой.
Хронология роста скорости ZX Spectrum:
- оригинальная модель 1982 года работала на 3.5 MHz с тормозами
при обращении к памяти. - в 1985 году в испанском 128K частота процессора была поднята
до 3.5469 MHz, также Investronica выпустила версию 48K без
тормозов. - в 1986 году в СССР появился Балтик с частотой 4 MHz
(впоследствии стал прототипом ПЛМ для ряда клонов). - в 1988 году в Великобритании и Румынии появились
соответственно SAM Coupe' и Tim-S с 6 MHz. - не позднее 1990 года в СССР появились PLM Avtomatika с 7 MHz
(без задержек) и схема турбирования для Ленинграда на 7.25 MHz
(с задержками). - Profi+ образца 1992 года позволял поднять скорость процессора
до 12 MHz (с задержками) заменой кварцевого генератора. - не позднее 1997 года VMG (Харьков) сделал доработку Pentagon
128K до 14 MHz (с задержками). Тогда же обсуждался прототип
компьютера Sprinter на частоте 14 MHz. - в 1997 году Ivan Mak (Санкт-Петербург) выпустил Sprinter с
частотой 21 MHz (с задержками). - в 2006 году появился ZX-Badaloc с частотой 21.25 MHz.
- Pentagon 2.666, выпущенный в 2008 году, работает на частоте
28.5 MHz (ZX Evolution 2009 года на 14 MHz, но всё же быстрее,
чем упомянутая доработка для Pentagon 128K; Speccy2010 (2010)
работает на частоте 28 MHz, но с задержками). - в 2008 году автор ZX-Badaloc reloaded писал о частоте
виртуального процессора 42.5 MHz, а в 2013 году были слухи об
экспериментальной прошивке для платы ReVerSE на частоту 42 MHz. - около 2017 года появилась прошивка для платы MiSTer,
реализующая ядро ZX Spectrum на частоте 56 MHz. В 2017 году
VladimirS (г. Берёзовский, Кемеровская область) также
экспериментально проверил работоспособность на такой частоте
Z80-совместимого процессора KL5C8400C фирмы Kawasaki, имеющего
паспортную частоту 33 MHz и опционально включаемые краткие
растактовки команд. - в 2024 году в прошивке Pentagon 2.666LE (плата 2009 года)
появилась поддержка 57 MHz с сокращёнными растактовками
(эквивалентная частота 63 МГц).
Плата Pentagon 2.666LE хороша тем, что там стоит статическая
память со временем реакции 10 нс. Конечно, это не самый идеал
для рекордов скорости (Cyclone II - серия 2004 года, технология
90 нм), поэтому мой рекорд может быть перебит довольно быстро. В
любом случае, это принесёт пользу Спектруму. С другой стороны,
результат для Cyclone II показывает, что на отечественных ПЛИС
(5578ТС118) теоретически можно получить близкий результат.
Причём и сам Pentagon 2.666LE можно ускорять дальше - за счёт
конвейеризации процессора, мне это не по зубам.
Пока что мы не достигли даже максимальной скорости KL5C8400C, не
то что eZ80. Но текущий результат уже поставил два важных
вопроса:
-
Стандартизация ZX-BUS. В первую очередь - правильные реакции
на сигналы и ограничения на времянки. Сейчас не документированы
даже габариты и расположение разъёмов! -
С системками понятно, но как писать игры, использующие такую
скорость? Если мы хотим 50 fps на самых быстрых компьютерах, то
на медленных логика на 50 fps будет сильно тормозить!
По второму пункту вопрос уже решён в пропатченной версии игры
Borsch, которую (с исходниками) можно скачать у меня на сайте в
составе 3D движка. Перемещение игрока и камеры привязано к 50
fps (прямо по прерыванию, чтобы не было тормозов с управлением),
а всё остальное (тормозная обработка объектов) осталось на 18
fps. Результат смотрится приятно. Хотя так нельзя сохранять
прохождение игры - при воспроизведении будет рассинхронизация.
Будут проблемы и с сетевой игрой. У кого идеи, как это
исправить? Пишите!
Поделитесь вашим мнением о статье