С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Посмотри код, там индекс таблицы R0 подаётся на вход подпрограмме разворота.
В данном случае спрайты хранятся в 1-битном виде, а при развороте заодно и раскрашиваются в цвет (байт превращается в слово).
Последний раз редактировалось Manwe; 04.04.2020 в 22:59.
manwe.pdp-11.ru
Про разворот спрайтов я и говорил, что в реальном времени медленно, поэтому надо по таблице. После того как построена таблица (по фигу, что медленно), разворот спрайтов на БК делается так:
R1 - адрес исходного спрайтаКод:MOVB (R1)+,R0 ; get sprite pixels MOVB Mirror(R0),(R2)+ ; draw mirrored pixel
R2 - адрес куда рисовать развёрнутый спрайт
Mirror - адрес таблицы в памяти
Если исходный спрайт хранится в 1-битном виде, а надо рисовать в 2-битном, то между двумя MOV'ами появляется ещё команда ASL R0.
manwe.pdp-11.ru
на самом деле я ожидал разворот для нормальных 4х цветных спрайтов
но по больному счету по барабану.
таблица в R0?После того как построена таблица (по фигу, что медленно), разворот спрайтов на БК делается так:
R1 - адрес исходного спрайтаКод:MOVB (R1)+,R0 ; get sprite pixels MOVB Mirror(R0),(R2)+ ; draw mirrored pixel
R2 - адрес куда рисовать развёрнутый спрайт
Mirror - адрес таблицы в памяти
Если исходный спрайт хранится в 1-битном виде, а надо рисовать в 2-битном, то между двумя MOV'ами появляется ещё команда ASL R0.
С уважением,
Jerri / Red Triangle.
Сначала в R0 загружаются пиксели оригинального спрайта (один байт, 4 точки). В следующей команде это число R0 используется как индекс в массиве Mirror. В массиве Mirror лежат перевёрнутые пиксели (по 4 штуки в байте).
- - - Добавлено - - -
Чуть-чуть программу надо изменить: после MFPS (Move from processor state – сохранение бита C в стек) добавить ROR R1. Ну и цикл будет уже не 10(8), а 4.
P.S. на БК в ассемблерных командах аргументы записываются слева направо: source, destination
Последний раз редактировалось Manwe; 05.04.2020 в 14:53.
manwe.pdp-11.ru
ага т.е вот этот разворот
отжирает 6 байтКод:MOVB (R1)+,R0 ; get sprite pixels MOVB Mirror(R0),(R2)+ ; draw mirrored pixel
слишком много
можно было выровнять таблицу и сократить до 4х байт.
я знаюЧуть-чуть программу надо изменить: после MFPS (Move from processor state – сохранение бита C в стек) добавить ROR R1. Ну и цикл будет уже не 10(8), а 4.
P.S. на БК в ассемблерных командах аргументы записываются слева направо: source, destination
а зачем 8 если 4х вполне достаточно.
С уважением,
Jerri / Red Triangle.
Последний раз редактировалось Manwe; 06.04.2020 в 00:10.
manwe.pdp-11.ru
а разве при загрузке байта старшая часть регистра обнуляется?
MOVB (R1),R0
Источником в этой команде является младший байт ячейки, адрес которой хранится в R1 (т.е. ячейки MEM). (Не забывайте, что адрес слова совпадает с адресом его младшего байта.) Приемником же служит младший байт регистра R0. Байтовая команда, в которой используется регистровый способ адресации, всегда обращается к младшему байту указанного регистра. Старший байт регистра не имеет адреса, и поэтому ассемблер интерпретирует запись R0+1 как ссылку на регистр R1.
значит делаем так
выравниваем таблицу разворотов до параграфа
в R0 заносим адрес таблицы разворотов
Код:mov r0,Mirror MOVB (R1)+,R0 ; get sprite pixels MOVB (R0),(R2)+ ; draw mirrored pixel
Последний раз редактировалось jerri; 05.04.2020 в 20:23.
С уважением,
Jerri / Red Triangle.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)