Просмотр полной версии : Переброска ЧБ картинки...
Подскажите как быстрее перекинуть ЧБ картинку на экран, с учетом того
что память очень ограничена. Размер и формат картнки стандартный 6144
байт. Всего есть пять картинок, в каждой из них есть некоторое кол-во
повторяющихся байтов. (0, 255, и %01010101)
Изначально я использовал процедуру вида:
ld af,#ffff
ld bc,#0
ld hl,#%0101010101010101
ld de,10
push de
ld de,14
push de
push bc
push bc
push bc
За счет повтора байтов удавалось перекинуть
картнку за фрейм и сэкономить память.
Но 48-я память кончилась, и я решил отказаться
от фрейма в пользу памяти.
Однако пока кроме банального LDI в голову ничего не
приходит.
От процедуры зависит судьба игры. :o
Подскажите как быстрее перекинуть ЧБ картинку на экран, с учетом того
что память очень ограничена. Размер и формат картнки стандартный 6144
байт. Всего есть пять картинок, в каждой из них есть некоторое кол-во
повторяющихся байтов. (0, 255, и %01010101)
Изначально я использовал процедуру вида:
ld af,#ffff
ld bc,#0
ld hl,#%0101010101010101
ld de,10
push de
ld de,14
push de
push bc
push bc
push bc
Найти ещё несколько частых вордов и запхнуть их в hl'/bc'/af'/ix/iy ?
Найти ещё несколько частых вордов и запхнуть их в hl'/bc'/af'/ix/iy ?
Я же говорю страый метод уже не приемлем, слишком много места занимает.
Уже решил, буду юзать ldi, тормозно, но других вариантов не вижу.
Резка экран на спайты (чтобы исключить залитые знакоместа) выйгрышь дает смехотворный.
Я же говорю страый метод уже не приемлем, слишком много места занимает.
Уже решил, буду юзать ldi, тормозно, но других вариантов не вижу.
Резка экран на спайты (чтобы исключить залитые знакоместа) выйгрышь дает смехотворный.
А ещё можно повторяющиеся последовательности типа dup N:push hl: edup и любые другие загонять в лупы и 'процедуры' (ld ix,$+7:jp proc .... proc: ... :jp (ix) ).
Shadow Maker
28.06.2005, 01:11
И в чем тогда будет выйгрыш? В скорости не будет, примерно как тот же ldi... В общем похож оставь ldi либо почему бы не сделать один раз декранч этой хрени предварительно, поюзать, потом убить? Или она тебе постоянно нужна в памяти? Или игра сугубо 48k и не больше?
В общем похож оставь ldi либо почему бы не сделать один раз декранч этой хрени предварительно, поюзать, потом убить? Или она тебе постоянно нужна в памяти? Или игра сугубо 48k и не больше?
Картинка каждый игровой цикл заново выводится, игра 128к.
Кто-нибудь знает во сколько фреймов укладывался ЧВ? (в среднем)
У меня получается порядка 4-7, и это без всяких алгоритмов поиска
пути. :(
Да и в турбо режиме у меня скорость игры не увеличивается.
Картинка, которую ты перекидываешь - она статична? Т.е., её исходные данные никогда не изменяются?
Стоп... а почему "классический" подход типа LDSP/POP HL/DE/BC/AF/EX/EXA/POP HL/DE/BC/AF/LDSP/PUSH ... не катит?
Подскажите как быстрее перекинуть ЧБ картинку на экран, с учетом того
что память очень ограничена. Размер и формат картнки стандартный 6144
байт. Всего есть пять картинок, в каждой из них есть некоторое кол-во
повторяющихся байтов. (0, 255, и %01010101)
Изначально я использовал процедуру вида:
ld af,#ffff
ld bc,#0
ld hl,#%0101010101010101
ld de,10
push de
ld de,14
push de
push bc
push bc
push bc
За счет повтора байтов удавалось перекинуть
картнку за фрейм и сэкономить память.
Но 48-я память кончилась, и я решил отказаться
от фрейма в пользу памяти.
Однако пока кроме банального LDI в голову ничего не
приходит.
От процедуры зависит судьба игры. :o
Опиши более точно задачу, картинка статическая ? Может это спрайтовая картинка ?
Стоп... а почему "классический" подход типа LDSP/POP HL/DE/BC/AF/EX/EXA/POP HL/DE/BC/AF/LDSP/PUSH ... не катит?
Тем что кушает много памяти.
Текущий вариант (ld de,data:push de) занимает 8500-10800байт (на разных картинках). При размере процедуры 9500 байт, свободно в 48-й памяти остается 500 байт, чего явно не хватает для дописания игры. Максимум что могу выделить это 6144 байт на картинку и примерно 1кб на прцедурк печати.
Картинка, которую ты перекидываешь - она статична? Т.е., её исходные данные никогда не изменяются?
Да, просто картинка (игровое поле). В ходе игры не меняется.
Тем что кушает много памяти.
Ну так не разворачивай цикл полностью. Есть килобайт - вот в него и разверни, сколько получится. Будет немного медленнее, зато в память уложишься.
Тем что кушает много памяти.
Текущий вариант (ld de,data:push de) занимает 8500-10800байт (на разных картинках). При размере процедуры 9500 байт, свободно в 48-й памяти остается 500 байт, чего явно не хватает для дописания игры. Максимум что могу выделить это 6144 байт на картинку и примерно 1кб на прцедурк печати.
Выложи картинку, или пришли её на меил RobusAsmCoder(ne kotik)ukr.net, может в итоге получится ещё меньше чем 6144, кстати, а важно в один кадр вместиться, или можно немного больше ?
captain cobalt
28.06.2005, 20:02
А если хранить картинки в компрессированном виде? ;)
Распаковывать нужную и генерировать мегакод?
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot