Chaosorg пишет: Здорово! Даешь квейк на марсоходе :) Ну или демосцену, хотя бы:)
Вообще я изначально и собирался стрелялку делать, но потом поленился. По вычислительной мощности должно хватить.
Даже не нужно будет код переписывать. Только добавить игровую логику к текущему визуализатору. :)
На данный момент визуализатор умеет:
- Преобразования координат, перспективное отображение
- Буфер глубины, отсечение невидимых граней
- Текстурирование (2 текстуры 64х64 или 1 64х64 + 4 32х32 или 8 текстур 32х32)
- Зачатки освещения
Есть импорт 3d объектов из FBX.
При 30-и кадрах в секунду вычислительной мощности хватает примерно на 50-100 полигонов (в зависимости от размера).
Этого достаточно, чтобы сделать лабиринт произвольной сложности. Нужно только, чтобы из каждой точки было видно не дальше соседней комнаты.
Управление с клавиатуры работает хорошо, управление мышкой почему-то глючит. Работа со звуком была в проекте, но на практике еще не реализована.
Но я не уверен, что когда-нибудь это продолжу. Моя цель (изучить verilog и понять, как проектирует микросхемы) уже выполнена. Не думаю, что стрелялка на марсоходе будет кому-то настолько интересна, сколько мне придется потратить на неё усилий.
Chaosorg пишет: Еще, конечно, очень интересен USB-host и чтение с флешки. В каком объеме и как реализовано? Обязательно нужен Ваш процессор или можно переделать под что-то иное, например переписав ассемблер? Вы писали поддержку FAT32 или FAT16 или чего-то еще? Можно ли писать на флешку?
На верилоге реализован только самый нижний уровень - установка соединения, прием и передача пакетов, отправка и проверка контрольных сумм. Поддерживаются и Low-speed и Hi-speed устройства. Это 329 строк верилога без комментариев и чуть меньше 10-и процентов от ПЛИС. Работает со стандартной платой расширения марсохода без каких-либо доработок.
Можно подключить к любому другому проекту. Частота должна быть кратна 12-и мегагерцам (если работать с Full-speed устройствами).
Остальное сделано на достаточно извращенном ассемблере. Еще около 300 строк. Файловые системы не реализовывал. Просто в загрузчике гружу 2 мегабайта с флешки в оперативную память и передаю туда управление. На этом надобность в usb заканчивается. Запись на флешку делается аналогично, нужно только поменять параметры USBMS запроса.
Теперь о багах:
- Работает не со всеми флешками. На простейшие команды вроде запроса дескриптора отвечают все флешки, но при отправке USBMS запросов начинается мистика. Я так и не понял где проблема, в верилоге или ассемблере. В конце концов подобрал одну флешку, с которой всё работает, и использую только её.
- Если считывать с флэшки большой кусок данных (скажем, 500 килобайт), состоящий сплошь из нулей, то с большой вероятностью случится сбой. Если там не только нули, то сбоев нет.
- После сбоя почему-то не удается вернуть флешку в исходное состояние программным ресетом (SE0 на 10ms). После этого флешка нормально выполняет get_descriptor, set_address и set_configuration, но не хочет делать usbms_reset. Помогает только сброс по питанию.
Изучил документацию вдоль и поперек, но разобраться так и не получилось. Если кто-нибудь даст совет, буду очень рад. Возможно дело в том, что в стандартной плате с разъемами сигнальные линии USB подключены непосредсвенно к ногам ПЛИС (по хорошему должно быть преобразование уровней на 5В и pull-down через 15КОм).