Вход

Просмотр полной версии : Компьютер "Aleste 520EX"



Страницы : 1 2 [3]

Sherlock
29.10.2022, 17:00
Чуть оффтопной лирики. Есть такой синтезатор-сэмплер - Emulator II. Как говорят - широко известен в узких кругах. Использовался Стиви Уандером, Pet Shop Boys, Depeche Mode и многими другими известными людьми. Знаменитый звук японской флейты сакухачи (кажется, так называется) - как раз Emulator II. Для этого аппарата существует весьма большое количество дисков с самыми разными инструментами. Если есть интерес - на YouTube довольно много видео с этим аппаратом. Собран он на комплекте Z80 (в схеме аж два процессора), использует DMA. 8-канальный сэмплер, 512 килобайт памяти. Основное отличие от обычного сэмплера - на выходе каждого канала установлен управляемый фильтр. Т.е. это можно назвать настоящим синтезатором - кроме обычного воспроизведения сэмплов, он выполняет их пост-обработку в реальном времени. Разумеется, есть ADSR. Я сперва решил собрать этот синтезатор по найденной схеме. Схема очень большая, работы много. Всё бы ничего, но, насколько я знаю, в схемах нередко присутствуют ошибки, в том числе - сознательно введённые, чтобы осложнить пиратское копирование. Тогда я решил сделать функциональный аналог. Т.е. будут использоваться оригинальные диски с инструментами (точнее - их образы), но железо будет другое. У меня два варианта - контроллер STM32 (вся работа, от индикации до воспроизведения) и DSP ADAU от AD для пост-обработки, либо что-то вроде Magic Sound, но со своей памятью и какой-нибудь пост-обработкой (вариантов управляемых фильтров довольно много). Работа продвигается медленно, пока что немного освоился с DSP (сделал простой 4-голосный синтезатор с управлением от MIDI-клавиатуры), немного повозился с STM32 в плане воспроизведения сэмплов и помыслил по второму варианту.
Так, ладно, наговорил много, собственно, к чему это - из "Алесты" реально можно сделать весьма приличный музыкальный инструмент. И база для этого есть. Как было сказано выше, "Алеста" не успела обрасти большим количеством софта, поэтому некоторые изменения в архитектуре не приведут к фатальным последствиям. И есть шанс, извиняюсь за выражение, заставить этот, не самый известный, компьютер заиграть новыми красками. Нужно только делать...

Все это очень интересно. Где постмотреть схемотехнику?



Кстати, про увеличение каналов у Magic Sound - подразумевается каскадирование контроллеров DMA? Ведь используемый контроллер поддерживает только 4 канала.

Я думаю все генераторы адреса кроме процессора поставить внутрь FPGA. Кстати о какой FPGA вы говорили? Я вот смотрю в современных сериях или не flat pack или только 144 пина

ivagor
29.10.2022, 17:12
Про увеличение числа каналов вопрос - кто будет дорабатывать проигрыватель? Это касается и некоторых других улучшений, выходящих за рамки оригинала, но мне больше интересен именно проигрыватель.

AlexBel
29.10.2022, 17:25
Все это очень интересно. Где постмотреть схемотехнику?

Если схемотехнику Emulator II - https://disk.yandex.ru/i/7yci_oXB3K3Pza


Я думаю все генераторы адреса кроме процессора поставить внутрь FPGA.

Да, именно так. Да и сам процессор, на начальном этапе, будет внутри FPGA. Я уже начал потихоньку крутить вопрос, чтобы не заморачиваться с платой и отдельными компонентами, использую девборду Altera DE1 - на ней есть всё, что нужно. Есть и модели 6845, у меня их, оказывается, три штуки. Правда, две из них почти одинаковые.


Кстати о какой FPGA вы говорили? Я вот смотрю в современных сериях или не flat pack или только 144 пина

Например - EP2C20Q240C8N - 240 ног. Или EP2C8 - на 208 ног.

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


Про увеличение числа каналов вопрос - кто будет дорабатывать проигрыватель? Это касается и некоторых других улучшений, выходящих за рамки оригинала, но мне больше интересен именно проигрыватель.

Думаю, об этом говорить ещё рано, всё ещё только на уровне теории. Но вряд-ли ошибусь, если скажу, что таких людей очень мало. Очень. Ты - один из них :)

Sherlock
29.10.2022, 17:39
Про увеличение числа каналов вопрос - кто будет дорабатывать проигрыватель? Это касается и некоторых других улучшений, выходящих за рамки оригинала, но мне больше интересен именно проигрыватель.

Я могу сделать, но если это сделаете вы или кто другой -- было бы отлично. Теперь по остальному, я прямо сейчас без работы. У меня есть проекты по софту, но когда устаю от программирования меня тянет на железки. Не могу бить пяткой в грудь и говорить все сделаю быстро и всрок -- может и не сделаю или не быстро.
Вообще осуждение в основном для превизуализации. Для того чтобы мотивировать себя. А там посмотрим.

И так есть три отдельные работы

1) Схемотехника и проектирование ПП + SI,PI верификация
2) Проектирование FPGA
3) Работа с софтом BIOS, BOOT обновление прошивок
4) Софт микроконтроллера

Так как проект в основном как отдушина от софта то (3) мне не интересно
Также я не очень люблю работу (2) с FPGA, быи проекты, но мне не зашло, не увлекает
А вот пункт первый (1) и (4) это мне действительно интересно и просто.

Я это к тому, хотя в данный момент об этом рано говорить, но если проект сдвинется с мертвой точки то пунктов (2) и (3) хотелось бы найти желающих взять на себя часть отвественности.

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

P.S. Подводя итог, если есть желающие взять на себя (2) и (3) или (4), а также участвовать в ревизии схемотехники пишите.
ОБещаю что прислушаюсь к любому мнению по ходу работы

AlexBel
29.10.2022, 18:09
Проект мне интересен, буду, периодически, над ним работать (у меня сейчас в работе несколько проектов и я всё время "переключаюсь" между ними), но в команде я работать не могу. Буду отписываться здесь о ходе работы при положительных результатах. Расчехляю девборду...
Если чем-то смогу помочь своими скромными знаниями и опытом - пожалуйста.

ivagor
29.10.2022, 18:11
Насчет проигрывателя я совсем не готов, думал может кто-то уже занимался этим вопросом более серьезно, могу только пожелать успехов в этом деле.

Sherlock
29.10.2022, 18:36
Насчет проигрывателя я совсем не готов, думал может кто-то уже занимался этим вопросом более серьезно, могу только пожелать успехов в этом деле.

Ок. Нет проблем. :)

n_sonic
10.11.2022, 11:23
Народ, такой вопрос... А что дают две доработки на плате? Кто-то может хоть приблизительно пояснить?

