Сообщение от
Alex Rider
Ну при смене уровне же быстродействие не сильно критично... Можно распаковать/скопировать уровень в 7-й банк из любого другого. А область #C000 - #DAFF не занимай пока.
Если в оставшемся месте расположить таблицу с картами, то ее размер будет 37х256 клеток. Немного меньше 2х окон в высоту. Может не хватить.
Процедуры графики несложно запатчить под второй экран, зато он тебе даст гарантию отсутствия мерцания при условии, что за INT все успеет вывестись.
Пока постараюсь без второго экрана попробовать сделать.
Порядок вывода при этом может быть любым. В начале INT'а можно будет музыку поиграть и не париться.
А сколько тактов нужно, чтобы загрузить из буфера музыки очередную ноту в AY? Наверно этот буфер можно тоже размеситить в медленной памяти ?
По поводу схемы памяти - предусмотри сразу, что ISR (опрос клавиатуры, плеер), таблица прерываний и основной код графики и логики должны быть в #8000 - #BFFF. В медленную память можно убрать код работы с диском, стартовое меню, final cut (если не динамический), таблицы очков и подобное, что не требует большой скорости.
Понял.
---------- Post added at 06:18 ---------- Previous post was at 06:16 ----------
Сообщение от
Дмитрий
уровней сколько будет? если 4-5 (без музыки), куда ни шло, а если больше, то увы придется паковать... В этом ничего нет сложного, а учитывая структуру карты - множество повторяющихся элементов, то упакованная она будет занимать 1-2 кб не более. в страницу можно заткнуть по 8-10 карт/уровней... это если уж не думать о подгрузке уровней с накопителя.
Размеры и количество уровней пока не извествны. Да, наверно их можно будет ужать. Или сделать так, чтобы в 48К влез 1 уровень, а остальные загружать как независимые модули с носителя или из дополнительной памяти 128К. Сколько памяти надо под музыку и звуковые эффекты для AY?
---------- Post added at 07:08 ---------- Previous post was at 06:18 ----------
Сообщение от
drbars
Да ничего там сложного, просто расчеты границы. Без использования стека. Можно всякие трюки со скоростью танков ещё применять. Рисовать по очереди, пока один стоит (типа медленно едет), другой рисуется.
Я надеюсь ты не будешь использовать подпрогрумму Pause из ПЗУ для ограничения скорости танков?
Это делается иначе.
Вот пример, 15 спрайтов полных 3х3. Но я бы остановился на 8-ми танках, как максимуме.
Её фишка в том, что координаты могут быть отрицательные:
LD D,-8 ; D=Y
LD E,-1 ; E=X
Это выводит спрайт без левого и верхнего слобцов.
Для нормализации скорости танков - у нас ведь не гонки - буду использовать HALT для пропуска одного кадра.
Мелькающий серый бордер в вашем примере показывает, что процесс печати длится до самого низа экрана ?
Написал подпрограмму печати спрайтов 8х8 точек из буфера печати:
Код:
;===================================================================================================
;= ПЕЧАТЬ СПРАЙТОВ С ЦВЕТОМ РАЗМЕРОМ 1х1 КЛЕТКУ (8х8 ТОЧЕК) 130822-01 =
;= (ADDR_BUF) = ТЕКУЩИЙ АДРЕС В БУФЕРЕ ПЕЧАТИ =
;= ВХОД: B = КОЛИЧЕСТВО СПРАЙТОВ ДЛЯ ПЕЧАТИ =
;= ВЫПОЛНЯЕТСЯ В НАЧАЛЕ ПРОЦЕДУРЫ ОБРАБОТКИ ПРЕРЫВАНИЙ, ПРЕРЫВАНИЯ ДОЛЖНЫ БЫТЬ ЗАПРЕЩЕНЫ =
;= ВРЕМЯ ПЕЧАТИ ОДНОГО СПРАЙТА = 234 ТАКТА Z80A =
;===================================================================================================
PRINT_1X1:
LD (STACK_POINTER),SP ; СОХРАНЯЕМ УКАЗАТЕЛЬ СТЕКА
1 LD SP, (ADDR_BUF) ; ЗАГРУЖАЕМ ТЕКУЩИЙ АДРЕС В БУФЕРЕ ПЕЧАТИ
POP HL ; ЧИТАЕМ ИЗ БУФЕРА АДРЕС В ОБЛАСТИ АТРИБУТОВ
POP DE ; ЧИТАЕМ ИЗ БУФЕРА ЦВЕТ КЛЕТКИ В D
LD (HL),D ; ЗАКРАШИВАЕМ КЛЕТКУ
POP DE ; ЧИТАЕМ ИЗ БУФЕРА АДРЕС ВЕРХНЕГО БАЙТА BITMAP НА ЭКРАНЕ
POP HL ; ЧИТАЕМ ИЗ БУФЕРА АДРЕС ЧАСТИ BITMAP СПРАЙТА РАЗМЕРОМ 8 Х 8 ТОЧЕК
LD (ADDR_BUF),SP ; СОХРАНЯЕМ ТЕКУЩИЙ АДРЕС В БУФЕРЕ
LD SP,HL ; УКАЗАТЕЛЬ СТЕКА УСТАНАВЛИВАЕМ НА АДРЕС ЧАСТИ СПРАЙТА
EX DE,HL ; HL = АДРЕС ВЕРХНЕГО БАЙТА BITMAP НА ЭКРАНЕ
; ПЕЧАТЬ 1 И 2 БАЙТА
POP DE
LD (HL),E
INC H
LD (HL),D
INC H
; ПЕЧАТЬ 3 И 4 БАЙТА
POP DE
LD (HL),E
INC H
LD (HL),D
INC H
; ПЕЧАТЬ 5 И 6 БАЙТА
POP DE
LD (HL),E
INC H
LD (HL),D
INC H
; ПЕЧАТЬ 7 И 8 БАЙТА
POP DE
LD (HL),E
INC H
LD (HL),D
DJNZ 1B
LD SP,(STACK_POINTER) ; ВОССТАНАВЛИВАЕМ УКАЗАТЕЛЬ СТЕКА
RET