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

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

21.10.2013, 20:38. Показов 252882. Ответов 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
Регистрация: 23.08.2013
Сообщений: 206
16.01.2014, 13:45
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Koryim
Цитата Сообщение от iukimi_i_m
Всем привет! Поскольку не подключен к проекту стартуп и сыстеминит у ТС не работает ПЛЛ и подсистема прерываний и прерывания он опрашивает ручками в режиме опроса бита состояний... И вообще процик работает у него на 16ти мегагерцах вместо 180. Безумству храбрых поем мы песню...
Выложил весь проект, архив нужно распаковать на D:. Да и не стесняемся выдаем свои соображения сюда, берите пример iukimi_i_m!

https://dryve.google.com/file/d/0B0C_FY ... sp=sharing

Перевыложите проект нормально. У вас иероглифы вместо русских букв в комментариях, например в файле ssreen.c . Поменяйте кодировку на UTF8 перед тем как выкладывать, ну или перепешите комментарии на английском.

Спасибо.
0
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
16.01.2014, 16:31
а вы знали, что z80 - 4-битный процессор? :)
http://www.righto.com/2013/09/the-z-80- ... ow-it.html
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
16.01.2014, 17:01
Цитата Сообщение от Ymk
а вы знали, что z80 - 4-битный процессор? :)
http://www.righto.com/2013/09/the-z-80- ... ow-it.html
Интересно, что даже двоюродный брат Z80 - i8085 - всё-таки восьмибитный.
А вот про их общего предка i8080 в статье не сказано. Надеюсь, он тоже был правильным восьмибитником. Потому что тяжело переживать крушение идеалов :-)
0
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92
17.01.2014, 09:45
Цитата Сообщение от tyvydos
Спасибо,
пересмотрю,хотя в первом source была на lcd ssd1289,неподумал о этом.
Да в первом было на SSD, возьмите оттуда инициализацию. Заработает, дайте знать. Я добавлю в проект вашу инициализацию дисплея.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 54
17.01.2014, 20:43
Там только заголовка на 1289,а внутри от LG 4532.
капаюсь в датах обоих и стараюсь переделать,но как особово опыта нету -так пока медлено и радоваться нечем.
Перекоьпилировал с иниц. с других проектов,но пока...
Получиться - порадуюсь,сообщю.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
17.01.2014, 22:56
tyvydos, чтобы быстро завести любой TFT LCD со встроенным контроллером (к таким отосится и SSD1289), реализуйте два шага:
1) после сброса LCD-контроллера (с правильными задержками) прочитайте его ID из соответствующего регистра; правильное значение ID подтверждает, что интерфейс со стороны МК функционирует правильно.
2) после инициализации самая эффективная (и она же, как ни странно, простая) проверка вывода изображения - закраска прямоугольного окна.

