Skip to content

Latest commit

 

History

History
31 lines (18 loc) · 4.25 KB

README.md

File metadata and controls

31 lines (18 loc) · 4.25 KB

CPLDCtrum

Клон ZX Spectrum на CPLD EPM1570T144, вместо кучи микросхем мелкой логики.

Особенности клона:

-Процессор Z80 в корпусе PLCC44 работает на стандартной частоте 3,5MHz

-Экран стандартный для 128K, видеовыход композитный (разъём RCA), есть перемычка чёрно-белое/цветное изображение. PAL-кодер CXA1645/2075 распаян на плате, можно не устанавливать и запаять перемычку на вывод чёрно-белого изображения. Также можно взять с платы сигналы RGB (схема видеовыхода взята от Ленинграда).

-ОЗУ - быстрая SRAM на 512Кб, в данный момент в прошивке реализовано использование только 128Кб.

-ПЗУ - EPROM/EEPROM типа M27C256,M27C512,W27C512 и т.д. В данный момент в прошивке реализовано использование только нижних 32Кб - стандартная прошивка 128K.

-Звук - биппер + AY-3-8910. Последний подключен к усилителю на PAM8403.

-Клавиатура - PS/2 реализована внутри CPLD. Также на дополнительных цифрах клавиатуры сразу реализован Kempston джойстик (порт #1F).

-Вход магнитофона - реализован по схеме читалки на К561ЛН2.

-DivMMC - реализован внутри CPLD, отдельное ОЗУ 512Кб, отдельное ПЗУ для EsxDOS на 8Кб.

Проект написан в среде Quartus II 12 на verilog. На данный момент проект занимает около половины свободных ячеек EPM1570. На данный момент реализовано только самое необходимое для удобного использования клона. Реализация клавиатуры частично моя (матрица клавиш), частично заимствованная из чужого проекта (PS/2 протокол). DivMMC переписан мною с VHDL (проект Mario Prato) на Verilog (переписал ради интереса и чтобы все модули были на одном HDL, хотя и оригинальный модуль работал отлично). Частоту тактирования DivMMC повысил до 14MHz, флешки читаются заметно бодрее. Работа с ОЗУ реализована в виде менеджера SRAM памяти (конечный автомат), благодаря этому можно изменять частоту процессора, не изменяя конфигурацию видеопроцессора. Пробовал запускать процессор на частоте 7MHz, но пока работает только Basic 48 и DivMMC, игры и программы с флешки и Basic 128 почему-то не запускаются. Буду думать, в чём может быть причина.

Сигнал INT - соответствует фирменному (28 циклов). Хотя легко может быть изменён в конфигурации CPLD.

В перспективе хочу: увеличить ОЗУ до 512Кб, правда, пока не знаю по какому стандарту и надо ли это вообще; реализовать нестандартные аппаратные видеорежимы (Gigascreen, триколор и т.д., пока не нашёл нормального описания их работы); горячее переключение таймингов инта, банков ROM с помощью какого-нибудь свободного порта.

Если у кого-то есть дельные советы по улучшению и реализации перспективных функций - буду рад выслушать.