AlexBel
27.11.2022, 08:25
Всем привет.
Решил сделать родную клавиатуру для "Алесты" со схемой, соответствующей МС7007 и расположением кнопок, максимально к ней приближенном. Использовать клавиатуру PS/2 было не очень удобно, разве только в качестве временной замены. Клавиатура была изготовлена:
https://i.ibb.co/GR4rnk9/IMG-20221127-075005.jpg (https://ibb.co/fHzTqt9)
Но, после сборки, обнаружилась проблема - кнопки ": *" и "Ъ _" перепутаны. Сперва я подумал, что ошибся в ходе работы над проектом, сверился со схемой, которой руководствовался. Схема из скана паспорта на клавиатуру, найденного в Интернет. Ошибки нет, кнопки подключены в соответствии со схемой. Конечно, можно порезать дорожки и изменить подключение. Можно просто поменять крышки кнопок местами - вряд-ли это вызовет большие неудобства при использовании клавиатуры. Но, всё же, ситуация странная - клавиатура сделана по схеме из паспорта, но две кнопки перепутаны. Поискав в Интернет, нашёл ещё две схемы клвиатуры, причём тоже явно откуда-то отсканированные. Одну я сразу отложил в сторону - на ней, совместно с символом "Ъ" нарисована фигурная скобка, т.е. уже ошибка. А вот на второй схеме две проблемные кнопки поменяны местами и соответствуют тому, что отображается при нажатии в "Бейсике" и командной строке MSXDOS. Все кнопки были проверены мультиметром.
Собственно, к чему вся эта прелюдия - есть просьба к тем, у кого реальная клавиатура МС7007. Пожалуйста, проверьте, какие кнопки к каким контактам подключены. Если лень проверять все кнопки, то, хотя бы, проверьте те две, о которых я писал выше. Или существует, как минимум, две разновидности МС7007 или схемы клавиатур, гуляющие по Интернет, содержат ошибки.

И ещё вопрос по настройке параметров в меню, вызываемом сразу после сброса удержанием кнопки "ИСП". При установке времени и даты при нажатии "пробел" происходит инкремент устанавливаемого значения. Если "проскочить" нужное значение, есть возможность его уменьшить? Вариант "прокрутить по кругу" весьма сомнителен, во всяком случае, при установке года - я дошёл до 2118 года и неизвестно, сколько ещё "мотать".
https://i.ibb.co/jgY8nnv/IMG-20221127-075057.jpg (https://ibb.co/SRg6FFX)
P.S. То, что называется "смотрю и не вижу" - сам же разместил фотографию, где написано про SHIFT :)

Дмитрий2012
27.11.2022, 11:00
И ещё вопрос по настройке параметров в меню, вызываемом сразу после сброса удержанием кнопки "ИСП". При установке времени и даты при нажатии "пробел" происходит инкремент устанавливаемого значения. Если "проскочить" нужное значение, есть возможность его уменьшить? Вариант "прокрутить по кругу" весьма сомнителен, во всяком случае, при установке года - я дошёл до 2118 года и неизвестно, сколько ещё "мотать".
В меню же написано шифтом + стрелками:)

AlexBel
27.11.2022, 11:20
В меню же написано шифтом + стрелками:)

Вот, что бывает, когда глаз "замыливается"....

