...и буржуи не поймут
Блин, я же просто про 8 сдвинутых теневых буферов толковал. Ландшафт точно так же тайлами с краю добавляется. В исходный экран без сдвига, а уже при переброске на экран в конце строки последний байтик сдвигаем и пишем в следующий буфер. В 48К все влезает, но минусы тоже есть.
Если же решил напрямую на экран тайлы кидать:
Я считал по-другому. В общем случае тайловый столбец выглядит вот так, сверху вниз:
1. земля сплошная...
2. кромка или пушка
3. вода пустая...
4. кромка или мина
5. трос от мины
6. земля сплошная...
Сплошную землю и воду рисовать не надо - само получится. Итого три тайла 16x16 (и возможно трос 16x?) на столбец. На экране 16 полных столбцов или 15 плюс 2 обрезанных (с правым краем придется немного похимичить).
а печатать как-нибудь так
Полутайл 8x16 (в сдвинутом виде 8x24) побайтно:
L1 C1 R1
L1 C1 R1
L2 C2 R2
L2 C2 R2
L3 C3 R3
L3 C3 R3
L4 C4 R4
L4 C4 R4
Движемся двойной змейкой "L1-L1-C1-C1-R1-R1-R2-R2-C2-C2-L2-L2-...",
причем левый край предыдущий тайл не портит, а вот справа останется чистая вода либо земля.
Первые четыре строчки:
ld a,(hl)
or L1
ld (hl),a
inc h
ld (hl),a
inc l
ld bc,C1R1
ld (hl),b
dec h
ld (hl),b
inc l
ld (hl),c
inc h
ld (hl),c
inc h
ld bc,C2R2
ld (hl),c
inc h
ld (hl),c
dec l
ld (hl),b
dec h
ld (hl),b
dec l
ld a,(hl)
or L2
ld (hl),a
inc h
ld (hl),a
inc h
...повторить то же самое на следующие четыре
Итого 72 байта, 360 тактов только на рисование, столько же для второго полутайла (плюс down_hl, если сразу печатать весь), минус в случае каждого конкретного тайла распиханные по регистрам совпадающие байты и пропуск вывода пустого по пустому. Трос универсальной процедурой можно быстро напечатать (на входе только сдвинутый байт и адрес). Всплывающие мины либо тупо размножить еще и по вертикальным кадрам, либо усложнить каждую процедуру (down_hl уже каждые две строчки).
Получилось без накладных расходов и спрайтов где-то минимум полфрейма на весь фон,
максимум... эээ... ну вряд ли вдвое больше
Должны уложиться, главное - ненароком луч не переехать.
Если я нигде не обсчитался![]()






Ответить с цитированием