С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
- - - Добавлено - - -
реальным пользователям не пофиг на качество (в том числе и скорость, и размеры) программ
в современных проц не на 8 бит, аппаратные деления/умножения и дрова для вычислений на гпу
не особо выше чем с маскированием, больше позволяет сэкономить память на маске
- - - Добавлено - - -
и падажжи, ты опять собрался пиксели-байты складывать словами, не заботясь о переносе?
Прихожу без разрешения, сею смерть и разрушение...
Погодите, у Z80 нет что ли табличной адресации? Чем вас так испугала таблица адресов строк, что вы готовы вместо обращения к таблице по индексу умножать на 256 и складывать с умножением на 64?
manwe.pdp-11.ru
Последний раз редактировалось NEO SPECTRUMAN; 18.02.2020 в 20:11.
Так это результат применения совершенно других методов.
Я говорю вот про какой метод: допустим в R1 у тебя координата X, в R2 координата Y (всегда умноженная на 2). Чтобы получить адрес точки по координатам X,Y ты делаешь
Всё, теперь в R0 у тебя адрес точки. Хочешь - стирай её CLRB (R0). Хочешь, записывай число (например, данные из спрайта) MOVB (R3)+,(R0)+Код:MOV ScreenLines(R2),R0 ADD R1,R0
А теперь сравним с умножением на 320 (Y не умножен на 2):
Здесь мы делаем смелое предположение, что бит C заранее сброшен и координата Y настолько мала, что при умножении на 320 не получится переполнения. Если же учесть ещё и это, добавится ещё пара команд как минимум.Код:SWAB R2 MOV R2,R0 ROR R0 ASR R0 ADD R2,R0 ADD R1,R0 SWAB R2
Теперь посчитаем такты на БК 4 МГц.
Да-да, конечно
В медленной памяти:
первая процедура 56 тактов
вторая процедура 112 тактов
В быстрой памяти:
первая процедура 37.33 такта
вторая процедура 58 тактов
Внезапно 7 команд во второй программе - это 7 обращений к памяти. В то время как первая программа обращается к памяти 4 раза, причём первые два из них происходят за один цикл обработки и попадают в одно окно доступа к памяти.
Ну ладно, а что же с умножением на 256?
48 в медленной памяти,Код:MOV R2,R0 SWAB R0 ADD R1,R0
25 в быстрой.
В медленной памяти умножение на 256 получилось не сильно быстрей, чем по таблице (48 vs 56 ~ 17%). Любое отклонение от значения 256, будь оно хоть трижды "красивое" с точки зрения двоичной системы, с треском проигрывает табличному умножению. Любимая спектрумовская высота экрана 192 тоже проиграет.
Последний раз редактировалось Manwe; 18.02.2020 в 21:45.
manwe.pdp-11.ru
Прихожу без разрешения, сею смерть и разрушение...
зато +440 байт, которые могут пригодиться в других табличных расчётах
на машине, где всего-то 15.5 кб свободно
а что в быстрой, кстати?
- - - Добавлено - - -
+ с 320 меньше мучиться с масштабированием/обрезкой при любимом занятии быкашников - конвертации
- - - Добавлено - - -
притом табличка для странных разрешений необходима даже в случаях, когда не нужна рекордная скорость, или тормозить будет всё
Прихожу без разрешения, сею смерть и разрушение...
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)