AlexBel
02.12.2022, 05:15
Ранее я выкладывал здесь схему матрицы клавиатуры МС7007, которую рисовал сам. Несколько дней назад сделал реплику МС7007 (https://ibb.co/7nQfwxm) и обнаружил, что перепутаны две кнопки - "* :" и "Ъ _". Так что схему матрицы буду перепроверять, а той, что выложил ранее, лучше на сто процентов не доверять. Когда полностью всё выясню, отпишусь.

tnt23
03.08.2023, 18:31
AlexBel, есть обновления по клавиатуре?

AlexBel
03.08.2023, 18:46
Не, только то, что я прислал. У меня есть ещё проект 7007, но там, по сути, то же самое, только сделана оптимизация - убраны некоторые виасы и некоторые дорожки проведены по-другому. Но я этот вариант так и не закончил и не заказывал.

RW9UAO
14.10.2024, 08:08
а кто-нибудь объясните на пальцах как в алесте сделан раздельный доступ в ОЗУ-ПЗУ
на схеме D67 занимается выбором ПЗУ при обращении процессора nMREQ + nRD и подключает два буфера из ОЗУ.

при записи в порты CRT у меня рушится вся картина мира. написал утилиту, стартую с 0000h, пишу непосредственно в регистры, пользуясь только регистрами процессора. ОЗУ не затрагиваю. из 16 регистров 12 пишется нормально (смотрю на лог анализаторе), потом может испортиться nROMEN, пролетают лишние nRW и разное такое. прерывания запрещены первой же командой DI.

есть ли тестовое ПЗУ для запуска свежесобранного сабж? желательно с исходниками.

UncleDim
14.10.2024, 15:46
обнаружил, что перепутаны две кнопки - "* :" и "Ъ _".
если поразглядывать в инете фотки разных мс7007 - можно обнаружить ТРИ варианта расположения ":", "/" и "ъ"
пленка наверняка одна и та же, а колпачки (под конкретный комп/драйвер) и переставить можно..

Sergey
16.04.2025, 00:18
Тема, конечно, протухла, но, тем не менее, оставлю это здесь - вдруг кому пригодится:
Образы всех ПЗУ на verilog, в виде .mif и .coe (64к ПЗУ только в виде в виде .mif и .coe).

Копейкин
16.04.2025, 08:46
А сама FPGA модель Алесты существует?

xolod
16.04.2025, 09:52
На сколько мне известно, на fpga Alesta520 нету.

CityAceE
16.04.2025, 14:25
Готовой нет, но у RW9UAO есть определённые результаты по её созданию.

RW9UAO
16.04.2025, 16:02
вы слишком оптимистичны.
судя по некоторым материалам, у авторов есть под альтеру.

Sergey
16.04.2025, 16:55
А есть у кого действующая ЭВМ? - Как оно? Я смотрел видео о её разработке и подумал, что неплохо бы себе собрать. Но посмотрел на ютубе видео с играми на ней, а потом видео с комментариями одного человека, который собрал новодел, и энтузиазм что-то поутих. В виде реализации на ПЛИС было бы неплохо заиметь сей аппарат, но в оригинальном виде, судя по всему, удовольствия от этого мало.
Сам-то я не осилю, но если кто-то загорится, то я бы поддержал бы хотя бы морально, ну и каким-то простецкой помощью, хотя бы образами ПЗУ, что бы ему с этой малоинтеллектуальной рутиной не возиться.

RW9UAO
16.04.2025, 17:54
с переменным успехом бьюсь над таймингами. ума не хватает.
tang nano 20k и tang 25k. проект собираешь вроде дышит. чуть правки - тайминги ушли, всё развалилось.

Sergey
16.04.2025, 19:16
с переменным успехом бьюсь над таймингами. ума не хватает.
tang nano 20k и tang 25k. проект собираешь вроде дышит. чуть правки - тайминги ушли, всё развалилось.
Да, оно, судя по всему, и оригинальное не особо желает работать. Что ж, дорогу осилит идущий.

xolod
17.04.2025, 18:15
RW9UAO, Ну это дело обычное, надо смотреть что бы код был синхронным. В самом простом случае, чтобы клоки регистров были от одного основного клока от PLL. Ну очень желательна иметь миним клок доменов.

Sergey
18.04.2025, 02:47
RW9UAO, Ну это дело обычное надо смотреть что бы код был синхронным. В самом простом случае, чтобы клоки ресистров были от одного основного клока от PLL. Ну очень желательна иметь миним клок доменов.

Оригинальный дизайн производит впечатление, что о синхронности там не особо заботились (или не было возможности). К слову, CОЗУ КР1802ИР1 по уровню работает. Я думаю, дизайн такой, - не под ПЛИС. Переделывать надо: разбираться до мелочей, что авторы имели ввиду в каждом узле, и реализовывать это правильно на HDL. А от "схемного ввода", думаю, толку будет мало.

xolod
18.04.2025, 10:10
Оригинальный дизайн производит впечатление, что о синхронности там не особо заботились (или не было возможности). К слову, CОЗУ КР1802ИР1 по уровню работает. Я думаю, дизайн такой, - не под ПЛИС. Переделывать надо: разбираться до мелочей, что авторы имели ввиду в каждом узле, и реализовывать это правильно на HDL. А от "схемного ввода", думаю, толку будет мало.

Полностью согласен. Но по другому и не бывает. От схемного ввода надо отказатся сразу. И разбирать каждый модуль что и как он делает. Самое сложное как правило это контролёр DRAM, видео контролёр и контролёр дисковода. Остальное проще. Рекомендую не изобретать велосипед и взять уже готовый модули например из разных ядер Mist и Mister. Начать с Z80 подцепить к нему ROM потом RAM ( с начало можно в виде небольшого BRAM, потом можно будет переделывать на SDRAM). Проверить как выполняется код из ПЗУ. И дальне делать другие части. Ещё важно сразу определить мастер клок один или два. Чаще всего берут Pixelclock умноженный на два(для работы в scandoublerа).

Sherlock
10.08.2025, 14:51
Если у кого то есть желание и возможность создания FPGA, то могу помочь. Пишите, созвонимся обсудим.

AlexBel
10.08.2025, 15:10
Если у кого то есть желание и возможность создания FPGA, то могу помочь. Пишите, созвонимся обсудим.

Насколько я помню, у RW9UAO (https://zx-pk.ru/threads/20769-kompyuter-quot-aleste-520ex-quot.html?p=1212999&viewfull=1#post1212999) есть проект "Алесты" на FPGA, он работает, но чего-то не хватает...

Sherlock
10.08.2025, 16:41
Спасибо за информацию. Очень интересно

RW9UAO
10.08.2025, 18:35
позориться так до конца.
https://disk.yandex.ru/d/-jRJr5UUSJOqtA
оно под tang20k с набортной sdram
я не настоящий сварщик

AlexBel
10.08.2025, 19:12
Когда я начинал свой проект (приостановлен, пока не знаю, когда продолжу), решил разорвать "Алесту" на два компьютера, т.е. отделить СРС. По сути, это два компьютера на одной плате, использующие общие компоненты. Кому-то нужно СРС, кому-то - сама "Алеста". Чисто моё рассуждение и мой подход, никому не навязываю и не предлагаю.

Sherlock
15.09.2025, 17:01
Коллега, ваша работа впечатляет. И пусть вы «не сварщик» — у вас несомненно есть талант, чтобы им стать.
И ваш труд стал для меня ключевым источником вдохновения. За что — огромная благодарность.

CityAceE
15.09.2025, 22:13
работа впечатляет
А между тем у Сергея уже и BASIC запускается. Помог бы кто решить проблемы, с которыми он бьётся в одиночку.
https://pic.maxiol.com/thumbs2/1757963612.780858384.photo20250914091830.jpg (https://pic.maxiol.com/?v=1757963612.780858384.photo20250914091830.jpg&dp=2)

Sherlock
15.09.2025, 22:26
А между тем у Сергея уже и BASIC запускается. Помог бы кто решить проблемы, с которыми он бьётся в одиночку.
https://pic.maxiol.com/thumbs2/1757963612.780858384.photo20250914091830.jpg (https://pic.maxiol.com/?v=1757963612.780858384.photo20250914091830.jpg&dp=2)

Замечательно если запускается. И плохо что проблемы. Чем помочь? Можно услышать, что за проблемы?

RW9UAO
16.09.2025, 06:15
здрасте!
я опять наступил в неполную дешифрацию адресов. конкретно порт 7Fxx. в биосе была запись в порт 7Схх для отключения ПЗУ со страницы 0.
на сейчас у меня грузится всё, но я пока не реализовал видео режим 3 для ХДМИ.
есть некие фундаментальные косяки.
CRT формирует видеосигнал, для ХДМИ я использую готовое ядро. синхронизации между ними никакой. но я могу сделать буфер строки и тогда картинка есть и правильная. проблема в несовпадении частоты кадров. памяти на целый кадр у меня нет.
выкинуть mc6845 и лазать контроллером ХДМИ вместо неё в память - тоже некошерно, разные частотные домены. у алесты 16/13.33 мгц у ХДМИ - 27мгц. делать FIFO и прочие прелести - я не настоящий сварщик
я завел 32кб двупортовой памяти, пишу параллельно в неё и в ОЗУ алесты, затем распаковываю байт видеопамяти в пиксели через палитру и тд.
но и тут есть нюанс. можно быстро подменить С000 ОЗУ через маппер страницу. например с 3 на 7. CRT будет показывать корректно, я - нет.
это мне нужно 128кб чтобы всё параллельно ОЗУ отслеживать.

пока я занят загрузкой биоса алесты с набортной spi флэшки в sdram для эмуляции ПЗУ. для высвобождения блочной памяти.
потом в планах эмуляция FDC, что я уже делал для железной ямахи MSX.

Sherlock
16.09.2025, 08:47
Коллега. А почему у вас не совпадает частота кадров нельзя ли поподробней? В моем понимании нужна только буферизация строки. Которая отображается два раза.
Кстати. Для астрал была если я не ошибаюсь поддержка двух вариантов частоты кадров 50 и 60 герц. Управлялось битами (перемычками па ,ppi) посмотрите оригинальную схему амстрад. Там 2 или 3 перемычки на ppi. Одна как раз и есть частота кадров. Для алесты алесты можно просто поменяйте программу в БИОС. Это каконично для нее.

На мой взгляд 60 Гц должно работать для hdmi.

RW9UAO
16.09.2025, 08:56
я использую режим 720х576 50Гц (625 линий) и как-то 312 линий от mc6845 не могу впихнуть. ползет вниз. добавляешь строку - ползет вверх.
у хдми корки есть лапка reset, её можно использовать для синхронизации когда у mc6845 начинается кадр. но тогда ХДМИ встает в непонятный режим 573 строки и нормальными мониторами не опознается.
хз. есть куда подумать.
пока заведу основную логику, демки покручу.

Sherlock
16.09.2025, 13:15
Рекомендую попробовать 60 герц.
Коллега, а какая у вас частота CLK на шине HDMI?

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

В исходном коде частота 27МГц. Но в реальности она точно такая?

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

Изучив бегло ваш код верхнего уровня. У меня возник вопрос к блоку кода always FF который генерирует FF видео reset. Трудно продидактить конечную форму сигнала. Но одно важнейшее условие он должен быть длиной один пиксель клок.
Я думаю что вы долго с этим разбирались тестировали изменяли эта работа сложная. Но тут очень важно каждая длина этого сигнала может поломать работу HDMI модуля.

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


я завел 32кб двупортовой памяти, пишу параллельно в неё и в ОЗУ алесты, затем распаковываю байт видеопамяти в пиксели через палитру и тд.
но и тут есть нюанс. можно быстро подменить С000 ОЗУ через маппер страницу. например с 3 на 7. CRT будет показывать корректно, я - нет.
это мне нужно 128кб чтобы всё параллельно ОЗУ отслеживать.


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

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

P.S. Возможно стоит не использовать HDMI, а вместо этого использовать DVI. Это проще.
Кстати то ядро которое вы используете работает на двух clk. Один clk_pixel_x5, а другой его деление на 5 clk_pixel. Второй не clke так было бы правильно а именно clk.
Работать должно, но на мой взгляд это спорное решение.

AlexBel
16.09.2025, 13:32
P.S. Возможно стоит не использовать HDMI, а вместо этого использовать DVI. Это проще.

А разве они, кроме звука, чем-то отличаются?

Sherlock
16.09.2025, 15:04
А разве они, кроме звука, чем-то отличаются?

Ключевое отличие заключается в сложности реализации. HDMI требует использования готовых сторонних ядер, которые поддерживают множество режимов и функций (аудио, CEC, инфофреймы), но при этом:

* Создают зависимости от чужого кода
* Усложняют отладку из-за своей универсальности
* Вводят избыточность для задач, где нужно только видео

Проблема тактирования в рассмотренном модуле - использование двух раздельных тактовых сигналов (clk_pixel и clk_pixel_x5), когда правильнее было бы использовать:

* Один основной тактовый сигнал (clk_pixel_x5)
* Строб-сигнал разрешения (pixel_enable) для домена с меньшей частотой

Такое решение было бы более надежным и соответствовало бы лучшим практикам проектирования цифровых систем.

Создание собственного DVI-модуля позволяет:

* Полный контроль над всей логикой работы
* Упрощенная архитектура без избыточных функций
* Прозрачная отладка - все сигналы понятны и предсказуемы
* Оптимизация под конкретную задачу вывода ретро-видео

AlexBel
16.09.2025, 15:43
В любительских поделках не используются хитрые режимы высокого разрешения, защита и т.п., поэтому реализация DVI от HDMI ничем не отличается. Если не считать звука, который в HDMI тоже не всегда реализовывают. Я не в курсе причин проблемы в конкретном рассматриваемом модуле, но, сколько я возился с HDMI и DVI, всё сводилось к тому, чтобы взять сформировать видеосигнал, соответствующий одному из видеостандартов, взять его пиксель клок и подать на схему HDMI или DVI. А для удобства, этот пиксельклок формировать из тактовой, в 5 раз большей частоты, чтобы и её можно было подавать на синхронизатор. Ну и кадровые-строчные - тоже. Кстати, 50Гц тоже лопает, правда, не поручусь, что это справедливо для всех дисплеев/телевизоров.
Попросту говоря, взяли какой-нибудь самодельный видеоконтроллер HDMI (например, на Raspberry Pi Pico) и, через простой переходник, воткнули в DVI. И будет работать.

Sherlock
16.09.2025, 17:34
Дело не в потребительских качествах интерфейсов а процессе разработки и в ресурсах как аппартных так и человеческих.

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

P.S. С потребителькой точки зрения. HDMI лучший вариант однозначно.

AlexBel
16.09.2025, 18:07
А, в данном случае, в чём разница между DVI и HDMI? Если не считать звука. В плане разработки, реализации.

RW9UAO
17.09.2025, 07:56
занимаюсь загрузкой биоса из набортной флэши. в целом работает. 4 странички по 16кб - на глаз 4 секунды. проинициализировал CRT и мигаю бордюром. надо добавить вывод текста, ну что shift - basic, del - setup.

Sherlock
17.09.2025, 10:20
занимаюсь загрузкой биоса из набортной флэши. в целом работает. 4 странички по 16кб - на глаз 4 секунды. проинициализировал CRT и мигаю бордюром. надо добавить вывод текста, ну что shift - basic, del - setup.

4 сек это только передача из флешки или все вместе с boot z80?

RW9UAO
17.09.2025, 10:55
с момента включения до появления синего экрана с "алеста - локомотив". по сути - загрузка 64кб из флэшки в sdram.

Sherlock
17.09.2025, 23:27
И всетаки, как вы планируете сделать синхронизацию? Если core HDMI ожидает 27МГц, а частота пикселов CPC 6128 16 MHz. Прошу объясниь как вы решаете задачу...

RW9UAO
18.09.2025, 05:53
дублированием 64кб памяти и отдельным видеоконтроллером для ХДМИ. со всеми future и cursor для алестовских вывертов.
пока занят другим.

Sherlock
18.09.2025, 14:31
дублированием 64кб памяти и отдельным видеоконтроллером для ХДМИ. со всеми future и cursor для алестовских вывертов.
пока занят другим.

Отлично. Я же тогда попытаюсь сделать свое решение. Если заработает я тут опубликую.

RW9UAO
18.09.2025, 15:53
https://disk.360.yandex.ru/d/Uqpr_k25pB1P5A
более синхронный дизайн

backa
20.09.2025, 16:05
HDMI требует использования готовых сторонних ядер

можно и без "ядер" обойтись))) вот тут (https://www.fpga4fun.com/HDMI.html) все изящно и красиво и самое главное - портируемо на любой FPGA!!
без привязки к несовместимым библиотечным элементам от производителя кристалла FPGA

RW9UAO
20.09.2025, 16:25
звук. хдми делается просто. а вот звук.

Sherlock
28.09.2025, 19:59
можно и без "ядер" обойтись))) вот тут (https://www.fpga4fun.com/HDMI.html) все изящно и красиво и самое главное - портируемо на любой FPGA!!
без привязки к несовместимым библиотечным элементам от производителя кристалла FPGA

Все не так просто. Одно дело генерировать видео а другое дело адаптировать существующий видеовыход.

Проблема интеграции контроллера 6845 (Amstrad CPC) с HDMI:

Для стандарта HDMI 720p (PAL) требуется 625 строк. Контроллер 6845 по умолчанию генерирует 312 строк. Даже с учетом теоретической возможности получить 312.5, на практике используется 312.

Это делает метод удвоения строк неприменимым. Наиболее простым и гарантированным решением видится полный захват кадра в буфер.

Рекомендация: Продолжить разработку с использованием полнокадрового буфера.
Моя цель: Параллельно я буду искать решение, позволяющее избежать захвата всего кадра.

CodeMaster
29.09.2025, 09:49
Это делает метод удвоения строк неприменимым.
А если все строки удваивать, а первую или последнюю утраивать?

Sherlock
29.09.2025, 11:56
А если все строки удваивать, а первую или последнюю утраивать?
Преобразование временных параметров видеопотока

Имеется два видеопотока с разным строчным разложением.

Исходный кадр:

Строки: 1, 2, 3, 4

Время строки: l1

Время кадра: f1 = l1 * 4

Выходной кадр:

Строки: A, B, C, D, E, F, G, H, J

Время строки: l2

Время кадра: f2 = l2 * 9

Алгоритм преобразования строк

Для преобразования 4 строк в 9 используется метод дублирования:

Каждая исходная строка дублируется дважды.

Поскольку 4 * 2 = 8, а требуется 9 строк, последняя (четвертая) строка дублируется трижды.

Результат преобразования:

1, 1, 2, 2, 3, 3, 4, 4, 4

Синхронизация временных параметров

Требуется выполнить два условия синхронизации:

✅ Условие 1: l1 == l2 / 2

Это условие выполняется за счет настройки длительности строки.

Пример: Если l1 = 64 мкс, то l2 = 32 мкс.

❌ Проблема с Условием 2: f1 == f2

При попытке выполнить это условие возникает несоответствие:

f1 = l1 * 4

f2 = l2 * 9

Подставляя условие l2 = l1 / 2, получаем:

f2 = (l1/2) * 9 = l1 * 4.5

Вывод:

f1 = l1 * 4
f2 = l1 * 4.5

Для исходного потока из 4 строк и выходного из 9 строк, где каждая входная строка дублируется, невозможно одновременно соблюсти оба условия:

Время новой строки равно половине времени исходной (l2 = l1 / 2).

Времена кадров обоих потоков равны (f1 = f2).

Это противоречие возникает из-за того, что отношение количества строк (9/4 = 2.25) не равно отношению длительностей строк (2/1 = 2).

CodeMaster
29.09.2025, 13:42
Пример: Если l1 = 64 мкс, то l2 = 32 мкс.
Соотношение времени строк фиксировано? Нельзя сделать l2 = 28.(4) мкс.?

Sherlock
29.09.2025, 14:11
Соотношение времени строк фиксировано? Нельзя сделать l2 = 28.(4) мкс.?

Все упирается в коэффициент совместимости. И если мы хотим, чтобы просто работала операционная система, то можно менять все что угодно. Но если мы хотим полной совместимости, там где приложение использует прерывание, который кстати у Amstrad несколько в одном кадре, для того, чтобы изменить какой-либо регистр видеоконтроллера или палитры, Требуется очень точное соблюдение временных характеристик всей системы. Разработчик выбирает, что для него важнее полная совместимость или минимизация сложности системы. Я очень сильно стараюсь сделать стопроцентную совместимость, но боюсь, что это будет невозможно. Рано делать какие-то выводы.

Однако, замечу, что даже небольшой изменение частоты входных строк приводит к необходимости буферизации всего кадра из-за накопления ошибки. Если у RW9UAO уже есть рабочее решение с буферизации всего кадра, то лучше оставаться с этим вариантом до тех пор пока не появится лучшая альтернатива. А я надеюсь, что она появится.

RW9UAO
30.09.2025, 18:14
нет у меня 600кб на весь кадр. от силы 64кб.

LeoN65816
01.10.2025, 07:10
Позвольте "вставить пять копеек". Для полной совместимости оставить стандартный аналоговый видеовыход с ТВ-развёрткой, и использовать пропатченный подходящий монитор (https://zx-pk.ru/threads/34483-lcd-vga-umeyushchie-15-kgts-strochki-i-50-gts-kadrovoj.html?p=1214039&viewfull=1#post1214039).

RW9UAO
01.10.2025, 08:30
ну так-то можно и к ТВ с RGB подключить, или переходник от АлексЕКБ.
просто есть готовая монтажка и лепить туда еще одну малину - ну такое
https://sun9-14.userapi.com/s/v1/if2/QVizlrePNQCNgr-59jfNjvwwqN5KCHLKg9GL5aZpncW1nLo0kDBoLH-3dJpkUEviocBeteGda25Nbp4-9FSgYJpG.jpg?quality=95&as=32x18,48x27,72x40,108x61,160x90,240x135,360x202 ,480x270,540x304,640x360,720x405,1080x607,1280x720&from=bu&cs=1280x0

AlexBel
01.10.2025, 12:30
переходник от АлексЕКБ
Разве он принимает аналоговый сигнал?

ivagor
01.10.2025, 14:21
Конвертер АлексаЕкб не подходит для компов типа Aleste, Союз-Неон или Вектор по двум причинам 1) всего 4 цифровых входных видеосигнала RGBI (не считаю синхру); 2) ограничение по пиксельклоку.

