FT812. SDK



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

Данный SDK по замыслу должен включать в себя:
— поддержку железа FT812 в его инкарнации VDAC2 на ZX-Evolution по интерфейсу SPI,
— поддержку железа TS-Conf,
— программирование FT812 (инициализация режимов, создание дисплей листа, функции сопроцессора),
— геометрию (синусы/косинусы etc.),
— прочие функции, полезные при создании игр или утилит.

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

Предыдущая статья про SDCC была написана не случайно, потому что SDK, который я пилю для FT812, написан, в основном, на языке С.
Низкоуровневые функции должны работать быстро, а для высокоуровневых важнее корректность логики. Поэтому функции для работы с железом написаны в основном на асме, обернутом в функции С. Функции верхнего уровня написаны на С.

Данный подход себя оправдал. Буквально за несколько часов я налопатил несколько примеров, сумел опробовать возможности FT812 и выяснить неочевидные особенности его архитектуры.

Сам SDK лежит в общем репозитории, связанном с ZX-Evolution.
Ниже я опишу основные шаги для его использования.

Утилиты.

Сам компилятор можно скачать здесь. Я использую последнюю версию из линейки 3.хх.
После установки компилятора необходимо создать переменную окружения SDCC с путём к компилятору. В моём случае: c:\Tools\PROG\SDCC.

Кроме компилятора нужно прописать пути к:
zx-evo\pentevo\tools\rs232mnt\rs232mnt.exe
zx-evo\pentevo\tools\sdcc-lib-split\sdcc-lib-split.exe


Сборка исходников.

Исходники SDK рекомендуется скачать при помощи Git:
git clone https://github.com/tslabs/zx-evo


Можно вытащить и архив, не заморачиваясь с гитом, но это будет только свежая ревизия на момент выкачивания. Использование же гита позволит обновлять локальную копию репозитория при помощи команды git pull в корневой папке.

Папка проекта содержит следующие подпапки:
src — сорцы, обязательно должна содержать файл main.c, включающий остальные файлы исходников,
res — ресурсы программы: spg.ini для сборки .spg, графика и прочее,
obj — создаётся при компиляции и содержит разный промежуточный мусор, но в том числе и файлы листинга для анализа сгенерированного асма.

В папке проекта лежит файл build.bat, который компилирует проект. Он состоит из вызова общего скрипта компиляции и имени проекта:
call ..\sdklib\build.bat my_prog


Для компиляции нужно запустить build.bat в папке проекта. Если ошибок на любом этапе сборки не возникло, окно закроется после исполнения скрипта.

Маунт на виртуальный диск.

На ZX-Evo есть возможность монтирования виртуального диска через RS-232. Скорость передачи данных невысока, около 10кБ/с, что в 2 раза медленнее реального дисковода. Однако, это позволяет проверять результат компиляции на реальном железе без перетыкания карточек и проводов.

Для автоматического монтирования имеджа диска после компиляции нужно раскомментить в build.bat строку:
call ..\sdklib\mount.bat %PRJ%

Для монтирования RS-232 на пентеве используется плагин Wild Commander (F10):



Компиляция библиотек.

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

Скомпилированные библиотеки хранятся в репозитории. Перекомпиляция требуется только в случае, если пользователь изменил исходники либных функций.

Для компиляции нужно по очереди запустить файлы makelib.bat в папках sdklib, ft812lib и tslib.

Организация памяти и стартовый код.

По умолчанию память в SDK организована следующим образом. По адресу 0х0000 включено ОЗУ чтоб обеспечить максимум места для кода в адресном пространстве. Код из main.c расположен с адреса 0х0040. Адрес переменных по умолчанию 0хB000, стек — 0хС000. Подразумевается, что окно 0хС000 будет использоваться для доступа процессора к страницам.

Стартовый код находится в crt0.s и располагается в памяти в адресах 0х0000..0х003F. Он выполняет следующие действия:
— включение 14МГц и кэша,
— установка по адресу 0х0000 страницы ОЗУ 8,
— установка по адресу 0х4000 страницы ОЗУ 9,
— установка по адресу 0х8000 страницы ОЗУ 10,
— установка стека по адресу 0хС000,
— установка IM1 и разрешение прерываний,
— переход на адрес функции main().

Также, в файле стартового кода по адресу 0x0038 находится EI: RET. В случае необходимости можно поместить туда переход на процедуру обработки прерывания.
  • avatar
  • [просмотров: 4416]
  • +26

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.