Только потом - всё остальное.
0
0 / 0 / 0
Регистрация: 23.08.2013
Сообщений: 206
18.01.2014, 00:49
Вот рабочая инициализация на SSD1289 для этого проекта.

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
else if (DeviceIdCode == 0x8989)
{
LCD_WriteReg(0x0000, 0x0001);
Delay(50); /* Enable LCD Oscillator */
LCD_WriteReg(0x0003, 0xA8A4);
Delay(50);
LCD_WriteReg(0x000C, 0x0000);
Delay(50);
LCD_WriteReg(0x000D, 0x080C);
Delay(50);
LCD_WriteReg(0x000E, 0x2B00);
Delay(50);
LCD_WriteReg(0x001E, 0x00B0);
Delay(50);
LCD_WriteReg(0x0001, 0x2B3F);
Delay(50); /* 320*240 0x2B3F */
LCD_WriteReg(0x0002, 0x0600);
Delay(50);
LCD_WriteReg(0x0010, 0x0000);
Delay(50);
LCD_WriteReg(0x0011, 0x6058); //AM регистр 0x6070
Delay(50);
LCD_WriteReg(0x0005, 0x0000);
Delay(50);
LCD_WriteReg(0x0006, 0x0000);
Delay(50);
LCD_WriteReg(0x0016, 0xEF1C);
Delay(50);
LCD_WriteReg(0x0017, 0x0003);
Delay(50);
LCD_WriteReg(0x0007, 0x0233); //0x0133
Delay(50);
LCD_WriteReg(0x000B, 0x0000);
Delay(50);
LCD_WriteReg(0x000F, 0x0000);
Delay(50);
LCD_WriteReg(0x0041, 0x0000);
Delay(50);
LCD_WriteReg(0x0042, 0x0000);
Delay(50);
LCD_WriteReg(0x0048, 0x0000);
Delay(50);
LCD_WriteReg(0x0049, 0x013F);
Delay(50);
LCD_WriteReg(0x004A, 0x0000);
Delay(50);
LCD_WriteReg(0x004B, 0x0000);
Delay(50);
LCD_WriteReg(0x0044, 0xEF00);
Delay(50);
LCD_WriteReg(0x0045, 0x0000);
Delay(50);
LCD_WriteReg(0x0046, 0x013F);
Delay(50);
LCD_WriteReg(0x0030, 0x0707);
Delay(50);
LCD_WriteReg(0x0031, 0x0204);
Delay(50);
LCD_WriteReg(0x0032, 0x0204);
Delay(50);
LCD_WriteReg(0x0033, 0x0502);
Delay(50);
LCD_WriteReg(0x0034, 0x0507);
Delay(50);
LCD_WriteReg(0x0035, 0x0204);
Delay(50);
LCD_WriteReg(0x0036, 0x0204);
Delay(50);
LCD_WriteReg(0x0037, 0x0502);
Delay(50);
LCD_WriteReg(0x003A, 0x0302);
Delay(50);
LCD_WriteReg(0x003B, 0x0302);
Delay(50);
LCD_WriteReg(0x0023, 0x0000);
Delay(50);
LCD_WriteReg(0x0024, 0x0000);
Delay(50);
LCD_WriteReg(0x0025, 0x8000);
Delay(50);
LCD_WriteReg(0x004e, 0);
LCD_WriteReg(0x004f, 0);
}
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
18.01.2014, 00:56
Цитата Сообщение от Ftopyx
Вот рабочая инициализация на SSD1289 для этого проекта.Код:
... ...Код-то рабочий, но... неоптимально/некрасиво, фи. :-(

Многочисленные повторяющиеся кусочки {LCD_WriteReg(reg, val); Delay(50);} надо засунуть в функцию или хотя бы в макрос.
Ещё лучше - из таблицы выбирать (в коде при этом остаётся только маленький цикл while или for).
0
0 / 0 / 0
Регистрация: 23.08.2013
Сообщений: 206
18.01.2014, 01:09
Это код вызываемый единожды. Задержки там можно и вообще убрать.
Загонять это в таблицу стоит только если вариантов инициализации будет много, иначе дурная работа.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 54
18.01.2014, 02:47
Спасибо,
я сегодня тоже нашол этот код в главной странице без задержок,ну а как уже начал копаться в датах то не нашол рег. 0Х0025 и ещё непонятна опознания.
В этом 0х8989 ,в датах 0х1289,в других 0х9320 или что то иное...
А можно на прямую впихнуть инициацию лцд без этого распознания "else if (DeviceIdCode == 0x8989)"
Я как человек уже в возросте и испорчены бейсиком,асмом и начинающи по Си ,то много глупых вопросов,так что несудите строго...
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
18.01.2014, 13:41
Цитата Сообщение от tyvydos
В этом 0х8989 ,в датах 0х1289,в других 0х9320 или что то иное...
Старые версии чипов SSD1289 возвращали ID=0x1289, новые возвращают 0x8989. Другие чипы возвращают другие идентификаторы. Так, 0x9320 - это ID контроллера ILI9320.

Цитата Сообщение от tyvydos
А можно на прямую впихнуть инициацию лцд без этого распознания "else if (DeviceIdCode == 0x8989)"
В принципе - да. Если код драйвера будет использоваться всегда только для одного дисплея, и Вы уже добились его (и дисплея, и драйвера) работоспособности, то можно сэкономить десяток байт ;-) , убрав чтение/проверку ID дисплейного контроллера.
0
0 / 0 / 0
Регистрация: 23.08.2013
Сообщений: 206
18.01.2014, 15:56
Цитата Сообщение от tyvydos
Спасибо,
В этом 0х8989 ,в датах 0х1289,в других 0х9320 или что то иное...
А можно на прямую впихнуть инициацию лцд без этого распознания "else if (DeviceIdCode == 0x8989)"
Запустите код под отладкой. Поставьте бреакпоинт на строку проверки " if (DeviceIdCode ==" и посмотрите какое значение в DeviceIdCode содержится у вас.
0
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
18.01.2014, 17:15
Вопрос.
А демки со Specrum демо сцены пробовали запускать? Как воспроизводятся?
0
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92
18.01.2014, 18:36
Цитата Сообщение от KPK
Вопрос.
А демки со Specrum демо сцены пробовали запускать? Как воспроизводятся?
Давайте запустим :), что посоветуете?
0
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
18.01.2014, 19:21
Цитата Сообщение от Koryim
Цитата Сообщение от KPK
Вопрос.
А демки со Specrum демо сцены пробовали запускать? Как воспроизводятся?
Давайте запустим :), что посоветуете?

