Хочу представить Вашему вниманию очередной вариант клона спектрума.
Клон состоит из процессора Z80, ОЗУ SRAM UT611024, микроконтроллера STM32F103C8T6, одного регистра ИР22 для механической клавиатуры и операционного усилителя MC34072 для магнитофонного входа.
Принцип работы отличается от многочисленных клонов тем, что здесь отсутствует ПЗУ. Процессор Z80 и статическая память на 64кБ соединены непосредственно друг с другом без всяких мультиплексоров, коммутирующих между ПЗУ, динамическим ОЗУ и драйвером дисплея. Перед запуском, из контроллера MCU в SRAM «заливается» область ПЗУ (первые 16кБ). Затем запускается процессор Z80. Тактирование осуществляется от таймера микроконтроллера в STM32.
Во вложении 11.jpg рисунок платы из Sprint Layout.
Стоит отметить, что по результатам ремонта нескольких клонов, было обнаружено несколько неисправных мультиплексоров КП11 и КП12, именно по этой причине и хотелось отказаться от промежуточных микросхем, сильно осложняющих ремонт.
Во вложении 12.jpg представлен результат работы микроконтроллера STM32, выполняющий функцию драйвера дисплея. Процессор и память в схеме отсутствуют. В качестве видеопамяти используется встроенная память микроконтроллера.
Далее были установлены внешняя SRAM и процессор Z80A. И тут начались проблемы. По осциллограммам на выводах процессора, кажется что система CPU - SRAM работает. Но результат работы увидеть никак не выходит.
Картинка стала ”рваной”. По задумке микроконтроллер должен был следить за процессами записи во внешнюю память SRAM, и если данные относились к дисплейной области, по прерыванию микроконтроллера делать копию данных в свою встроенную память и уже из встроенной памяти выводить на экран, тем самым минуя обращение к внешней памяти и как следствие дополнительных мультиплексоров. Но вышло так, что на прерывания обработки этих обращений уходит слишком много времени, поэтому картинку рвет и данные так и не приходят. Я не стал разбираться почему, главное было то, что даже если они придут, спасти изображение от искажений все равно не удастся. И все это несмотря на то, что микроконтроллер работает на частоте 70 МГц!
Проблему удалось решить следующим образом. Пришлось немного изменить принцип работы, а именно - прерывать процессор Z80 по сигналу BUSRQ сразу после прорисовки очередной строки для чтения видеоданных из SRAM. За простоту данной процедуры пришлось расплачиваться простоем процессора. Наглядно можно увидеть прерванное время у Z80 – это расстояние в длину черного поля между узкой вертикальной зеленой полоской и широкой рваной зеленой же полосой с правой стороны экрана.
В итоге удалось получить цветное изображение с градацией яркости, но без раскраски бордюра и выхода звука. Интересной особенность данного клона явилось то, что можно бейсик командой РОКЕ записывать новые значения в область ПЗУ, например можно записать новые шрифты в знакогенератор или что-то вместо 1982 Sinclair Research Ltd. Конечно же при перезапуске микроконтроллера все изменения будут потеряны, но сброс процессора область памяти ПЗУ не трогает. Кстати команда RANDOMIZE USR 0 теперь не приводит с сбросу, появляется только нестандартное сообщение об ошибке.