PDA

Просмотр полной версии : Клон спектрума ZX48



ZX_Farhitdin
20.09.2015, 00:12
Хочу представить Вашему вниманию очередной вариант клона спектрума.
Клон состоит из процессора 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 теперь не приводит с сбросу, появляется только нестандартное сообщение об ошибке.

balu_dark
20.09.2015, 11:50
ранд usr 0 не будет работать из за проблемы порчи первых 5ти ячеек с адреса 0 в результате ошибки процедуры калькулятора.
Второе - работа с портами даже в битбанге на стм32 - нормально только до 15 мегагерц ( официально тактирование внешних пинов - 30 мГц)
И собственно - что смущает более всего - стм32 вообще то 3.3 вольта уровень сигналов. Нагрузочную способность кто то расчитывал ? преобразователей уровня - я тоже не вижу.

Eltaron
20.09.2015, 12:04
Не очень видно по плате, но на stm32, похоже, заведена вся шина? Если так, то можно, наверное, избавиться от операционника, прицепив SD-карту к stm32 и читая с ней tap-файлы. Просто отлавливать CALL 1306, тем более, что ПЗУ можно подсунуть любое. Экран на время чтения можно и гасить, если ресурсов МК не хватит на то и другое одновременно.

Хотя и так по числу корпусов это рекордсмен среди клонов без программируемой логики. Круто! Исходники будете выкладывать?


преобразователей уровня - я тоже не вижу.
Так ведь там CMOS Z80.

Eltaron
20.09.2015, 12:17
Да ладно рекордсмен )) правда по ссылкам софтовые эмуляторы, но вы же пользуетесь эмулятором на PC или это не кошерно? ))
Пользуюсь, но разделяю понятия "клон" и "эмулятор". А то любую однокристаллку с линухом и fuse надо будет в клоны записывать.

Mick
20.09.2015, 12:55
Несколько оригинально. Радует, что у людей есть фантазия, которые подтверждают факт - что Спектрум можно собрать почти из все угодно.

Так, мысль вслух, а если вместо статики попробовать забубенить двухпортовую память. Тогда по логике не надо будет тормозить проц и STM сможет спокойно хавать данные из памяти. Кстати, я сильно не вдавался в проект Спектрума на AVR от Лисицина. У него вроде видеоконтроллер собран тоже на микроконтроллере (если не ошибаюсь на 128 меге). Как он успевает все забирать.

balu_dark
20.09.2015, 15:52
Так ведь там CMOS Z80.

Ну я не увидел если честно указаний от скольки он питается. так же не увидел - как у него сделан вывод видео. Если тупо с ног проца - конечно будут искажения - оно не вытянет по току - надо транзисторные формирователи на цвет и на синхру ставить. Нельзя мешать цифру и аналог. Им от этого плохо бывает. При правильном стечении обстоятельств - можно даже увидеть дымок : это душа свеже умершего транзистора.

ZX_Farhitdin
20.09.2015, 19:20
Стоило упомянуть, что по сути это макетная версия и не на последней своей стадии развития.
Весьма справедливое замечание о разности напряжений питания микросхем заставило меня задуматься об их стыковке на этапе разработки. И не нашлось ничего проще как поставить ограничивающие ток резисторы, к тому же в микроконтроллере почти половина выводов толерантна к 5В.

Что касаемо подключения SD карты, то были такие мысли, однако не с этим контроллерам, оказалось, что свободных выводов не остаётся, единственный вариант переходить на 64 выводной корпус.

Цвета РГБ пришлись как раз на три вывода порта С РС13, РС14, РС15. Несомненным плюсом стало, что других выводов на порт С нету. Сигнал проходит через резистор без повторителя, который в итоге придется все-таки ввести. Еще хотел отметить, что три уровня напряжения: уровень черного, уровень серого и уровень яркого, я получаю с одного выхода используя переключение между выходными структурами полумост или выход с открытым истоком, который и позволяет получить любое среднее напряжение между 0...3,3 с помощью резистивного делителя.

Не знал, что существует двухпортовая память, но у меня есть другой способ отказать от запросы доступа к шине, попробовать успеть опросить память во время сигнала процессора о регенерации памяти. Мне кажется должно получиться.

balu_dark
20.09.2015, 22:42
Двухпортовая память просто стоит от потолка до неба. Поэтому о ней знают только избранные - я не видел в самоделках ее вообще. Хотя она и удобна для всяких там видеокарт и аналогичного. Гораздо проще - привязать доступ к памяти к разным уровням клока ( к фронту и спаду) например по форонту глобального клока - туда лезет один процессор, а по спаду - второй. Типа как была реализована на некоторых клонах "прозрачная" работа с памятью - видеопроц лез в одно время а обычный проц - в другое.

