|
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92
|
|
Эмулятор ZX Spectrum на STM32f421.10.2013, 20:38. Показов 253414. Ответов 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
Регистрация: 18.03.2010
Сообщений: 2,230
|
|||
| 05.11.2013, 15:51 | |||
0
|
|||
|
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92
|
||
| 05.11.2013, 18:39 | ||
В общем по таймингам засада, два пикселя выводятся за один тик процессора Z80 (на железном), я вывожу по 8 пикселей - это 4 такта. Одна команда процессора Z80 выполняется 4 и более такта. Отлично, но есть команды которые выполняются за не кратное 4 количество тактов. И как выдержать тайминг в этом случае это вопрос. Кто что посоветует?
0
|
||
|
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
|
||
| 05.11.2013, 18:57 | ||
Так быстродействия ARM-а хватает сейчас чтобы не отставать от реалтайма? Я тут увидел как можно пооптимизировать прерывание для вывода в LCD... Есть смысл это делать?
0
|
||
|
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
|
|
| 05.11.2013, 19:23 | |
|
Еще вариант пришел на ум.....
Завести железный таймер\счетчик X тикающий с частотой 3,5мГц... Так же завести программный счетчик Y, который после окончания эмуляции текущей команды будет увеличиватся на количество тактов необходимое для выполнения команды которую только что выполнили..... Теперь будет возможность жестко синхронизировать эмуляцию команд... Просто перед отработкой очередной команды, нужно будет посмотреть на счетчики: если Y больше чем X, то значит мы усе успеваем... и можно пофилонить, пока счетчики не сравняются..... если X больше чем Y, то значит надо сникерснуть.... Как тебе такой вариант?
0
|
|
|
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92
|
||
| 05.11.2013, 20:11 | ||
0
|
||
|
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92
|
||
| 05.11.2013, 20:12 | ||
0
|
||
|
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
|
||
| 05.11.2013, 21:45 | ||
Просто при старте запускаем железный таймер\счетчик на тупой счет с частотой 3,5мГц... (т.е. он сам по себе тикает и все... а мы ка бы на него будем ориентироватся...) Ну и запускаем еще один, чисто софтовый счетчик, его мы будем увеличивать после отработки команды, на длину тактов этой команды. Останется в начале отработки каждой следующей команды посмотреть, насколько мы обгоняем или отстаем... По моему это идеальный вариант будет... в функциях эмуляции команд вообще не надо будет ничего подгонять по таймингам..... сумасшедший примерчик :)..... выполнили команду DI (за это время железный счетчик X увеличился на 1 и стал равен 1) прибавили 4 к счетчику Y (DI = 4 такта, Y+4=4) сравнили содержимое счетчиков (X=1, Y=4) опережаем. ждем пока счетчики сравняются (ждем состояния X=4, Y=4) выполнили команду LD A,0 (за это время железный счетчик X увеличился на 2 и стал равен 6) прибавили 7 к счетчику Y (LD A,0 = 7 тактов, Y+7=11) сравнили содержимое счетчиков (X=6, Y=11) опережаем. ждем пока счетчики сравняются (ждем состояния X=11, Y=11) тут вклинилось прерывание обработки экрана... (за это время счетчик X натикал до состояния 30) выполнили команду JR M1 (за это время железный счетчик X увеличился на 1 и стал равен 31) прибавили 12 к счетчику Y (JR M1 = 12 тактов, Y+12=23) сравнили содержимое счетчиков (X=31, Y=23) сразу переходим к выполнению следующей команды, т.к. отстаем от графика... выполнили команду LD I,A (за это время железный счетчик X увеличился на 2 и стал равен 33) прибавили 9 к счетчику Y (LD I,A = 9 тактов, Y+9=32) сравнили содержимое счетчиков (X=33, Y=32) сразу переходим к выполнению следующей команды, т.к. отстаем от графика... выполнили команду LD DE,0 (за это время железный счетчик X увеличился на 2 и стал равен 35) прибавили 10 к счетчику Y (LD DE,0 = 10 тактов, Y+10=42) сравнили содержимое счетчиков (X=35, Y=42) опережаем. ждем пока счетчики сравняются (ждем состояния X=42, Y=42)
0
|
||
|
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92
|
||
| 06.11.2013, 20:07 | ||
0
|
||
|
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
|
||
| 06.11.2013, 20:13 | ||
Имееш ввиду когда железный таймер\счетчик доходит до конца счета и обнуляется или что?
0
|
||
|
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92
|
||
| 07.11.2013, 07:59 | ||
Ага, два момента, когда железный доходит до переполнения, и когда софтовый. Пока загружаю значения таймингов в регистр перезагрузки в таймер 7, и смотрю когда флаг что прошла перезагрузка установится. Пробую сохранять файл на ленту, чегото он много сохраняет... Вечером попробую видео записать.
0
|
||
|
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
|
||
| 07.11.2013, 10:53 | ||
Ведь нам не обязательно чтобы эти счетчики крутились по кругу... ну и давай их будем обнулять каждый раз когда у нас была ситуация во время сравнения что Y был больше, и мы ждали счетчика X... Как только значения сравнялись - обнуляем оба счетчика..... Тогда по идее переполнения никогда не будет... Получается что если мы отстали от графика, то счетчики не сбрасываем, и они какое то время считают нормально... Но как только мы догнали (Y оказался больше X), после ожидания момента (Y==X) сбрасываем оба счетчика.
0
|
||
|
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
|
|
| 07.11.2013, 14:48 | |
|
вы прям тайминги команд в реалтайме эмулируете? а зачем такие сложности?
0
|
|
|
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92
|
||
| 07.11.2013, 15:02 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
|
|
| 07.11.2013, 15:10 | |
|
я как понял, щас так: команду сэмулили - кусочек экрана нарисовали, прям сразу. если так, то не понятно - зачем. можно же быстро наэмулить на строку (224 такта), потом ее отрисовать и потом еще куча времени останется. и никаких подгонок и прочей лишней реалтайм-работы. я просто идею понять хочу.
0
|
|
|
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92
|
||
| 07.11.2013, 19:17 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
|
|
| 07.11.2013, 20:48 | |
|
есть и в 5 тактов команда:)
а так, как я говорил, мне кажется, было бы просто и точно. и пофиг сколько тактов какие команды.
0
|
|
|
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92
|
||
| 07.11.2013, 21:54 | ||
|
А вот и обещанное видео :)
https://www.youtube.com/watch?v=88bgF9vJwOk
0
|
||
|
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
|
||
| 07.11.2013, 22:49 | ||
Это что, мы на верный след напали!?.....
0
|
||
|
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92
|
||
| 07.11.2013, 23:11 | ||
Это что, мы на верный след напали!?..... вроде:) Прогнал тест (Z80 Test Suite), есть ошибки, много ошибок....
0
|
||
|
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
|
|||
| 08.11.2013, 09:49 | |||
Главное что звук более менее реальный, а значит с таймингами все таки удачное решение... Это намного упростило задачу... т.к. возня с настройкой таймингов всех процедур обработки команд - тот еще геморрой..... Кстати а видно (слышно) отличие от предыдущих вариантов? Или особо и не заметно, что контроллер привязали к 3,5мгц ?
0
|
|||
| 08.11.2013, 09:49 | |
|
Игры на ZX-Spectrum bass spectrum Кассеты / ZX Spectrum Spectrum bass.dll ZX Spectrum на AVR, V2_0 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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 и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|