AlexBel
01.10.2025, 15:21
Так и я про то же, он для цифровых сигналов...

RW9UAO
01.10.2025, 16:19
и совсем-совсем нельзя добавить еще два провода?
если брать сразу с регистра цвета. и фиг с ним с BLANK.

AlexBel
01.10.2025, 16:59
Даже если представить ещё два провода, они не спасут. Я могу попробовать включить "Алесту" через такой конвертер (https://aliexpress.ru/item/1005005605083956.html?sku_id=12000033723024393&spm=a2g2w.productlist.search_results.1.1fa84be12cN 1p5), но не раньше выходных

ivagor
01.10.2025, 17:18
и совсем-совсем нельзя добавить еще два провода?
Ну а с ограничением по пиксельклоку что делать? Полностью переделать прошивку (кто этим займется)?

Sherlock
05.10.2025, 10:02
Эволюция архитектуры проекта Aleste 520EX HDMI

За 3 недели интенсивной разработки мы прошли через несколько архитектурных итераций, пытаясь совместить оригинальную 16 МГц систему с современным HDMI:

Проблемы двухдоменного подхода (16 MHz CPU + 27 MHz HDMI):

❌ Несоответствие временных параметров (31.8 µs vs 32 µs строки)
❌ Необходимость буферизации из-за расхождения частот кадров
❌ Усложнение скандаблера и рост латентности
❌ Невозможность идеально согласовать все графические режимы (512x212, 640x200, etc.)
❌ Сложности timing closure между clock domains

Принципиально новое решение:

Переход к единому 27 MHz clock домену с контролируемой приостановкой процессора.

Ключевые преимущества:

✅ Идеальная временная точность эмуляции оригинальной платформы
✅ Гарантированное соответствие циклов процессора на строку/кадр
✅ Простота реализации и надежность timing closure
✅ Возможность "турборежима" при отключении приостановки
✅ Единая архитектура для всех графических режимов

Суть: Вместо борьбы с расхождением частот - контролируемое замедление процессора до оригинального темпа работы, сохраняя при этом современный HDMI output.

Это архитектурно чистое решение, отделяющее "время симуляции" от "реального времени отображения".

P.S. Я рекомендую этот подход для любых проектов на ретро-платформах, сталкивающихся с аналогичными проблемами синхронизации между устаревшими системами и современными видеоинтерфейсами.

RW9UAO
06.10.2025, 14:05
от вас реализация будет? в этом году?

Sherlock
06.10.2025, 14:42
Обновление проекта: HDMI Скандаблер и CRTC модуль готовы

Базовые видео-компоненты для проекта Aleste теперь работают:

✅ HDMI скандаублер - конвертация 15кГц в 31кГц с центрированием

✅ CRTC совместимый с MC6845 - генерация видео-таймингов и адресов памяти

Дальше: Графика Aleste 520EX

Перехожу к:

• Пиксельному процессору

• Цветовой палитре (16/256 of 4096 цветов)

• Генератору адресов видеопамяти

Основа для вывода изображения готова, теперь строим графическую систему.

https://cdn.hackaday.io/images/5623801759749620942.file-1759749620862-100773458

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


от вас реализация будет? в этом году?

Да, мне хотелось бы его закончить до конца года.

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

График работ

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

Current Implementation Status

Module --- Status, Test Coverage, Notes
✅ Z80 Core -- Works, ZEXALL
✅ PPI (i8255) --- Works, Loopback
✅ CRTC (6845) --- Works, Read/Write & Sync
✅ AY-3-8910 --- Works, Read/Write & Synthesizer
✅ FDC (u765) --- Works, Read/Write Sector
✅ Simple UART --- Works, Loopback data transfer, Not CPC standard
✅ MMU Legacy --- Works, Advanced test
✅ MMU Native --- Works, Advanced test
✅ SDRAM Controller --- Works, Read/Write
✅ PIC --- Works, Read/Write/Interrupt
✅ NMI Logic --- Works, Read/Write/Interrupt
✅ System DMA --- Works, Read/Write
✅ Magic Sound 2 --- Works, In Progress
✅ Scan Doubler --- Works, Image on TV
✅ HDMI Controller --- Works, Image on TV
❓ Video Core --- In Progress
❓ Video GPU --- Implemented, In Progress
❓ MCU SPI Slave --- In Progress

Где статус означает:

• Works -- означает работу синтетических тестов. Без реального тестирования в железе.
• Advanced test -- означает работу синтетических тестов с использованием ПО на Z80
• Implemented -- означает наличие спецификации и кода
• In Progress -- означает наличие лишь замысла

Sherlock
10.10.2025, 11:22
Думаю, стоит пояснить, почему моя разработка может быть безусловно полезна для RW9UAO, но не является конкурирующей или эквивалентной. Более того, для многих моя версия может показаться не интересной.

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

Две ипостаси одной идеи: Чистота Наследия и Свобода Творчества

Наша разработка основана на двух четко разделенных, но философски связанных принципах:

1. Amstrad CPC: Платформа-Канон

Цель: Абсолютная, музейная точность. Это эталон, где реализуется максимально возможная аутентичность и 100% функционирование в «легаси»-режиме.

Философия: CPC — это законченное произведение. Наша задача — сохранить его в идеальной чистоте, без компромиссов. Это высшая ценность и наш главный приоритет.

2. Aleste 520 EX: Платформа-Интерпретация

Исходная точка: Мы берем не конкретную реализацию старой «Алесты», а её изначальные идеи — мечты о расширенной памяти, графике и звуке, которые тогда не могли быть реализованы элегантно из-за ограничений компонентной базы.

Философия развития: Мы исправляем «родовые травмы» оригинальной аппаратуры (как странная организация видеопамяти), которые были продиктованы технологической необходимостью, а не здравым смыслом. Мы строим идеализированную, чистую архитектуру, о которой могли бы мечтать создатели «Алесты», имея на руках современные FPGA.

Обратная совместимость: Это не цель, а побочный эффект. Мы реализуем ключевые фичи оригинальной «Алесты» (например, палитру), но интегрируем их в новую, логичную архитектуру. Старое ПО может быть адаптировано патчами, но система не будет скована его ограничениями.

Революционные изменения: Это сознательный уход от наследия ради элегантности и мощи. Линейная видеопамять, слотовая память с защитой, супервизор — это не просто улучшения, это шаг в сторону чистой, современной 8-битной архитектуры, вдохновленной, но не ограниченной прошлым.

Ключевой принцип: CPC — это догма, которую мы блюдём. Aleste — это ересь, которую мы творим. Мы не улучшаем CPC, мы используем его ДНК для создания нового, самостоятельного организма, который должен удивлять, вдохновлять и показывать альтернативный путь, который мог бы быть.

P.S. Проект в разработке и многое может поменяться поэтому некоторые перечисленные черты могут измениться или даже удалиться из конечной версии;

ivagor
10.10.2025, 12:03
супервизор
Если речь о немаскируемом прерывании при обращении к (настраиваемым) диапазонам портов и памяти то неистово плюсую.

Sherlock
10.10.2025, 15:20
Если речь о немаскируемом прерывании при обращении к (настраиваемым) диапазонам портов и памяти то неистово плюсую.

«Да, архитектура с использованием немаскируемых прерываний (NMI) для доступа к портам и памяти действительно рассматривалась на ранних этапах. Более того она тестировалась в 1992 году. Однако после нескольких итераций проектирования мы отказались от этой идеи в пользу механизма маскируемых прерываний через syscall. Основная причина этого решения — строгое разделение типов прерываний: немаскируемые прерывания (NMI) будут жёстко зарезервированы для критических аппаратных исключительных ситуаций (например, сбоев по питанию или ошибок памяти). Использовать такой мощный и приоритетный механизм для рядовых системных вызовов было бы архитектурной ошибкой.

Таким образом, мы пришли к более сбалансированному и целостному решению, выдержанному в ретро-духе.

Ключевой принцип прост: всё, что работает с железом, лучше использовать через syscall, а не прямым доступом. Это не только безопаснее, но и архитектурно чище.

Третий слот адресного пространства жёстко зарезервирован для супервизора. В нём расположено MMIO-пространство, через которое отображены все аппаратные устройства. Прямой доступ к большинству функций возможен только в режиме супервизора.

Попасть в этот слот можно исключительно через вызов syscall. Клиентское ПО загружает данные в регистры и выполняет команду out в порт syscall, что вызывает маскируемое прерывание. Это переключение не оптимизировано и работает как классическое прерывание, что соответствует ретро-стилистике системы. Как только процессор переходит по вектору этого прерывания, происходит аппаратное переключение в режим супервизора с одновременным подключением третьего слота.

Возврат управления осуществляется записью в специальный регистр режима менеджера с установкой бита "отключение супервизора". При этом следующая за этой записью команда выполняется ещё в режиме супервизора, и только последующая — уже в пользовательском режиме, что обеспечивает корректный переход.

Таким образом, вместо прямого управления десятками аппаратных портов существует единственный, хорошо определённый портал — порт syscall. Делая такой вызов, клиентское ПО может запросить супервизор выполнить привилегированную операцию.

Одна из таких операций — включение "доверенного режима". По сути, это запуск кода в режиме супервизора без ограничений: можно исполнять код из любого слота (0, 1 или 2), а после возврата в пользовательский режим — сохранять полный доступ к третьему слоту и его аппаратным регистрам. Это мощный, но опасный инструмент, который предоставляется на страх и риск пользователя.»

ivagor
10.10.2025, 16:03
Спасибо за информацию, такой вариант меня не интересует, но желаю удачи в реализации проекта.

RW9UAO
10.10.2025, 16:38
оверкилл какой-то.
окай. железная алеста не была 100% совместима с амстрадом. это стоит поправить. в проекте ФПГА амстрада есть контроллер прерываний, но в оригинальной машине его тоже не было.

Sherlock
10.10.2025, 17:16
Спасибо за информацию, такой вариант меня не интересует, но желаю удачи в реализации проекта.

Разумеется, вы правы в том, что наш механизм syscall — это не совсем то, что вы ищете.

Он изначально не предназначен для низкоуровневой эмуляции аппаратных устройств через NMI. Его основная задача иная — это организация надежного и эффективного обмена данными между пользовательской программой, ядром и драйверами.

Главная ценность такого подхода в работе с драйверами устройств, которые требуют неопределённого времени на выполнение операции. Вместо того, чтобы висеть в циклах ожидания, пока устройство выставит некий "бит готовности", ПО может просто запросить выполнение операции через syscall и немедленно продолжить работу (асинхронный режим) или быть заблокированным до её завершения (синхронный режим). Это позволяет централизованно обслуживать все устройства в обработчиках прерываний (ISR), полностью избегая активного ожидания.

Таким образом, наш syscall решает задачи более высокого уровня — не имитация "железа", а создание отказоустойчивой и эффективной системы управления всеми устройствами в целом. Это иная, но не менее мощная архитектурная концепция.

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


оверкилл какой-то.
окай. железная алеста не была 100% совместима с амстрадом. это стоит поправить.

Вы абсолютно правы, и это следствие работы без полной документации в свое время. В итоге получились следующие расхождения с оригинальной платформой:

• Система прерываний: Не была реализована поддержка Interrupt generation control.

• Расширение памяти: Его пришлось проектировать практически с нуля. По счастливой случайности результат оказался схож с расширением от Dk'tronics, которое, если быть точным, и само не является на 100% каноническим. Насколько я помню, в одной из версий РЕ³ даже была выпущена корректировка на этот счёт.

• Цвет: Компоненты цвета у CPC имеют яркость 0, 50 и 100% (но не у Алесты). Впрочем, ретро-компьютеры вообще не проектировались с оглядкой на точную цветопередачу (color rendition).

• Порты: Принтерный порт был реализован иным способом.

• Клавиатура: Перекодировка клавиатуры действительно теряет смысл, когда в распоряжении есть качественные механические кнопки, позволяющие реализовать более простую и эффективную схему.

• Периферия: Такие вещи, как часы (ВИ53, ВВ51), HIGHZ, FUTURE — да, их тоже лучше не реализовывать или переосмыслить.

И, как вы верно заметили, все эти моменты действительно стоит исправить для достижения большей аутентичности. Я это только приветствую.

RW9UAO
10.10.2025, 17:41
ладно ВИ53 и УАРТ, но в часах вы храните настройки. БИОС алесты при этом будет дурковать. проверено.

Sherlock
10.10.2025, 18:25
ладно ВИ53 и УАРТ, но в часах вы храните настройки. БИОС алесты при этом будет дурковать. проверено.

Вы правы, это действительно так. Однако загрузчик, который единственный использует часы, — невероятно простой, и его легко пропатчить.

Это открывает два пути:

• Установка часов: Можно использовать компактный чип на I2C, если возникнет необходимость в реальных часах.
• Полный отказ от часов: Вместо этого в FPGA можно будет просто загружать крошечный файл с готовыми настройками, которые нужны загрузчику.
• Полный отказ от часов и настроек: Вместо этого всегда использовать константные параметры которые нужны загрузчику.

Все варианты решают проблему без необходимости сохранять сложную и избыточную для вашей задачи систему оригинальных часов.

ivagor
10.10.2025, 18:30
следующие расхождения с оригинальной платформой:
Еще неполное совпадение скорости процессора (предположительно торможение не на 100% совпадает), какой-то амстрадовский тест и демки на реале запускал Дмитрий2012.

Sherlock
10.10.2025, 19:14
Еще неполное совпадение скорости процессора (предположительно торможение не на 100% совпадает), какой-то амстрадовский тест и демки на реале запускал Дмитрий2012.

Я помню провал этого теста. С большой долей вероятности, корень проблемы лежит не в несоответствии тактовой частоты, а в тонкостях работы системы прерываний.

На оригинальном железе демки и тесты часто полагаются на прерывания для точного замера времени и синхронизации процессов (например, отрисовки кадров или работы со звуком). Если временны́е характеристики прерываний в эмуляции/реализации хотя бы немного отличаются от оригинальных — это мгновенно приводит к рассинхронизации и сбоям. Таким образом, ключ к решению, вероятно, лежит в тонкой настройке механизма прерываний. Не смотря на то, что Interrupt generation control не поддержан, вряд ли его отсутствие приводит к провалу теста -- но не исключено.

Sherlock
30.10.2025, 12:06
Работаю над арбитром памяти. Мной обнаружены следующие моменты, которые могут помочь другим разработчикам в понимании проблемы совместимости по скорости процессора между Алестой и Amstrad CPC.

Арбитраж памяти в Алесте:

• Память работает на частоте 4 МГц.
• Так как шина памяти 16-битная, видеоконтроллеру для чтения двух байтов за раз достаточно одного доступа.
• Арбитр чередует доступы: каждый второй такт (частотой 4 МГц) жестко отдается видеоконтроллеру.
• Теоретически процессор может получить доступ к памяти в оставшемся такте. Фактически, процессор может работать с памятью с эффективной частотой до 2 МГц, используя одно окно доступа за каждый полный цикл.

Арбитраж памяти в Amstrad CPC:

• Основной цикл длится 16 тактов частоты 16 МГц (что эквивалентно 4 тактам частоты 4 МГц).
• Первые 8 тактов (16 МГц) жестко отданы под доступ видеоконтроллера. Для чтения двух байт используется режим страничного доступа (Burst Mode) DRAM: один раз выставляется сигнал /RAS и два раза сигнал /CAS.
• Вторые 8 тактов (16 МГц) отданы под возможный доступ процессора.
• В результате процессор также имеет эффективную частоту доступа к памяти 2 МГц, но это выглядит как одно окно размером в четыре такта (4 МГц), а не два отдельных окна, как в Алесте.

Вывод для совместимости:

Различие в структуре арбитражных окон (одно большое окно в CPC против чередования тактов в Алесте) делает Алесту в среднем несколько быстрее. Это неизбежно приводит к расхождению в производительности в строго зависящем от таймингов коде.

Для достижения полной совместимости с оригинальным CPC арбитр памяти должен быть скорректирован и эмулировать не только частоту, но и структуру доступа оригинала — то есть, использовать одно процессорное окно за цикл, а не чередование на каждом такте.

Sherlock
09.11.2025, 13:55
Видеоконтроллер полностью закончен и отлажен


Изображение ниже в формате 320x200-8bpp-4096c (64КБ)
https://raw.githubusercontent.com/hww/aleste-lx-fpga-sv/refs/heads/main/shared/screens/lx_aleste_64k8b_800.jpg

SDRAM Controller

Работает на частоте 108МГц использует burst режим читает по два слова 16 бит за один доступ

Memory Arbiter

Работает на частоте 108МГц и обрабатывает 16 битные данные. Коммутирует шину между системной шиной, видео-контроллером и графическим сопроцессором. Как и в оригинальной Aleste EX эта подсистема полностью 16 битная.

System Arbiter

Работает на частоте 54МГц и обрабатывает 8 битные данные. То есть вся остальная часть всей системы полностью 8-битная.

Video Buffer

Двойной 32 битный буфер видеоданных. Превращает 32 слова в поток байтов для генератора пикселов.

Pixel Pipeline Unit

Генерирует 8-битные пиксели и потока байтов. Поддерживает оригинальные CPC кодировки и линейные, которые планировались на Alexte EX, но так и небыли реализованы. Это режимы более простой упаковки. Например для 16 цветного режима первые два пикселя [7:4][3:0], а для 4 цветового [7:6],[5:4],[3:2],[1:0]

Color Paletter

Конвертирует 8 бит в 12 бит. Для этого имеет таблицу 512 байт. При заполнении таблицы (как и в Alesta EX) данные могут транслироваться в 12 битный формат. Поддерживаются форматы:

12 bit
CPC
MSX2+ RGB
MSX2+ YJK

Также палитра имеет автоинкремент и модификатор цвета для использования банков цвета

Scan Doubler

Конвертирует одну 12-bit на пиксел строку в две HDMI строки

HDMI Controller

Сериализует данные в HDMI интерфейс, и формирует основной кадровый и строчный темп в системе.

UART Bridge

Отладочное устройство которое позволяет управлять системой с хост компьютера. Оно осуществляет доступ к Wishbone шине через последовательный интерфейс.

6845 Mod

Модифицированная версия контроллера которая наряду со стандартной версией имеет следующее:

Имеет дополнительные регистры управления которые позволяют: адресоваться к 24 битной памяти, изменять bpp, изменять скорость потока данных,а также использовать линейный режим. Последнее было одной из нереализованных идей в EX. В этом адрес по окончании первой строки переходит во вторую. Кроме этого контроллер поддерживает burst, для этого он меняет адрес через +2, а также может это делать 2 раза в символе.

Итоговый список режимов стал такой: cpc режимы и linear. Вторые разбиты на три группы 16КБ страница, 32КБ страница и 64КБ страница. Теоретически можно использовать 128КБ но не используется.

cpc: mode0, mode1, mode2
linear: 16KB (4bpp,2bpp,1bpp), 32KB (8bpp-160x200, 4bpp-320x200, 2bpp-640x200), 64KB (8bpp-320x200, 4bpp-640x200)

Синхронизация

Wishbone работает на частоте 54МГц
Видео-подсистема на частоте 27МГц
Память на частоте 108МГц

Основной цикл состоит из 16 тактов 27МГц. У некоторых тактов есть назначение:

T04 - Sync 1 запуск цикл доступа в память для получения 32 бит. (и загрузка в выходной буфер если необходимо)
T12 - Sync 2 загрузка 32 бит данных из памяти в выходной буфер (и запуск нового доступа если необходимо)
T15 - Конец символа

В зависимости от режима пиксель clk формируется в T{0,2,4,6,8,10,12,14} тактах, в самом медленном случае T{0,4,8,12}

В целом диаграмма подобна то которая используется в Myst/Myster для CPC.

Следующий этап

Процессор и периферия.

breeze
09.11.2025, 22:13
Видеоконтроллер полностью закончен и отлажен

А на базе чего вообще делается проект? Это какая-то готовая плата или собственная разработка?

Sherlock
10.11.2025, 12:09
А на базе чего вообще делается проект? Это какая-то готовая плата или собственная разработка?

Отличный вопрос.

В качестве базовой FPGA была выбрана микросхема ECP5 от компании Lattice. Альтернативным вариантом рассматривался чип от Gowin. Ключевым аргументом в пользу ECP5 стала поддержка открытых инструментов разработки: Verilator, Yosys и NextPNR.

В качестве конструктива решено использовать SODIMM-модуль, на котором размещаются сама FPGA, память SDRAM и FLASH для прошивки. Для этих целей хорошо подходит плата ICE Sugar Pro.

Была разработана материнская плата XiAletse, однако в связи с известными событиями проект пришлось приостановить. Как это часто бывает, со временем подход пересмотрели в сторону снижения стоимости и оптимизации.

В итоге появился проект FPGA LX, который стал символом минимализма — напоминанием о том, что разработчик должен ограничивать свои «хотелки» на каждом шагу. В то же время Xi олицетворял максимализм и стремление к идеальной, но избыточной реализации.

После завершения работы над FPGA-ядром будет спроектирована новая печатная плата — это будет сильно оптимизированная версия Xi.

Планируемые изменения:

• Wi-Fi-чип и аналогичные модули будут удалены с платы — вместо них появится PMod-разъём для подключения внешних периферийных устройств.
• Legacy Edge-коннекторы будут полностью убраны — они занимают много места, недостаточно надёжны, а при текущих ценах на память их необходимость сошла на нет.
• Встроенный J-Link отладочный интерфейс, вероятно, также будет удалён.
• MIDI-разъёмы заменят на Mini DIN — более компактный и современный вариант.
• ЦАП и АЦП будут заменены на более доступные коммерческие аналоги.
• Звуковая шина станет основной, а PCIe-разъёмы уступят место компактным 40-контактным прямоугольным коннекторам.
• Микроконтроллер будет заменён на более дешёвую модель (без чрезмерного удешевления — разница составит несколько долларов).
• Аудиоразъём, вероятно, будет заменён на Mini-JACK.
• VGA, вероятно, будет удален.
• Габариты платы будут уменьшены.

Для простоты понимания левая часть платы будет удалена, а на правой компоненты заменены по принципу меньше, дешевле -> лучше.

https://cdn.hackaday.io/images/2940161671369141291.jpg

Sherlock
14.12.2025, 01:10
#

Что было реализовано

Мы собрали первую рабочую версию системы, которая объединяет:
• Видеоконтроллер - выводит изображение на экран
• Систему на Z80 - центральный процессор
• Два менеджера памяти - legacy и native режимы
• Арбитр шины - управляет доступом к памяти и устройствам
• Отладочное устройство для Z80 - позволяет удаленно отлаживать код

Отладочная система

Отладочное устройство подключено через UART-мост и позволяет:

Загружать программы в память
Управлять процессором (сброс, прерывания)
Выполнять пошаговую отладку
Устанавливать точки останова
Мониторить состояние процессора


Трудности и их решение



Видеоконтроллер
Заработал сразу, но показывал только черный экран - это уже был прогресс!

UART-мост
Больше всего времени ушло на отладку UART-моста. Проблемы:
• Не проявлялись в симуляции
• В железе работали непредсказуемо
• Сигналы игнорировались или терялись

Решение: Пришлось обновить библиотеку последовательного интерфейса новым кодом.

Отладочная программа на Python
Разработка заняла 1-2 дня. Сегодня мы запустили первую программу!


Что сейчас работает



[b]Компонент
Статус


Видеоконтроллер
✅ Работает


Процессор Z80
✅ Работает


Менеджер памяти
⚠ Требует тестов


Удаленный отладчик
✅ Работает


Загрузка программ
✅ Работает



[Пример кода для тестирования



; Test program for Z80 debugger
; Loads at address 0xC00000

org 0x0000 ; Logical Z80 address

start:
jp 0x0005 ; Jump to main code

org 0x0005 ; Main program starts here

main:
ld a, 0x55 ; Load value 0x55 to register A
ld (0x0003), a ; Store A to memory address 0x0003
halt ; Stop CPU execution

; Program ends here (total 10 bytes)
; Bytes: C3 05 00 55 32 03 00 76


Сессия отладки




$ ./dbg.py trace -a 0xC00000 -n 10 test.bin
================================================== ==========
НАЧАЛО ТРАССИРОВКИ
================================================== ==========
1. Включаем сброс CPU...
2. Загружаем программу...
LOAD: 10 bytes at 0xC00000
3. Настраиваем трассировку...
4. Начинаем трассировку...
Шагов: 10
Останов на: inst
================================================== ==========
step: 1 addr:0xC00000 pc:0x0000 bus:0xC3 type:FETCH dis:JP 0x0005
step: 2 addr:0xC00001 pc:0x0001 bus:0x05 type:FETCH dis:db 0x05
step: 3 addr:0xC00002 pc:0x0002 bus:0x00 type:FETCH dis:db 0x00
step: 4 addr:0xC00005 pc:0x0005 bus:0x55 type:FETCH dis:LD A,0x55
step: 5 addr:0xC00006 pc:0x0006 bus:0x32 type:FETCH dis:LD (0x0003),A
step: 6 addr:0xC00007 pc:0x0007 bus:0x03 type:FETCH dis:db 0x03
step: 7 addr:0xC00008 pc:0x0008 bus:0x00 type:FETCH dis:db 0x00
step: 8 addr:0xC0000A pc:0x000A bus:0x76 type:FETCH dis:HALT
STOP: CPU halted at 0x000A
================================================== ==========
ТРАССИРОВКА ЗАВЕРШЕНА
================================================== ==========



Что дальше


Запускать более сложные программы для тестирования платформы
Добавлять native устройства (таймеры, контроллеры прерываний)
Тестировать legacy устройства (старые Z80 периферийные чипы)
Разрабатывать простую операционную систему или монитор


Система готова для дальнейшего развития!


"Один маленький шаг для Z80, но гигантский скачок для нашей FPGA-платформы!"

---
Проект Aleste-LX FPGA продолжает развиваться. Следите за обновлениями!