Что-то думаю надо именно так и поступить. Грубый подсчет:
1) на экране максимум 80 тайлов 8x8 = 640 байт
2) если выводить 1 тайл на 2 знакоместа. *2 = 1280 байт надо вывести в область экрана.
3) 1 байт выводится 16 тактов грубо говоря *16 = 20480 тактов на прорисовку ландшафта.
Получается, ландшафт можно запросто нарисовать за 1 прерывание!
а выводить как-нибудь так
pop bc
ld (hl),c
inc h
ld (hl),c
inc h
ld (hl),b
inc h
ld (hl),b
inc h
...
или
pop bc
ld (hl),c
inc l
ld (hl),b
inc h
ld (hl),b
dec l
ld (hl),с
inc h
...
Последний раз редактировалось char; 11.11.2009 в 13:14.
...и буржуи не поймут
Блин, я же просто про 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 уже каждые две строчки).
Получилось без накладных расходов и спрайтов где-то минимум полфрейма на весь фон,
максимум... эээ... ну вряд ли вдвое больше
Должны уложиться, главное - ненароком луч не переехать.
Если я нигде не обсчитался
Последний раз редактировалось Lethargeek; 11.11.2009 в 16:17.
Прихожу без разрешения, сею смерть и разрушение...
а может эта, - скроллировать rl (hl) не весь экран, а только то, что нужно?
Ты про сами кромки, что ли? Да не так уж их много. На каждый тайл (на все 8 сдвинутых фаз) уйдет меньше килобайта процедурами. Еще можно разными полутайлами верх-низ комбинировать. Зато справа автоматически тянется нужный хвост (вода или сплошная земля). Для особых случаев вроде мины в шахте можно добавить дополнительные кромки, которые выглядят, как сплошной квадрат. Этих может быть несколько в ландшафтном столбце, зато печатаются они очень быстро.
---------- Post added at 19:49 ---------- Previous post was at 19:43 ----------
а может эта, - ветку внимательно почитаешь?
Последний раз редактировалось Lethargeek; 11.11.2009 в 19:45.
Прихожу без разрешения, сею смерть и разрушение...
Убивает низкая скорость
сдвиг лодки на 1 пиксель за 2 фрейма убивает динамичность в 0
за 2 фрейма лодка должна двигаться на 2 пикселя
и земля тоже, если надо реальной как в оригинале динамики
ну собственно технология то есть
С уважением,
Jerri / Red Triangle.
По скорости получится то же, что и если перерисовывать то что нужно, т.е. тайлами. Т.к. информацию о том где скроллировать надо еще обработать. Да еще в этом случае мины надо нарисовать поверх того, что заскроллировали (а скроллируем в этом случае только края ландшафта ведь?).
---------- Post added at 10:14 ---------- Previous post was at 10:13 ----------
Буду делать тайлами. Сделаю - напишу.
---------- Post added at 10:18 ---------- Previous post was at 10:14 ----------
Что-то уж сложно.
Может всё таки просто тайлы выводить одной процедурой, а не зашивать их(тайлы) в множество процедур?
---------- Post added at 10:21 ---------- Previous post was at 10:18 ----------
Да, и задействую, всё же, второй экран. Чтобы не заморачиваться с лучом.
Последний раз редактировалось ace210; 12.11.2009 в 10:24.
Да что там сложного-то? Схема-то одна.
Если надо, могу немного погодя в закрытый подробнее написать, чтоб тут не засорять.
Так медленно же будет
Да нафиг он не нужен, ежели с умом подойти
Пускай бедолаги буржуи смогут запустить на своих реалах
Последний раз редактировалось Lethargeek; 12.11.2009 в 14:34.
Прихожу без разрешения, сею смерть и разрушение...
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)