Наркоманы ворчуны.
Есть простая задача. Классическая игра, идет приемлемо на 3,5 но в некоторых моментах существенно тормозит, для примера квазатрон.
Разберемся что нужно сделать чтобы при включении турбо 20 Мгц (да хоть на 100) дроид не носился как безумный дракон, а при скролле все сдвигалось с максимальной скоростью.
Организуется счетчик отсчитывающий число прерываний между обновлениями экрана. Пока после предыдущей отрисовки не прошло 4 кадра ждем. Соответствующий код
В данном случае потратил я на него с копаниями минут 15. На 3.5 мгц не будет дополнительной паузы и игра абсолютно не изменится.Код:org 0xdd7c ld a, (0xaf2b) ;это было cp 7 call nc, 0xc05a l1 cnt equ $+1 ld a, 0 cp 4 jr c, l1 xor a ld (cnt), a ret int push hl push af ld hl, cnt inc (hl) pop af pop hl jp 0xbd2d display $ org 0xe6e6 jp int
Все, наблюдаем ровный фреймрейт при движении и шустрый скролл. Изначально квазатрон работал так, никакой синхры по прерывниям не было, но они включены, на них висят звуковые эффекты. Более менее постоянная скорость обеспечивается циклом паузы зависящей от количества врагов на экране, больше врагов меньше пауза.
Это не единственная проблема конкретно в этой игре, миниигра также не синхрится по прерываниям, причем в ней 2 фазы, выбор стороны и собственно сама схватка. Там тоже нужны задержки подобные игровому циклу, мне уже стало лениво искать куда их вставить.
При чем тут бла бла бла о том кто когда что с чем синхрил и какие турбы бывают, при чем тут демы.




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