Так я думаю это не проблема в игре, игра то плавненько идет, я просто на кнопки не успеваю так быстро нажимать, в элите то урпавление инерционное, т.е. если долго жал вращение вокруг оси, то корабль и дальше продолжает вращаться когда кнопки уже отпущены, надо просто привыкнуть и делать коррекцию на инерционность корабля, и тогда думаю без проблем можно будет попадать во врагов даже при фреймовой игре.krt17 писал(а):
Ну будем решать проблемы по мере их возникновения
Дизасм Elite
Яж псих, 48к онли. Отсюда и бипер и мучения с местом, не мазохист, просто психdeathsoft писал(а):
Если это так, то надо просто заюзать второй экран на 128к и делать пэйдж флипинг, вместо блитинга.

Да без проблемdr.Titus писал(а):
Все-таки лучше, если ты приведешь полный кусок.
Код:loc_B433dechloc_B434lda, (hl)@loc_B435orcld(hl), adecdretzexaaddejrnc, loc_B443loc_B43Frrccjrc, loc_B458loc_B443exadjnzloc_B433ldb, 8lda, hadda, 7ldh, alda, lsub20hldl, ajpnc, loc_B434lda, hsubbldh, ajploc_B434loc_B458incljploc_B443
Так не нужно ничего стирать, надо рисовать всегда новый кадр в экранный буфер и потом его переключать (правда хз хватит ли у спектрума на такое производительности, но на ПЦ делается именно так, там никто никогда ничего не стирает, рисуют всю сцену целиком заново).dr.Titus писал(а):
Если обьекты стираются по XOR, то работать с двумя экранами так будет сложнее.
нет там до этого высчитывается коэффициент, типа синус. Есть уверенность что перевод на классический метод ускорит, единственное что пока останавливает, там возможны линии больше 256 в длину, насколько это критично пока не знаю.Отредактировано krt17 (2016-11-19 20:34:48)dr.Titus писал(а):
т.е. считается, что линия в одном измерении всегда кратна 256.
Да я думаю без проблем, там в буфере экрана пусто, можно редефайн вставить при старте. Оригинальная раскладка сделана для резиновой клавы и там она удобна.deathsoft писал(а):
Еще неплохо было бы сделать redefine keys (чтобы без замедления программы, то прямо код патчить при инициализации), хотелось бы сделать газ на 'A'/'Z', а стрельбу на пробел. А то сейчас не удобно, газ на пробел и '/' а стрельба на 'A'.
Не, наоборот замедлит. Так как раз наибыстрейшее решение.krt17 писал(а):
нет там до этого высчитывается коэффициент, типа синус. Есть уверенность что перевод на классический метод ускорит, единственное что пока останавливает, там возможны линии больше 256 в длину, насколько это критично пока не знаю.
Ты не ответил, сколько есть памяти для развертывания и оптимизации рисования линии?
Я тебе заодно сразу скину пару идей.
Первая - избавится от DJNZ. Но для этого надо разложить цикл из 8 итераций в течение высоты одного знакоместа. Примерно так:Код:Loop:; Дублировать 8 разEntry0: LDA,(HL)ORCLD(HL),ADECDRETZINCHEXAF,AF'ADDA,EJRNC,.noOverRRCCJPNC,.noOverINCL.noOver:EXAF,AF'; конец фрагментаLDA,LADDA,$20LDL,AJRC,LoopLDA,HSUB$08LDH,AJPLoop
Единственное усложнение, что изначально тебе придется в зависимости от номера линии в знакоместе входить в точку входа от Entry0 до Entry7.
Если еще оптимизировать, то можно избавиться и от DEC D / RET Z.
Но для этого надо сделать две функции рисования линии. Одну обычную с DEC D / RET Z, а другую примерно такую:Код:Loop:; Дублировать 8 разEntry0: LDA,(HL)ORCLD(HL),AINCHEXAF,AF'ADDA,EJRNC,.noOverRRCCJPNC,.noOverINCL.noOver:EXAF,AF'; конец фрагментаLDA,LADDA,$20LDL,AJRC,.CarryLDA,HSUB$08LDH,A.Carry:DJNZLoopRET
Перед рисованием линии ты рассчитываешь, сколько знакомест по вертикали у тебя займет линия, и сперва рисуешь в течение целых знакомест посредством второй функции, а потом оставшееся последнее знакоместо дорисовываешь первой функцией.Отредактировано dr.Titus (2016-11-19 21:35:50)
Первая - избавится от DJNZ. Но для этого надо разложить цикл из 8 итераций в течение высоты одного знакоместа. Примерно так:Код:Loop:; Дублировать 8 разEntry0: LDA,(HL)ORCLD(HL),ADECDRETZINCHEXAF,AF'ADDA,EJRNC,.noOverRRCCJPNC,.noOverINCL.noOver:EXAF,AF'; конец фрагментаLDA,LADDA,$20LDL,AJRC,LoopLDA,HSUB$08LDH,AJPLoop
Единственное усложнение, что изначально тебе придется в зависимости от номера линии в знакоместе входить в точку входа от Entry0 до Entry7.
Если еще оптимизировать, то можно избавиться и от DEC D / RET Z.
Но для этого надо сделать две функции рисования линии. Одну обычную с DEC D / RET Z, а другую примерно такую:Код:Loop:; Дублировать 8 разEntry0: LDA,(HL)ORCLD(HL),AINCHEXAF,AF'ADDA,EJRNC,.noOverRRCCJPNC,.noOverINCL.noOver:EXAF,AF'; конец фрагментаLDA,LADDA,$20LDL,AJRC,.CarryLDA,HSUB$08LDH,A.Carry:DJNZLoopRET
Перед рисованием линии ты рассчитываешь, сколько знакомест по вертикали у тебя займет линия, и сперва рисуешь в течение целых знакомест посредством второй функции, а потом оставшееся последнее знакоместо дорисовываешь первой функцией.Отредактировано dr.Titus (2016-11-19 21:35:50)
Смотри, я тут конечно взбаламутил, а всего не сказал. Там настраивается и rlc и inc l и xor, теперь можно просто посчитать сколько займет места и тактов просто настройка. Нет к сожалению, пока это многовато, при том что именно рисование занимает около 30% а его ускорение в сумме даст процентов 5%. Линию как пример я привел что бы можно было оценить качество кода в простых местах, он почти идеален. В сложных расчетах там все хуже, с тем можно работать, когда все там оптимизируется будем смотреть на сколько где можно расложить и сколько это в сумме даст.
Подумал, в принципе такие раскладки дадут около 300 байтов +, вполне реально, ускорит каждую точку на 20+ тактов, что очень неплохо, сделаю вечерком, если нигде не ошибся должно неплохо помочь. Я сразу думал об этом но опасения потерять раньше времени с таким трудом отвоеванные байты немного сковывает 

там ещё есть кнопки в режиме паузы (caps/shift)deathsoft писал(а):
я просто на кнопки не успеваю так быстро нажимать, в элите то урпавление инерционное, т.е. если долго жал вращение вокруг оси, то корабль и дальше продолжает вращаться когда кнопки уже отпущены, надо просто привыкнуть и делать коррекцию на инерционность корабля, и тогда думаю без проблем можно будет попадать во врагов даже при фреймовой игре.
Keyboard recentering toggle R
Keyboard damping toggle D
Keyboard/joystick toggle K
Reverse joystick Y - Y-direction only
Reverse joystick B - both directions
Sound effects off Q
Sound effects on S
Start new game 1
и вроде есть что-то недокументированное,
типа включения появления таргонов?
ещё при отгрузке выдаётся код (он формируется на основе сбора каких-то данных, кол-во перелётов/побед/рейтинг?)
Кладов этот момент просто выкинул, а на западе когда проводились соревнования этот код подтверждал ваше мастерство.
ну и в поздней фирменной версии блок отгрузки чуть больше чем в старой.
х.з. что туда добавили
GoodBoy писал(а):
там ещё есть кнопки в режиме паузы (caps/shift)

krt17 писал(а):
Конечно ошибся, раскладка прибавляет около килобайта, но все равно надо делать.
Сперва убыстришь линию, потом математику и игра залетает)
Интересно, что занимает основную память в Элите? Вроде графики нет, ничего такого нет. Модели кораблей не такие уж должны быть большие.
Это все код?
Там нет ничего явно лишнего, просто очень много работы через индексные регистры, да и просто в элите много всяких мелочей которые сами по себе не появятся, оптимизируется да хорошо зачастую, но вот так чтобы раз и 10 к без потерь оттуда не выжать. Не все сразу, когда в голове все будет по полочкам, можно будет о глобальном рефакторинге думать, пока рано.