Тема: Аппаратный отладчик для Агата
Привет!
Тут начинаю рассказ об устройстве новой железки: аппаратный отладчик для Агата.
На ютуб есть ролик об этом устройстве:
https://youtu.be/qvIa9U1PELw
Основная задача этого устройства: разбирать проги, которые не могут полноценно идти в эмуляторе (тема ЯЗС, тема сетевых карт), либо (типа того, что было с Way In Hell) поведение которых почему-то не совпадает на реале с эмулятором.
С его помощью можно рулить компом: остановить ЦП по запросу, по breakpoint/watchpoint, посмотреть память, трассу последних действий ЦП (перед остановкой), поправить что нибудь в ОЗУ, пройти код по шагам.
С PC взаимодействует через USB, управляется через полноэкранный цветной интерфейс через любую
терминалку. Под Windows это почти хорошо получается через PuTTY, под *NIX - почти идеально через XTerm + cu (а вот популярный MiniCom не вывозит многое).
Интерфейс весь на английском (чтобы не путаться в кодировках при смене терминалки), но в дампах можно видеть все русские буквы (если терминалка умеет) и даже значки, если в терминале поддерживается UTF.
Поддержку мыши делать не стал. Хотя и это было бы возможно.
--
Аппаратный состав: ATMega128 + max240 в качестве ядра.
Матрица обеспечивает стык между совсем не синхронной атмегой и строго синхронной шиной агата.
Ну а мега делает всё остальное.
Также на плате есть pl2303 - UART-USB конвертор.
И SRAM на 32 Кб, которая используется, в основном, только для журнала монитора шины агата.
Она доступна как матрице, так и меге.
На плате есть кнопка сброса меги, а также кнопка сброса агата. Таким образом можно гонять материнку агата совсем без дисплея и клавиатуры.
--
ПО: кривое и косое, писалось на cvAVR. Кривое, потому что:
1) Надо было сперва научиться пользоваться этим зверем (cvAVR), а потом уже писать. Но я пошёл другим путём. Рефакторить пока не хочу, хотя поддержка такого кода несколько сложнее, чем нормального.
2) Изнутри поддержка терминала совсем не похожа на вылизанный оптимальный поток байтиков, как это делают библиотеки ncurses или clang. У меня нет буфера кадра, так что любое обновление перерисовывает, порой, весь экран. Это медленно. Есть оптимизации для частных случаев, иначе было бы совсем плохо. Причина, в основном, в том, что у меги и так озу маловато. С другой стороны - отладчик имеет внешнюю SRAM.... Теоретически, это можно было бы использовать, но вряд ли я это сделаю. Внешняя доступна, по сути, в режиме PIO: требуется вызов отдельных процедур, чтобы прочитать/записать байт. Хотя это всё равно быстрее, чем вывод одного символа на UART.
3) Я так и не попробовал более высокие скорости UART, чем 115200. Хотя pl2303 это позволяет, да и мега, вероятно, не будет против.
На текущий момент занято где-то 32 Кб памяти прог меги.
--
Особый респект: AlexBel за подаренную мегу и разные обсуждения (компиляторов, терминалок, XModem'ов и прочего).
--
Устройство процентов на 80 готово, так что я в этом году планирую снять по нему серию роликов и подробно описать его возможности. Но эти 80% - результат уже примерно года работы (я начал эту тему в конце 2019, но почти на 3/4 следующего года руки не доходили), так что 20% остатка - это тоже могут быть месяц-два-четыре + съёмка/монтаж роликов с демонстрацией - это тоже месяц уйдёт.
Сейчас нужно закончить как раз пошаговый проход, потом, может быть, сделаю ещё shadow memory (возможность подставлять команды процессору из отладчика, минуя основное ОЗУ - например, чтобы изменить или посмотреть значения регистров), ну и немного вылизать UI).
И потестировать всё на семёрке (пока всё делаю на девятке).
ToDo-лист за последний месяц уже стал входить на экран :)), но пока сокращается медленно.