Блог страдающего Лиса
Lorem ipsum hello dolor sit world amet
20 окт 2024 Вс
Встроил VIDAC в DE0
Вчера понемногу делал видеопроцессор и медленно, но постепенно двигаюсь к конечной цели по видеоускорителю, к рисованию текстурированных прямоугольников и треугольников. Примерно набросал код растеризатора, но не проверял, боюсь, что там будет сложно, но что поделать, надо все же доделать как-нибудь.
С утра сел и разметил новую память, встроил новый видеопроцессор в ПЛИС и проверил. Все работает как надо, у меня получилось сделать минимальный набор геометрических фигур, таких как рисование линии, кругов, прямоугольников.
Всего потрачено памяти:
Вчера еще придумал довольно простой метод деления чисел, для текстуризации я пока что использовал деление максимум на 15, то есть, результат не может превышать это число, но можно сделать какое угодно, на самом деле, просто я специально сократил, чтобы не сильно место занимать в процессоре. Вместе с видаком и процессором 3548 ALM (или 7096 LE) было занято из 18480 ALM, то есть, всего 19% от площади кристалла.
Мне бы наверное все-таки хотелось сделать бы несколько видео и выложить их на сайте, по принципам работы процессора и компьютера. Начать с того, что такое двоичные числа и как они считаются, и заканчивая делением чисел.
С утра сел и разметил новую память, встроил новый видеопроцессор в ПЛИС и проверил. Все работает как надо, у меня получилось сделать минимальный набор геометрических фигур, таких как рисование линии, кругов, прямоугольников.
Всего потрачено памяти:
- 64K память программ
- 128К видеопамять (2х буферная)
- 64К видеопамять видак
- 32К текстурная память
- 4К шрифты
- 1К палитра
Вчера еще придумал довольно простой метод деления чисел, для текстуризации я пока что использовал деление максимум на 15, то есть, результат не может превышать это число, но можно сделать какое угодно, на самом деле, просто я специально сократил, чтобы не сильно место занимать в процессоре. Вместе с видаком и процессором 3548 ALM (или 7096 LE) было занято из 18480 ALM, то есть, всего 19% от площади кристалла.
Мне бы наверное все-таки хотелось сделать бы несколько видео и выложить их на сайте, по принципам работы процессора и компьютера. Начать с того, что такое двоичные числа и как они считаются, и заканчивая делением чисел.
19 окт 2024 Сб
Закрашенный круг
Единственное мое достижение за день было нарисовать закрашенный круг. Скорость рисования такого круга уже приближается к КПД 100%, то есть, 25 млн точек в секунду, в отличии от простого рисования окружности, где этот показатель уменьшается вдвое, так что в каком-то смысле, круги закрашенные рисовать чуть быстрее.
Несмотря на то что эти круги якобы "ускорены", на процессоре, который у меня есть, с помощью REP STOSB выполняется тоже с такой же скоростью, 1 такт = 1 пиксель, так что прямо так сказать, существенного ускорения в рисовании закрашенных кругов тут нет, софтверный метод лишь на несколько десятков тактов медленнее. Преимущество рисования с помощью сопроцессора проявляется в том, что пока ему отдается задача на это действие, процессор может заниматься своими делами, получая параллельное выполнение вместо последовательного. Так что в этом тоже есть смысл.
Мне осталось по 2Д видеоускорителю сделать всего лишь 2 компонента:
Несмотря на то что эти круги якобы "ускорены", на процессоре, который у меня есть, с помощью REP STOSB выполняется тоже с такой же скоростью, 1 такт = 1 пиксель, так что прямо так сказать, существенного ускорения в рисовании закрашенных кругов тут нет, софтверный метод лишь на несколько десятков тактов медленнее. Преимущество рисования с помощью сопроцессора проявляется в том, что пока ему отдается задача на это действие, процессор может заниматься своими делами, получая параллельное выполнение вместо последовательного. Так что в этом тоже есть смысл.
Мне осталось по 2Д видеоускорителю сделать всего лишь 2 компонента:
- Рисование текстурного прямоугольника
- И закрашенного треугольника
18 окт 2024 Пт
Разработка VIDAC
Как ни удивительно, но вчера я довольно много сделал по этому проекту. Встроил модуль рядом с 8088 процессором и смог нарисовать линию, прямоугольник, окружность и даже полигональные линии. Это в общем и целом говорит о том, что примерно сделать у меня получается что-то, но остается еще много чего. Это и текстурированный треугольник, и просто треугольник, и прямоугольник с текстурой.
С трехмерным треугольником я так и не смог придумать что делать. Для качественного 3D требуется использование буфера глубины, а это сразу требует определенного места в памяти. Память у меня есть и это SDRAM. Ее можно использовать для этой задачи.
Но мне кажется, что с 3D будет сложно. Для начала надо бы вообще просто треугольник научиться рисовать, прежде чем получится его текстурировать. Все это невероятно сложная задача. Пожалуй я все-таки сделаю сначала 2D вариант, а пока говорить о 3D даже не стоит. Да и много ли у меня времени на все это...
С трехмерным треугольником я так и не смог придумать что делать. Для качественного 3D требуется использование буфера глубины, а это сразу требует определенного места в памяти. Память у меня есть и это SDRAM. Ее можно использовать для этой задачи.
Но мне кажется, что с 3D будет сложно. Для начала надо бы вообще просто треугольник научиться рисовать, прежде чем получится его текстурировать. Все это невероятно сложная задача. Пожалуй я все-таки сделаю сначала 2D вариант, а пока говорить о 3D даже не стоит. Да и много ли у меня времени на все это...
17 окт 2024 Чт
Встраивание VIDAC в верилятор
Наконец-то мне удалось совместить 8088 с видеоускорителем, и я смог нарисовать первую линию. Надо еще проверять и тестировать, но вроде получается и это хорошо. Используется разделяемая память, когда контроллер работает, выставлен статус BSY, то тогда невозможно ничего прочитать или записать в память $A0000...$CFFFF как минимум (192К). Это потому что видеоускоритель занимает адреса и использует их сам для записи.
Планируемый функционал.
Планируемый функционал.
- Рисование линии. Выполнено, но не проверено до конца.
- Прямоугольники — как закрашенные, так и не закрашенные (контурные)
- Круг — не закрашенный и закрашенный
- Текстурированный прямоугольник с прозрачностью (в том числе спрайты)
- Закрашенный треугольник
- Трехмерный текстурированный треугольник
- Рисование тайловой сетки
1 2 include "app/macro.asm" 3 org 100h 4 5 screen 13 6 mov ax, $C000 7 mov es, ax 8 mov si, draw 9 xor di, di 10 mov cx, size 11 rep movsb 12 mov dx, $300 13 out dx, al 14 hlt 15 16draw: vidacline 160,10,300,150,2 17 vidacpoly 100,100,3 18 vidacpoly 160,10,4 19 vidacrect 20,20,30,25,5 20 vidacfill 40,40,70,50,6 21 db 0 22size = $ - drawРисуется треугольник и всякая дребеда.
<< Ранние записи |
Поздние записи >>