На RGB и SYNC амплитуда 0.75...1В на сопротивлении 75 ом. Я не уверен что нормально можно будет сделать такой сигнал. 3 транзистора (да хоть кт315) и 9 резисторов - очень спасут положение. Плюс не следует забывать о гасящих импульсах и привязки к белому. это даст стабильную картинку. Если после сброса - картинку не рвет, а после выполнения команд меняющих цвет бордюра (например save "1" code 0,1024 ) изображение начинает колбасить всячески - надо смотреть привязку к белому( вернее к черному вроде).

Ewgeny7
20.09.2015, 22:54
Вот всего на одном STM32F407 и на PIC32:
Один испанец слепил эмуль и на STM32F103RB, как раз на одной очень популярной платке с дисплеем. Но сырков/прошивок не выложил, гад... А у меня эта девбордина есть.

---------- Post added at 22:54 ---------- Previous post was at 22:52 ----------


http://www.youtube.com

Alex Rider
22.09.2015, 17:59
ранд usr 0 не будет работать из за проблемы порчи первых 5ти ячеек с адреса 0 в результате ошибки процедуры калькулятора.
Ну не ошибки, а оптимизации :) Там еще есть несколько мест с фейковой записью в ПЗУ. Надо ставить лочку на запись в #0000 - #3fff.

ВитГо
26.08.2020, 08:44
а исходными файлами не поделитесь ? я подумываю тоже самое сделать но на stm32f4, там озу на борту 192 кб... из них 128 легко отдать на z80

IanPo
26.08.2020, 09:43
По-моему, F103 не потянет по скорости шину Z80. У меня сбои были даже на F205. Преобразователи уровня не нужны, если выводы 5В-совместимы.
Тоже хочу исходники.

ВитГо
26.08.2020, 19:14
ну операции чтения записи с памятью это минимум 7 тактов... для частоты 3.5 мгц - 500 кгц...
тактовая частота 103-го 70 мгц... в принципе достаточно....

у меня больше вопрос как сделан вывод видео.. с контроллера снимаются видеосигналы или все таки внешняя логика смешивает цвета и битовые поля ?
я на 407ом планирую делать полную обработку видео, чтобы на выходе получать уже синхру и три цвета с яркостью.. и это очень и очень напряжно получается...
вот и интересно как здесь делалось...
на 407 хочу запустить DMA на GPIO, скорее всего DMA с кольцевого буфера, чтобы обрабатывать по знакоместно (А не всю строку) - в этом случае будет работать 128к мультиколор...
но есть ньюансы...

надеюсь автор выйдет на связь... нам с ним есть что обсудить имхо :-)))

Eltaron
26.08.2020, 19:39
Если что, у автора есть видео про этот комп


https://www.youtube.com/watch?v=ggm-KhYEMxs

PavelZX
18.09.2020, 16:09
Не могу найти, видел проектик подобный, но без внешней ОЗУ, в качестве экрана LCD и часть памяти используется от его контролера...

- - - Добавлено - - -

Нашёл, вот видео: https://www.youtube.com/watch?v=n4u6VNxCTdA
https://habr.com/ru/post/412325/

- - - Добавлено - - -

Но тут вообще без z80... Может можно как-то идею объединить? Хотя всё-таки более многоногий нужен МК)

ВитГо
08.03.2022, 12:06
По-моему, F103 не потянет по скорости шину Z80. У меня сбои были даже на F205.
а что именно не успевали делать ?
вывод видео однозначно делать на dma-gpio связке..
правда при этом нужно при отрисовке бордера готовить данные цветов строки постоянно...

я планирую использовать stm32f407..


Преобразователи уровня не нужны, если выводы 5В-совместимы.

тоже задумался на эту тему..
выводы у нас TTL совместимы, но питание разное.
значит надо делать выходы Open Drain (открытый коллектор) и убирать внутреннюю подтяжку к 3 вольтам - по идее...

ок, но тогда надо делать по всем линиям подтяжку к 5 вольтам ?
на плате Олега (ТС) не вижу резисторов подтяжки.. :-(
так их нет ?
или из за того что проц CMOS то используем для stm32 push\pull режим пинов и 3 вольт хватит для уверенной работы проца ? и\или питание поднять еще до 3.5 вольт ?

IanPo
17.04.2022, 09:49
Причина сбоев F205 выяснилась позже - дело было в питании, а не в скорости.
Но, имхо, F103 шину не успеет обработать, кроме, может быть, простейших действий - тупо выдать/принять число.

joub
10.05.2022, 22:45
Так прошивочку для STM так и не выложили?