Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.80/1311: Рейтинг темы: голосов - 1311, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92

Эмулятор ZX Spectrum на STM32f4

21.10.2013, 20:38. Показов 253628. Ответов 340
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал эмулятор процессора Z80. Использовал отладочную плату STM32f4-discovery, к ней подключен LCD по FSMC. К PA[0-4](входы) и PC[0-7](выходы) подключается стандартная спектрумовская клавиатура (у меня ее правда нет, поэтому пока просто замыкаю пины проводком :)). Пока не реализован тайминг выполнения команд и нормальные прерывания от дисплея (возможно на нормальный вывод на LCD не хватит ресурсов). Но заветная надпись....


вот она!!!
Т.к. это мой первый проект на ARM буду рад услышать критику или предложения, ну и вопросы.


[34.63 Кб]
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.10.2013, 20:38
Ответы с готовыми решениями:

Нужно настроить эмулятор мобильного телефона MEMU чтобы приложения не видели что это эмулятор
Нужно чтобы сторонние приложения воспринимали эмулятор как реальное устройство без root прав

Qt spectrum
Доброго времени суток. Возникли сложности с пониманием готового кода в Qt примерах. Буду очень благодарен кто сможет объяснить реализацию...

Audio Spectrum
Всем привет, пишу аудио плеер (WinForm). Встал вопрос как сделать Spectrum, кто знает скажите пожалуйста. Нашёл подходящий пример, но...

340
0 / 0 / 0
Регистрация: 15.10.2013
Сообщений: 39
06.12.2013, 18:59
Студворк — интернет-сервис помощи студентам
Господа, немного не понял, как была разрешена проблема с экраном?

У Спектрума экран 1-битный, плюс память атрибутов цвета по знакоместам. На эмуляторе дисплей мультицветный и как минимум 1 байт на пиксел.

Если бы я делал, то делал бы копирование из видеопамяти спектрума с преобразованием на лету. Тоесть 1 байт из экранной памяти Спектрума с учетом атрибутов из памяти знакомест, по дороге к TFT экрану превращаются в 8 байтов.

Я правильно думаю, или есть другой путь? Дело в том что ко мне должны в конце месяца приехать STM32F429Dysco у них встроенный контроллер TFT на борту. Хотелось бы приспособить 429 кристалл под эмулятор. Вот и интересно как это сделано, на обычном F4.

По таймингам, кто-то говорил основываться на аппаратных таймингах таймера. И как миниму сравниваться по времени выполнения с ним. Я думаю это очень верный путь.

Реализовано ли уже сравнение с аппаратным таймером?
0
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92
07.12.2013, 08:38
Цитата Сообщение от TDuki
Господа, немного не понял, как была разрешена проблема с экраном?

По таймингам, кто-то говорил основываться на аппаратных таймингах таймера. И как миниму сравниваться по времени выполнения с ним. Я думаю это очень верный путь.

Реализовано ли уже сравнение с аппаратным таймером?
Приветствую, экран отрисовывается 50 раз в секунду, отрисовка идёт по 8 точек построчно. Настроен таймер который генерирует прерывание, считываются атрибуты и пиксели с памяти zx, преобразуются в формат дисплея. Вывод на дисплей идёт с помощью DMA.

Тайминги работают сравнением значения таймера и переменной содержащей необходимое время выполнения команды, при совпадений таймер обнуляется и начинает выполняться другая команда.
0
tyir426
12.12.2013, 23:15
Koryim, здравствуй. Вопрос конечно не по теме, но все же...
Скачал Source.rar посмотрел исходники. Понравились.
Хочу скомпилировать и поиграться с кодом. Мэйкфайл подкинешь?
Я так понял что код пишешь в блокноте и батником компилируешь?
Без ИДЕ?
Не используешь обертки для портов и периферии?
Как задаешь начальную частоту ядра?
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92
12.12.2013, 23:16
Цитата Сообщение от ShodS
Ошибки тестов, все удалось побороть?
Все ошибки поборол.
[119.65 Кб]