Может указания на демки в обсуждении этого топика посмотреть ЗD-движки для ZX Spectrum
и в ресурсах форума zx.pk.ru поискать.

P.S. Не оценивали ли какая максимальная "скорость" эмулируемого CPU Z-80 может быть достигнута в вашем проекте?
Интересно какой нибудь 3D вариант движка кто нибудь пробовал реализовывать в рамках STM32 контроллера?
0
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92
18.01.2014, 20:17
Цитата Сообщение от KPK
Может указания на демки в обсуждении этого топика посмотреть ЗD-движки для ZX Spectrum
и в ресурсах форума zx.pk.ru поискать.

P.S. Не оценивали ли какая максимальная "скорость" эмулируемого CPU Z-80 может быть достигнута в вашем проекте?
Интересно какой нибудь 3D вариант движка кто нибудь пробовал реализовывать в рамках STM32 контроллера?
Почитал 5 страниц, закрыл. Может просто сюда ссылку скинуть на файл *.tap? По скорости думаю х2 точно можно.
0
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
18.01.2014, 20:21
http://www.worldofspistrum.org/infoseek ... id=0007726
0
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
18.01.2014, 20:32
Цитата Сообщение от Koryim
Почитал 5 страниц, закрыл. Может просто сюда ссылку скинуть на файл *.tap? По скорости думаю х2 точно можно.
Читать длинные темы можно и с последних страниц:)
Например эти skrju демо группа

P.S. X2 - существует потенциальная возможность и реализации других моделей компьютеров линейки ZX Spectrum.:)
0
1 / 1 / 0
Регистрация: 18.10.2013
Сообщений: 92
18.01.2014, 21:37
Цитата Сообщение от KPK
Цитата Сообщение от Koryim
Например эти skrju демо группа

P.S. X2 - существует потенциальная возможность и реализации других моделей компьютеров линейки ZX Spectrum.:)
http://www.worldofspistrum.org/infoseek ... id=0007726 Загрузил эту, работает, но с эффектами на бордюре лажа, как и в Unreal. демки 128 не идут.
0
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
18.01.2014, 23:50
Цитата Сообщение от KPK
Например эти skrju демо группа
лучше эти http://zxaaa.untergrund.net/vi... Triebkraft
Цитата Сообщение от KPK
P.S. X2 - существует потенциальная возможность и реализации других моделей компьютеров линейки ZX Spectrum.:)
главно чтоб не на форте.
Цитата Сообщение от Koryim
работает, но с эффектами на бордюре лажа, как и в Unreal.
ну правильно, потому что сделано под оригинальный спек. есть фиксы под "наши" клоны, но они не в tap.

вот еще классика: http://www.worldofspistrum.org/infoseek ... id=0007538
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.01.2014, 23:50

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
260
Закрытая тема Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru