|
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92
|
|
Эмулятор ZX Spectrum на STM32f421.10.2013, 20:38. Показов 253628. Ответов 340
Метки нет (Все метки)
Написал эмулятор процессора Z80. Использовал отладочную плату STM32f4-discovery, к ней подключен LCD по FSMC. К PA[0-4](входы) и PC[0-7](выходы) подключается стандартная спектрумовская клавиатура (у меня ее правда нет, поэтому пока просто замыкаю пины проводком :)). Пока не реализован тайминг выполнения команд и нормальные прерывания от дисплея (возможно на нормальный вывод на LCD не хватит ресурсов). Но заветная надпись....
вот она!!! Т.к. это мой первый проект на ARM буду рад услышать критику или предложения, ну и вопросы. [34.63 Кб]
1
|
|
| 21.10.2013, 20:38 | |
|
Ответы с готовыми решениями:
340
Нужно настроить эмулятор мобильного телефона MEMU чтобы приложения не видели что это эмулятор Qt spectrum Audio Spectrum |
|
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 | ||
Тайминги работают сравнением значения таймера и переменной содержащей необходимое время выполнения команды, при совпадений таймер обнуляется и начинает выполняться другая команда.
0
|
||
|
tyir426
|
|
| 12.12.2013, 23:15 | |
|
Koryim, здравствуй. Вопрос конечно не по теме, но все же...
Скачал Source.rar посмотрел исходники. Понравились. Хочу скомпилировать и поиграться с кодом. Мэйкфайл подкинешь? Я так понял что код пишешь в блокноте и батником компилируешь? Без ИДЕ? Не используешь обертки для портов и периферии? Как задаешь начальную частоту ядра? |
|
|
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92
|
||
| 12.12.2013, 23:16 | ||
[119.65 Кб] Из минусов пока только не очень чистый звук, промодулирован прерываниями вывода на экран. Эх уже руки чешутся поиграть.
0
|
||
|
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92
|
||
| 12.12.2013, 23:20 | ||
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 | ||||
Ну я думаю для тебя это будет раз плюнуть :)... Значит так... меняем местами обработку вывода на дисплей и обработку команд... А именно: Обработку дисплея помещаем в главный цикл, и синхронизируем с железным счетчиком, который тикает с частотой вывода на экран порций из 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 | ||
(были даже ПЗУ c работой в TR-DOS с интеловскими контроллерами гибких дисков) P.S. На 429 STM платах с дисплеем кто-нибудь запускал?
0
|
||
|
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92
|
||||||||
| 14.12.2013, 16:39 | ||||||||
Прерывания экрана пока отменить нельзя, связано это с тем, что может быть ситуация когда данные по ДМА еще отправляются, а мы уже новые пихаем. В общем буду думать. P.S. настройка АЦП:
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 | ||
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 | ||
0
|
||
|
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
|
||
| 14.12.2013, 18:28 | ||
Если есть такая возможность, то так: <Изображение удалено>
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 | |
|
0
|
|
|
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92
|
||
| 14.12.2013, 21:10 | ||
Красивая схема... <Изображение удалено> <Изображение удалено>
0
|
||
|
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
|
|
| 14.12.2013, 21:13 | |
|
Прогресс!!!!!!
А начиналось скромненько... <Изображение удалено> А грузиш как? на время загрузки отключаеш экран, а потом включаеш? PS Моя самая первая, самая простенькая и самая запомнившаяся игрушка была - jumping jack.
0
|
|
| 14.12.2013, 21:13 | |
|
Игры на ZX-Spectrum bass spectrum Кассеты / ZX Spectrum Spectrum bass.dll ZX Spectrum на AVR, V2_0 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
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 и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|