Из минусов пока только не очень чистый звук, промодулирован прерываниями вывода на экран. Эх уже руки чешутся поиграть.
0
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92
12.12.2013, 23:20
Цитата Сообщение от tyir426
Koryim, здравствуй. Вопрос конечно не по теме, но все же...
Скачал Source.rar посмотрел исходники. Понравились.
Хочу скомпилировать и поиграться с кодом. Мэйкфайл подкинешь?
Я так понял что код пишешь в блокноте и батником компилируешь?
Без ИДЕ?
Не используешь обертки для портов и периферии?
Как задаешь начальную частоту ядра?
В личку почтовый адрес скинь, я тебе весь проект отправлю. ИДЕ-Кеил, обертки это SPL?, я честно говоря не понимаю зачем она нужна.
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
12.12.2013, 23:27
Koryim, респект!
0
tyir426
12.12.2013, 23:55
Спасибо за ответ!
Не могу писать, только зарегистрировался. Моя почта: ник+ собака + гмаил.ком
В ответ могу выслать проект под MEGA32+SD+S65LCD+64SROM. Тоже эмулятор спектрума весь на си. Средний между скоростью и компактностью. Отлаживал руками все пошагово в протеусе 70% стандартного РОМА48К. Может что и возьмешь от туда.
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
13.12.2013, 01:31
Цитата Сообщение от Koryim
Все ошибки поборол.
Ай да Koryim... ай да молодец... такими темпами можно и самый "чистый" симулятор забабахать.....

Цитата Сообщение от Koryim
Эх уже руки чешутся поиграть.
А с загрузкой программ разобрался? С SD или звуком загружать будеш?

Цитата Сообщение от Koryim
Из минусов пока только не очень чистый звук, промодулирован прерываниями вывода на экран.
Это я думаю тоже решаемо... Правда, придется архитектуру немного перелопатить:)... т.к. мы изначально стали на не верный путь...
Ну я думаю для тебя это будет раз плюнуть :)...

Значит так... меняем местами обработку вывода на дисплей и обработку команд...

А именно:
Обработку дисплея помещаем в главный цикл, и синхронизируем с железным счетчиком, который тикает с частотой вывода на экран порций из 8 точек. Ну в общем получается по аналогии с тем, как сейчас работает обработчик команд, с привязкой к счетчику.
Обработчик команд, помещаем в прерывание по таймеру\счетчику, частота переполнения которого 3,5мГц.
Теперь, когда возникает прерывание, вычисляем, сколько тактов должна выполнятся текущая команда, устанавливаем на это время переменную CommomdSize и занимаемся отработкой команды.
Например: вошли в прерывание, вычислили что текущая команда должна отрабатыватся 12 тактов, установили переменную CommomdSize на это значение, закончили отработку команды, вышли...
Следующие 11 прерываний мы просто уменьшаем переменную CommomdSize и выходим. И только когда она обнулится, мы приступаем к отработке следующей команды...
(момэнт: после первого захода и установки переменной CommomdSize, надо разрешить прерывание, чтобы время нормально отсчитывалось, в случаях когда команда еще не сэмулилась, а прерывания так и прут...)

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

Единственное, что в таком случае отпадают мультиколоры, т.к. вывод на дисплей теперь будет колбасить... ну они у нас честно говоря и сейчас пролетают, т.к. выводятся за раз 8 точек вместо того чтобы равномерно выводить по 1 точке... Да и звук намного важнее, чем какие то бесполезные мультиколоры...

Еще один момент... не понятно будут ли ситуации, когда симуляция команды не поместится в свой временной слот, и тогда есть вероятность пропуска тактов... (я имею ввиду, когда подряд идут несколько сложных команд, каждая следующая будет все больше залазить на соседний слот, и в итоге один такт пропадет)
Так что желательно добится ситуации, когда симулятор выполняет каждую команду за время не большее чем время котрое на эту команду тратит оригинальный Z80...
0
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
13.12.2013, 12:58
Цитата Сообщение от ShodS
А с загрузкой программ разобрался? С SD или звуком загружать будеш?
Один из вариантов в ПЗУ заменить код загрузчика с ленты на код загрузки с SD карты (в нативном коде ARM)
(были даже ПЗУ c работой в TR-DOS с интеловскими контроллерами гибких дисков)

P.S. На 429 STM платах с дисплеем кто-нибудь запускал?
0
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92
14.12.2013, 16:39
Цитата Сообщение от ShodS
А с загрузкой программ разобрался? С SD или звуком загружать будешь?
Значит так, сегодня попробовал загрузить с плеера, нифига не вышло, пилот тон не цепляет... (экран возможно вносит коррективы). Пробовал так: 1. настроил АЦП. 2. на вход подал сигнал с плеера. 3. при значении АЦП больше Х выдаем 1, меньше 0.
Прерывания экрана пока отменить нельзя, связано это с тем, что может быть ситуация когда данные по ДМА еще отправляются, а мы уже новые пихаем. В общем буду думать.

