Разбираюсь с экраном, много чего почерпнул. Но остались общие вопросы, для полной картины.

1. Как я понимаю некоторые игры используют буфер экрана, это где собирается экран, а потом перекидывается в область отображения.

Несмотря на специфический экран ZX, работа с ним с помощью процедур удобна по своей сути. Но возникает вопрос про буфер.

Вот найденный пример, который рисует шириной один байт вниз (28т на два вертикальных байта), в стандартный ZX экран
Код:
pop bc ;10
ld (hl),c ;7
inc h ;4
ld (hl),b ;7
Если буфер экрана (или его части), хранить последовательно, то работа с ним упирается в код,
примерно, такой (шириной для двух знакомест)

Код:
ld de,31 ;новая строка
pop bc ;данные спрайта
ld (hl),c ;первый байт
inc hl ;в буфере вправо на байт
ld (hl),b ;второй байт
add hl,de ;переход на следующую строку 31+1
---------
pop bc ;10
ld (hl),c ;7
inc hl ;6
ld (hl),b ;7
add hl,de ;11
Что явно увеличивает число тактов (41т на два горизонтальных байта), но позволяет заполнять экран без перерасчёта знакоместа. Сложно сейчас вычислить, что на дистанции быстрее, т.к. первый вариант готовит заранее HL (стек спрайта) под прерывание (что съедает немного тактов). Но,второй вариант явно долгий более 8.000т на всю вертикальную полосу шириной в два байта, плюс подготовка.

Отсюда вопрос, т.к. оптимизировать второй вариант, вряд ли получится (если можно, то подскажите как). Можно ли сделать так буфер, чтобы с ним легко было работать без перерасчёта знакоместа и убрав команду ADD, например, сгруппировав его как-то своеобразно, нелинейно? Даже можно с шагом значения через два байта графики, через два байта команд, "вписавшись" в вывод

Код:
D SP,экран
LD HL,NN ;два байта графики, здесь будет подставляться спрайт
PUSH HL
LD HL,NN
PUSH HL
Были ли такие темы и рассуждения?

2. Для расчёта стандартного экрана координат используется небольшая процедура, которая вычисляет
адрес, также есть быстрая процедура смещения вниз на строку.

Вопрос, если использовать таблиц адресов первой колонки, чтобы быстро находить адрес строки, не будет ли быстрее? Конкретных примеров не нашёл (только в комплексе, где осилить сейчас весь код не полчуится), а свой метод перехода, отрабатывает долго. Есть ли по этому поводу комментарии?

3. Ну и третий, вопрос, про буфер. Его используют, если много страниц со спрайтами и два видео экрана. Предполагаю, но это не точно, что в ЧВ сделано так, хотя не факт.

Получается, что в продвинутых ZX, в cpu0 можно устанавливать не только 0 страницу (это тоже редкость), а любую. Значит от буфера можно отказаться, генерировать в экран cpu3 (страницы 5 и 7), подхватывая спрайты из cpu0. Тем самым экономя время на переброску буфера на экран. Это верно? За исключением того, что это могут только новые ZX.