Блог страдающего Лиса
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Рисуется треугольник и всякая дребеда.
16 окт 2024 Ср
Первые две программы на новом процессоре
Мне удалось создать программы, при этом изрядно попортив себе нервы на отладке. Оказывается, не работают некоторые инструкции, причем довольно важные, так что пришлось поискать где баг. Мне бы написать юнит-тесты на процессор, но видимо, не получится. Это слишком сложная и неоднозначная задача.
Сначала я сделал программу сортировки QuickSort.
Это просто для интереса я подсчитал. Еще вот надо будет проверить как работает XCHG ax, r16...
Сначала я сделал программу сортировки QuickSort.
1 org 100h 2 include "../macro.asm" 3start: screen 13 4 mov cx, 64000 ; Сгенерировать случайный шум 5 xor di, di 6@@: add al, ah 7 imul ax, 3235 8 inc ax 9 stosb 10 loop @b 11 mov si, 0 ; Начать сортировку 12 mov di, 64000 13 call qsort 14 hlt 15qsort: push si di ; L-si, R-di 16 mov ax, si 17 mov bx, di 18 shr ax, 1 19 shr bx, 1 20 add bx, ax ; BX=середина 21 mov cl, [es:bx] ; CL=PIVOT 22.w1: cmp [es:si], cl ; WHILE (Arr[si] < pivot): si = si + 1 23 jnb .w2 24 inc si 25 jmp .w1 26.w2: cmp [es:di], cl ; WHILE (Arr[di] > pivot): di = di - 1 27 jbe .w3 28 dec di 29 jmp .w2 30.w3: cmp si, di ; IF a% <= b% THEN 31 ja .w4 32 mov al, [es:si] ; SWAP Arr(a%), Arr(b%) 33 xchg al, [es:di] 34 xchg al, [es:si] 35 inc si 36 dec di 37 cmp si, di ; LOOP WHILE a% <= b% 38 jbe .w1 39.w4: pop bx ax ; AX-было ранее L, BX-R 40 cmp ax, di ; IF l% < b% THEN QSort l%, b% 41 jnb .s1 42 push ax bx si di 43 mov si, ax ; ax=l%, di=b% 44 call qsort 45 pop di si bx ax 46.s1: cmp si, bx ; IF a% < r% THEN QSort a%, r% 47 jnb .s2 48 push ax bx si di 49 mov di, bx 50 call qsort 51 pop di si bx ax 52.s2: retПотом сделал программу для создания эффекта пламени. Получилось хоть и красиво, но медленно. Сортировка 64к элементов производится за примерно 1.5 секунды (за 37822337 тактов процессора). Среднее количество тактов на одну инструкцию составляет 4.8 тактов на инструкцию. Если проверять эквивалент в DOSBOX, то там выставлено по умолчанию количество 3 млн инструкции в секунду. Если разделить 25 на 4.8 равно 5.2 млн инструкции в секунду.
Это просто для интереса я подсчитал. Еще вот надо будет проверить как работает XCHG ax, r16...
15 окт 2024 Вт
Контроллер прерываний
Вчера я начал делать, а сегодня утром смог успешно закончить контроллер прерываний и даже его проверил. При нажатии на клавишу на клавиатуре теперь вызывается IRQ #1, который отсылает на прерывание 9, а при истечении таймера (в течении примерно 1/18 сек), вызывается прерывание IRQ #0. Теперь мне осталось доделать установку курсора в текстовом режиме, и программирование контроллера прерываний, а именно программирование скорости вызова IRQ #0, чтобы настроить его на значение 10 мс хотя бы, что будет вызывать прерывание раз в 250к тактов или 100 раз в секунду. Этого вообще хватит. И еще надо сделать IRQ #2 — VRetrace сигнал, чтобы знать момент, когда луч только что закончил рисование картинки. Это нужно для того, чтобы начать обновлять картинку на экране, чтобы в следующий раз, когда луч будет проходить по картинке, там уже все было бы готово и не было бы заметного разрыва, как это обычно бывает, если луч рисует, а на середине уже другой кадр. Помню такие времена, когда играл в Куаку, и там вот именно так разрыв кадра и был.
Еще сегодня сделал выбор палитры из заданной палитры DAC, что позволяет (и я это проверил) программировать цветовую палитру через регистры VGA 968 и 969. О, когда я в детстве о них узнал, я был просто поражен и восхищен и тут же начал использовать их для создания графики. Да... хорошо было тогда!
Работы еще очень много над процессором.
Пока проверял контроллер прерываний, наткнулся, что у меня POP r16 не работает, починил. Надо же так пропустить. Еще вот очень важная штука, это сохранение и выгрузка всех регистров, это очень удобно. Надо бы сделать эту вещь тоже в процессоре, помимо средних переходов, которые кодируются 0Fh инструкциями.
Думаю, что пора бы мне заканчивать как с процессором и начать уже делать что-то на ассемблере.
Еще сегодня сделал выбор палитры из заданной палитры DAC, что позволяет (и я это проверил) программировать цветовую палитру через регистры VGA 968 и 969. О, когда я в детстве о них узнал, я был просто поражен и восхищен и тут же начал использовать их для создания графики. Да... хорошо было тогда!
Работы еще очень много над процессором.
- Установка курсора — почти сделано
- Добавить VRetrace — сделано
- Программирование таймера
- Инструкции jmp near
- PUSHA / POPA
Пока проверял контроллер прерываний, наткнулся, что у меня POP r16 не работает, починил. Надо же так пропустить. Еще вот очень важная штука, это сохранение и выгрузка всех регистров, это очень удобно. Надо бы сделать эту вещь тоже в процессоре, помимо средних переходов, которые кодируются 0Fh инструкциями.
Думаю, что пора бы мне заканчивать как с процессором и начать уже делать что-то на ассемблере.
14 окт 2024 Пн
Встраивание видеоадаптера
Что я сделал вчера
Как и обычно, вчера я занимался тем, что создавал видеоадаптер текстового режима и пытался его встроить в систему. Получилось, но с большим трудом, потому что я отлаживал его не на вериляторе, как обычно, а прямо на реальной микросхеме, делая видеозахват изображения с VGA. Пока что то, что получается, весьма неплохо. Делал встраивание блоков памяти, связывал их между собой. Как я и говорил ранее, дел у меня еще очень много, и следующее что надо сделать, это контроллер прерываний, клавиатуру, кстати говоря, надо, причем не тот контроллер клавы, как в оригинальном 8088, а свой, отдающий по прерыванию ASCII символы для того, чтобы экономить место в биосе для этой цели.
Даже не представляю, сколько времени мне придется это делать, но лучше делать постепенно, но все-таки делать, чем аврально все делать, а потом бросать на половине пути. Даже то, что я взял собственный проект на доработку, уже хороший маркер того, что перестал заниматься одним и тем же.
Деление
Одним из важных пунктов в разработке системы трехмерного видеоускорителя является то, что ему требуется делитель, и как можно более быстрый. Для этого можно использовать смешанный делитель: потактовый и последовательный. Модуль деления довольно сложный для понимания и это даже не поместится в одну короткую статью, чтобы объяснить как он работает, надо много строчить символов, чтобы объяснить. Да и кому объяснять? Меня все равно никто не читает и никто не поймет.
Еще бы мне доработать сайт, чтобы создавать иллюстрации удобно было, а не то что сейчас, не могу нормально сделать ничего. Даже картинку добавить представляет большую сложность.
Логотуп андройда
А еще я вчера сделал интересную вещь на плисе, нарисовал андройда с помощью всяких штук-дрюк, просто чисто. Ну ты понял. На чистой логике.
Контроллер прерываний
В какой-то мере мне удалось сделать контроллер прерываний, который получает новые события, ставит в очередь и рассылает процессору по мере того как он обрабатывает прерывания. Дело в том что прерывания могут появляться одновременно, а процессор просто не успевать их обрабатывать вовремя, так что сделано было так: когда появляется прерывание, то оно просто ставится в очередь. Отсылается последовательно, процессор когда обрабатывает очередное прерывание, должен самостоятельно выставить EOI через
Также я сделал для ПЛИС реальной видеоразрешение 320 на 200, цветное, с палитрой, которую можно программировать через порты. Это мне пригодится для создания игр и приложений. А еще, я хотел бы сделать видеоразрешение 640 на 400, 16 цветов, в будущем. Может и не пригодится, но все равно было бы неплохо. Короче, вот все всё поняли:
Как и обычно, вчера я занимался тем, что создавал видеоадаптер текстового режима и пытался его встроить в систему. Получилось, но с большим трудом, потому что я отлаживал его не на вериляторе, как обычно, а прямо на реальной микросхеме, делая видеозахват изображения с VGA. Пока что то, что получается, весьма неплохо. Делал встраивание блоков памяти, связывал их между собой. Как я и говорил ранее, дел у меня еще очень много, и следующее что надо сделать, это контроллер прерываний, клавиатуру, кстати говоря, надо, причем не тот контроллер клавы, как в оригинальном 8088, а свой, отдающий по прерыванию ASCII символы для того, чтобы экономить место в биосе для этой цели.
Даже не представляю, сколько времени мне придется это делать, но лучше делать постепенно, но все-таки делать, чем аврально все делать, а потом бросать на половине пути. Даже то, что я взял собственный проект на доработку, уже хороший маркер того, что перестал заниматься одним и тем же.
Деление
Одним из важных пунктов в разработке системы трехмерного видеоускорителя является то, что ему требуется делитель, и как можно более быстрый. Для этого можно использовать смешанный делитель: потактовый и последовательный. Модуль деления довольно сложный для понимания и это даже не поместится в одну короткую статью, чтобы объяснить как он работает, надо много строчить символов, чтобы объяснить. Да и кому объяснять? Меня все равно никто не читает и никто не поймет.
Еще бы мне доработать сайт, чтобы создавать иллюстрации удобно было, а не то что сейчас, не могу нормально сделать ничего. Даже картинку добавить представляет большую сложность.
Логотуп андройда
А еще я вчера сделал интересную вещь на плисе, нарисовал андройда с помощью всяких штук-дрюк, просто чисто. Ну ты понял. На чистой логике.
Контроллер прерываний
В какой-то мере мне удалось сделать контроллер прерываний, который получает новые события, ставит в очередь и рассылает процессору по мере того как он обрабатывает прерывания. Дело в том что прерывания могут появляться одновременно, а процессор просто не успевать их обрабатывать вовремя, так что сделано было так: когда появляется прерывание, то оно просто ставится в очередь. Отсылается последовательно, процессор когда обрабатывает очередное прерывание, должен самостоятельно выставить EOI через
OUT ($20),$20
, и тогда сработает следующее, как только флаг IF=1. Хотя слать туда можно что угодно, честно говоря.Также я сделал для ПЛИС реальной видеоразрешение 320 на 200, цветное, с палитрой, которую можно программировать через порты. Это мне пригодится для создания игр и приложений. А еще, я хотел бы сделать видеоразрешение 640 на 400, 16 цветов, в будущем. Может и не пригодится, но все равно было бы неплохо. Короче, вот все всё поняли:
13 окт 2024 Вс
Доделано деление и умножение
Итак, сегодня у меня получилось с утра доделать деление со знаком и умножение 16-битных чисел с Immediate. Это хорошо, потому что теперь мне можно будет приступать к разработке программ, чем делать процессор. Но не все еще так просто, как говорится. Мне необходимо создать контроллер прерываний, что нужно будет для взаимодействия с внешним миром, таким как клавиатура и прерывание таймера, две критически необходимые вещи для создания приложений.
Помимо процессора, навернул на EP4CE10 процессор, для того, чтобы проверить, сколько логических элементов занимает процессор. Оказалось, что 5103 LE, что составляет 50% от общего занятого объема в чипе. Считаю, что прекрасный результат для такой задачи и у меня есть куда стремиться. Есть некоторая проблема с этим чипом, что мне необходимо как-то сделать VGA выход качественный, да и к тому же, стоит ли этим заниматься? Думаю, что пока не стоит. Можно создать этот процессор для чипа C5 для моей отладочной платы, да и я это сделаю. Неважно, где именно сделать программу, главное чтобы сделать.
Мне бы сделать SDCard контроллер лучше.
Помимо процессора, навернул на EP4CE10 процессор, для того, чтобы проверить, сколько логических элементов занимает процессор. Оказалось, что 5103 LE, что составляет 50% от общего занятого объема в чипе. Считаю, что прекрасный результат для такой задачи и у меня есть куда стремиться. Есть некоторая проблема с этим чипом, что мне необходимо как-то сделать VGA выход качественный, да и к тому же, стоит ли этим заниматься? Думаю, что пока не стоит. Можно создать этот процессор для чипа C5 для моей отладочной платы, да и я это сделаю. Неважно, где именно сделать программу, главное чтобы сделать.
Мне бы сделать SDCard контроллер лучше.
12 окт 2024 Сб
Продолжение работы над 8088
Доработки
Очень медленно работа идет над этим процессором, потому что у меня нет времени на то, чтобы заниматься этим постоянно. Сегодня мне бы хотелось сделать инструкции умножения и деления, потому что это тоже важно, между прочим. И просто посмотреть, сколько занимает логических элементов текущий код, просто потому что интересно, влезет ли в 10к от Марсохода в будущем, это тоже важно.
У меня есть вторая плата, которую покупал совсем недавно, это OMDAZZ, и ее тоже было бы интересно проверить, потому что по техническим характеристикам она полностью совпадает с Марсоходом2. То есть по идее, если я смогу сделать для нее, то и для 3-го циклона тоже получится.
Игра Жизнь
Еще недавно я научился "шить" микросхему 150К ПЛИС, загрузил туда свою прошивку для симуляции поля игры "Жизнь" 128 на 120. Это значит, что каждая ячейка "живет" независимо от других и за один такт перебрасывается поле в новое состояние. Это значит, что если запустить на 25 мгц, то, учитывая 128 на 120 = 15360 ячеек, которые занимают 148К ЛЕ, то это равносильно будет обработке 384 млрд ячеек в секунду! Поразительная скорость массового параллелизма. Но это лишь простые ячейки, более сложного ничего не делал пока что, только игру "Жизнь".
У меня еще есть мечта сделать растеризацию фрактала Мандельброта, только вот, смогу ли я это сделать, тот еще вопрос... на самом деле, ничего меня не может остановить, чтобы это сделать, кроме собственной лени.
Итог дня
Сегодня я полдня делал шаблон для omdazz, назначал пины, проверял различные комбинации, тестировал VGA и вот что я скажу — какая-то есть проблема с видеовыходом, поскольку во-первых, там всего лишь 3 бита, во-вторых, изображение получается тусклым. Один из проверочных моих мониторов вообще не может настроиться на видевыход как надо, к тому же, картинка съезжает, возможно даже из-за этих тусклых цветов. Как я посмотрел на схеме, там подключено к 1 кОм резистору, вместо например, 100 Ом, и видимо поэтому изображение такое тусклое и показывается.
Вторая неприятная вещь в том состоит, что оказывается, пины, которые якобы GPIO, на самом деле присоединены к различным устройствам, и значит что придется использовать их совместно. И вообще так получается, что эти пины особо и не получится использовать, честно говоря. Да, можно отказаться от SDRAM например, в пользу пинов, но вместе их использовать никак не выйдет.
Еще на плате есть выводы на LCD экранчик, который присоединяется отдельно. У меня такое чувство, что его подцепить туда будет нельзя, поскольку похоже, не совпадают выводы. Но я должен буду это еще проверить. В любом случае, именно эти пины то и можно юзать как GPIO.
Смог сегодня сделать инструкции умножения и частично деления, только беззнаковое пока что. Знаковое сложнее, это я уже потом делать буду. Дополнительно к функции умножения через обычные групповые инструкции еще бы сделать отдельную IMUL, которая работает с Immediate. Это очень полезная и крайне нужная инструкция для вычисления например, координат.
Очень медленно работа идет над этим процессором, потому что у меня нет времени на то, чтобы заниматься этим постоянно. Сегодня мне бы хотелось сделать инструкции умножения и деления, потому что это тоже важно, между прочим. И просто посмотреть, сколько занимает логических элементов текущий код, просто потому что интересно, влезет ли в 10к от Марсохода в будущем, это тоже важно.
У меня есть вторая плата, которую покупал совсем недавно, это OMDAZZ, и ее тоже было бы интересно проверить, потому что по техническим характеристикам она полностью совпадает с Марсоходом2. То есть по идее, если я смогу сделать для нее, то и для 3-го циклона тоже получится.
Игра Жизнь
Еще недавно я научился "шить" микросхему 150К ПЛИС, загрузил туда свою прошивку для симуляции поля игры "Жизнь" 128 на 120. Это значит, что каждая ячейка "живет" независимо от других и за один такт перебрасывается поле в новое состояние. Это значит, что если запустить на 25 мгц, то, учитывая 128 на 120 = 15360 ячеек, которые занимают 148К ЛЕ, то это равносильно будет обработке 384 млрд ячеек в секунду! Поразительная скорость массового параллелизма. Но это лишь простые ячейки, более сложного ничего не делал пока что, только игру "Жизнь".
У меня еще есть мечта сделать растеризацию фрактала Мандельброта, только вот, смогу ли я это сделать, тот еще вопрос... на самом деле, ничего меня не может остановить, чтобы это сделать, кроме собственной лени.
Итог дня
Сегодня я полдня делал шаблон для omdazz, назначал пины, проверял различные комбинации, тестировал VGA и вот что я скажу — какая-то есть проблема с видеовыходом, поскольку во-первых, там всего лишь 3 бита, во-вторых, изображение получается тусклым. Один из проверочных моих мониторов вообще не может настроиться на видевыход как надо, к тому же, картинка съезжает, возможно даже из-за этих тусклых цветов. Как я посмотрел на схеме, там подключено к 1 кОм резистору, вместо например, 100 Ом, и видимо поэтому изображение такое тусклое и показывается.
Вторая неприятная вещь в том состоит, что оказывается, пины, которые якобы GPIO, на самом деле присоединены к различным устройствам, и значит что придется использовать их совместно. И вообще так получается, что эти пины особо и не получится использовать, честно говоря. Да, можно отказаться от SDRAM например, в пользу пинов, но вместе их использовать никак не выйдет.
Еще на плате есть выводы на LCD экранчик, который присоединяется отдельно. У меня такое чувство, что его подцепить туда будет нельзя, поскольку похоже, не совпадают выводы. Но я должен буду это еще проверить. В любом случае, именно эти пины то и можно юзать как GPIO.
Смог сегодня сделать инструкции умножения и частично деления, только беззнаковое пока что. Знаковое сложнее, это я уже потом делать буду. Дополнительно к функции умножения через обычные групповые инструкции еще бы сделать отдельную IMUL, которая работает с Immediate. Это очень полезная и крайне нужная инструкция для вычисления например, координат.
11 окт 2024 Пт
Оптимизации продолжаются
Сегодня, как всегда, с утра продолжил делать оптимизации. Вчера я смог сделать MOVSx инструкцию, но не учел тот момент, что когда инструкция MOVSB, то требуется всего лишь 2 такта вместо 3 тактов, это исправил. Также оптимизировал инструкцию CMPSx, чтобы она выполнялась за 5 (BYTE) или 7 тактов (WORD). В случае REP тоже работает за 3 или 5 тактов за один раз. Это хорошо, и теперь осталось только сделать SCASx, который будет работать за 1/2 такта. И строковые инструкции будут полностью оптимизированы. Всего их 6 видов:
Само по себе выполнение оптимизации мне нужно для создания плавного скроллинга для игр, которые я хотел бы сделать. Например, можно начать с игры Flappy Bird, которая не так сложна для реализации. И я буду делать ее для чипа C5, с 308К памяти, потому что программирование на Марсоходе-2 меня пока не так сильно привлекает пока что. В любом случае, если потребуется, я просто доработаю для чипа этого.
В итоге смог оптимизировать всё и удалить ненужный код для ipstart. Есть только один недостаток, что при исполнении инструкции она не может быть оборвана посередине. Но это не так важно, все равно, если контроллер прерываний будет, то он будет реагировать на внешние изменения.
Есть одна важная вещь, которую мне надо сделать, это деление, да такое, чтобы побыстрее работало, и неплохо бы оптимизировать и инструкции сдвига, на самом деле. У меня по этому процессору просто прорва работы, он очень сырой и когда его завершу, я не знаю даже. Уже столько времени над ним работаю.
-
STOS
— сохранение A по адресу ES:DI -
LODS
— считывание из DS:SI в A -
MOVS
— копирование из DS:SI -> ES:DI -
CMPS
— сравнение DS:SI с ES:DI, через операцию CMP -
SCAS
— сравнение ES:DI с A
Само по себе выполнение оптимизации мне нужно для создания плавного скроллинга для игр, которые я хотел бы сделать. Например, можно начать с игры Flappy Bird, которая не так сложна для реализации. И я буду делать ее для чипа C5, с 308К памяти, потому что программирование на Марсоходе-2 меня пока не так сильно привлекает пока что. В любом случае, если потребуется, я просто доработаю для чипа этого.
В итоге смог оптимизировать всё и удалить ненужный код для ipstart. Есть только один недостаток, что при исполнении инструкции она не может быть оборвана посередине. Но это не так важно, все равно, если контроллер прерываний будет, то он будет реагировать на внешние изменения.
Есть одна важная вещь, которую мне надо сделать, это деление, да такое, чтобы побыстрее работало, и неплохо бы оптимизировать и инструкции сдвига, на самом деле. У меня по этому процессору просто прорва работы, он очень сырой и когда его завершу, я не знаю даже. Уже столько времени над ним работаю.
<< Ранние записи |
Поздние записи >>