P.S. настройка АЦП:
Code
1
2
3
4
5
6
7
8
//настройка АЦП 6 канал на непрерывное преобразование (вход нигнитофона)
RCC->APB2ENR|=RCC_APB2ENR_ADC1EN;
ADC1->SQR3=6;//регулярные преобразования выбор 6 канала
ADC1->CR2|=ADC_CR2_CONT;//преобразовывать непрерывно
ADC1->CR1|=ADC_CR1_RES_0;//эти биты задают разрешение АЦП (6 бит)
ADC1->CR1|=ADC_CR1_RES_1;
ADC1->CR2|=ADC_CR2_ADON;//включаем АЦП
ADC1->CR2|=ADC_CR2_SWSTART;//старт преобразований
ВАЖНО!!! не забываем правильно конфигурировать входы (MODER и PUPDR)

Цитата Сообщение от tyir426
Спасибо за ответ!
Не могу писать, только зарегистрировался. Моя почта: ник+ собака + гмаил.ком
письмо вернулось
0
0 / 0 / 0
Регистрация: 15.10.2013
Сообщений: 39
14.12.2013, 17:04
Koryim, а , что если называть папку с ихсодниками - Sources. К такому названию привыкло значительно больше народу ;)
0
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92
14.12.2013, 17:13
Цитата Сообщение от TDuki
Koryim, а , что если называть папку с ихсодниками - Sources. К такому названию привыкло значительно больше народу ;)
Все для Вас! :) отключил экран, с плеера загрузка пошла....
0
0 / 0 / 0
Регистрация: 15.10.2013
Сообщений: 39
14.12.2013, 17:19
Кстати нужно будет минимизировать число функций работы с конкретным апаратным экраном. Что бы можно было легче портировать скажем на F429Dysco.

Хм... А чем же тогда экран влияет на загрузку? Сбивает тайминги?
0
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92
14.12.2013, 17:33
Цитата Сообщение от TDuki
Кстати нужно будет минимизировать число функций работы с конкретным апаратным экраном. Что бы можно было легче портировать скажем на F429Dysco.

Хм... А чем же тогда экран влияет на загрузку? Сбивает тайминги?
Да, сбивает. Пока четкого представления нет как это побороть.
0
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
14.12.2013, 18:28
Цитата Сообщение от Koryim
Прерывания экрана пока отменить нельзя, связано это с тем, что может быть ситуация когда данные по ДМА еще отправляются, а мы уже новые пихаем.
А что нет возможности проверить, отработало DMA или нет?.....

Если есть такая возможность, то так:

<Изображение удалено>
0
0 / 0 / 0
Регистрация: 15.10.2013
Сообщений: 39
14.12.2013, 19:55
ShodS, в какой программе блок схему рисовали?
0
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
14.12.2013, 20:08
Цитата Сообщение от TDuki
ShodS, в какой программе блок схему рисовали?
Лет 5 назад покупал...
http://www.posistor.com/wizflow/index.html
0
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
14.12.2013, 20:54
Цитата Сообщение от TDuki
ShodS, в какой программе блок схему рисовали?
Отличная программа для рисования разных блок схем Yed
0
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92
14.12.2013, 21:10
Цитата Сообщение от ShodS
Цитата Сообщение от TDuki
ShodS, в какой программе блок схему рисовали?
Лет 5 назад покупал...l

Красивая схема...


<Изображение удалено>


<Изображение удалено>
0
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
14.12.2013, 21:13
Прогресс!!!!!!

А начиналось скромненько...

<Изображение удалено>

А грузиш как? на время загрузки отключаеш экран, а потом включаеш?

PS
Моя самая первая, самая простенькая и самая запомнившаяся игрушка была - jumping jack.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.12.2013, 21:13

Игры на ZX-Spectrum
У кого было это чудо? :) И любимые игры на нем?

bass spectrum
Зашкаливает спектрум, смена высоты не помогает, какая команда отвечает за &quot;чувствительность&quot; спектрума?

Кассеты / ZX Spectrum
Доброго времени суток! Простите за дебильный вопрос, но всё же: можно ли подружить вот такой КПК HP 95LX ...

Spectrum bass.dll
Доброе утро всем. Подскажите кто знает. &quot;использую фоновую картинку на форме&quot; вот и хотелось бы его сделать прозрачным. Как сделать...

ZX Spectrum на AVR, V2_0
Здравствуйте! Представляю свою новую разраюотку - AVR ZX Spectrum V2_0 Видео: http://www.youtube.com/watch?v=y4JQdIvJunI Схема,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
160
Закрытая тема Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru