Дизасм Elite

Аватара пользователя
deathsoft
Сообщения: 167
Зарегистрирован: 22 окт 2016, 00:00

Сообщение deathsoft »

krt17 писал(а):
Ну будем решать проблемы по мере их возникновения
Так я думаю это не проблема в игре, игра то плавненько идет, я просто на кнопки не успеваю так быстро нажимать, в элите то урпавление инерционное, т.е. если долго жал вращение вокруг оси, то корабль и дальше продолжает вращаться когда кнопки уже отпущены, надо просто привыкнуть и делать коррекцию на инерционность корабля, и тогда думаю без проблем можно будет попадать во врагов даже при фреймовой игре.
Гость

Сообщение Гость »

deathsoft писал(а):
Если это так, то надо просто заюзать второй экран на 128к и делать пэйдж флипинг, вместо блитинга.
Яж псих, 48к онли. Отсюда и бипер и мучения с местом, не мазохист, просто псих Изображение
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
Сообщения: 929
Зарегистрирован: 08 июл 2016, 00:00

Сообщение dr.Titus »

Принципиальный вопрос - зачем там XOR а не OR?
Аватара пользователя
deathsoft
Сообщения: 167
Зарегистрирован: 22 окт 2016, 00:00

Сообщение deathsoft »

Еще неплохо было бы сделать redefine keys (чтобы без замедления программы, то прямо код патчить при инициализации), хотелось бы сделать газ на 'A'/'Z', а стрельбу на пробел. А то сейчас не удобно, газ на пробел и '/' а стрельба на 'A'.
Аватара пользователя
deathsoft
Сообщения: 167
Зарегистрирован: 22 окт 2016, 00:00

Сообщение deathsoft »

dr.Titus писал(а):
Если обьекты стираются по XOR, то работать с двумя экранами так будет сложнее.
Так не нужно ничего стирать, надо рисовать всегда новый кадр в экранный буфер и потом его переключать (правда хз хватит ли у спектрума на такое производительности, но на ПЦ делается именно так, там никто никогда ничего не стирает, рисуют всю сцену целиком заново).
Аватара пользователя
dr.Titus
Сообщения: 929
Зарегистрирован: 08 июл 2016, 00:00

Сообщение dr.Titus »

Интересная у них линия.
Вместо стандартного sub a,x, jr c, add a, y,
у них только add a,e, jr c
т.е. считается, что линия в одном измерении всегда кратна 256.
Гость

Сообщение Гость »

xor нужен что бы на фоне солнца рисовать, в него переключается если солнечный диск больше определенного радиуса. Без этого бои около солнца будут невозможны, а к нему летать придется ибо заправка от звезды существенная игровая механика. По хоr естественно ничего не стирается.
Гость

Сообщение Гость »

dr.Titus писал(а):
т.е. считается, что линия в одном измерении всегда кратна 256.
нет там до этого высчитывается коэффициент, типа синус. Есть уверенность что перевод на классический метод ускорит, единственное что пока останавливает, там возможны линии больше 256 в длину, насколько это критично пока не знаю.Отредактировано krt17 (2016-11-19 20:34:48)
Гость

Сообщение Гость »

deathsoft писал(а):
Еще неплохо было бы сделать redefine keys (чтобы без замедления программы, то прямо код патчить при инициализации), хотелось бы сделать газ на 'A'/'Z', а стрельбу на пробел. А то сейчас не удобно, газ на пробел и '/' а стрельба на 'A'.
Да я думаю без проблем, там в буфере экрана пусто, можно редефайн вставить при старте. Оригинальная раскладка сделана для резиновой клавы и там она удобна.
Аватара пользователя
dr.Titus
Сообщения: 929
Зарегистрирован: 08 июл 2016, 00:00

Сообщение dr.Titus »

krt17 писал(а):
нет там до этого высчитывается коэффициент, типа синус. Есть уверенность что перевод на классический метод ускорит, единственное что пока останавливает, там возможны линии больше 256 в длину, насколько это критично пока не знаю.
Не, наоборот замедлит. Так как раз наибыстрейшее решение.

Ты не ответил, сколько есть памяти для развертывания и оптимизации рисования линии?
Гость

Сообщение Гость »

dr.Titus писал(а):
Не, наоборот замедлит. Так как раз наибыстрейшее решение.
отрисовку конечно замедлит, но за счет отказа от математики в сумме может быть быстрее. Не знаю сколько можно под это выделить, возможно что то понадобится для расчета в 3д, в данном билде свободно около 2 кб.
Гость

Сообщение Гость »

Короче давай так, я немного подчищу линию что бы она была автономной, и завтра скину, коль интересно повозишься.
Аватара пользователя
dr.Titus
Сообщения: 929
Зарегистрирован: 08 июл 2016, 00:00

Сообщение dr.Titus »

Я тебе заодно сразу скину пару идей.

Первая - избавится от 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%. Линию как пример я привел что бы можно было оценить качество кода в простых местах, он почти идеален. В сложных расчетах там все хуже, с тем можно работать, когда все там оптимизируется будем смотреть на сколько где можно расложить и сколько это в сумме даст.
Аватара пользователя
dr.Titus
Сообщения: 929
Зарегистрирован: 08 июл 2016, 00:00

Сообщение dr.Titus »

Другой оптимизации я тут предложить не могу)
Аватара пользователя
dr.Titus
Сообщения: 929
Зарегистрирован: 08 июл 2016, 00:00

Сообщение dr.Titus »

Кстати, даже модификацию RLC C и INC L и XOR можно сохранить даже в разложенном цикле.
Просто придется записать 8 копий этих байт, а не одну.
Аватара пользователя
dr.Titus
Сообщения: 929
Зарегистрирован: 08 июл 2016, 00:00

Сообщение dr.Titus »

Да и вообще, зачем RLC C и INC L трогать?
Всегда рисовать слева направо.
А что касается вверх и вниз, то тут по любому придется иметь две копии.
А модификацию XOR (в 8 или скольких там экземплярах) можно один раз делать изредка, она же не постоянно меняется туда-сюда, наверное.
Гость

Сообщение Гость »

Подумал, в принципе такие раскладки дадут около 300 байтов +, вполне реально, ускорит каждую точку на 20+ тактов, что очень неплохо, сделаю вечерком, если нигде не ошибся должно неплохо помочь. Я сразу думал об этом но опасения потерять раньше времени с таким трудом отвоеванные байты немного сковывает Изображение
Аватара пользователя
GoodBoy
Сообщения: 664
Зарегистрирован: 09 июл 2016, 00:00

Сообщение GoodBoy »

deathsoft писал(а):
я просто на кнопки не успеваю так быстро нажимать, в элите то урпавление инерционное, т.е. если долго жал вращение вокруг оси, то корабль и дальше продолжает вращаться когда кнопки уже отпущены, надо просто привыкнуть и делать коррекцию на инерционность корабля, и тогда думаю без проблем можно будет попадать во врагов даже при фреймовой игре.
там ещё есть кнопки в режиме паузы (caps/shift)

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)
Изображение я знал что кнопки есть, но такую табличку не видел, в результате проверил все что они делают. Да есть еще кнопка f переключает что то, уходит в логику, еще не копался, возможно и перехват, как работает точно пока не знаю. Даже ошибся когда писал про отключение звука тут, S/Q одна как вкл/выкл остальные триггеры по xor.
Аватара пользователя
kalantaj
Сообщения: 2275
Зарегистрирован: 09 июл 2016, 00:00

Сообщение kalantaj »

caps shift - F = таргоняне вкл/откл
Гость

Сообщение Гость »

krt17 писал(а):
если нигде не ошибся
Конечно ошибся, раскладка прибавляет около килобайта, но все равно надо делать.
Гость

Сообщение Гость »

kalantaj писал(а):
caps shift - F = таргоняне вкл/откл
Да проверил, только на это, причем очень редко (?) перехват возможен и без этой кнопки.
Аватара пользователя
dr.Titus
Сообщения: 929
Зарегистрирован: 08 июл 2016, 00:00

Сообщение dr.Titus »

krt17 писал(а):
Конечно ошибся, раскладка прибавляет около килобайта, но все равно надо делать.

Сперва убыстришь линию, потом математику и игра залетает)

Интересно, что занимает основную память в Элите? Вроде графики нет, ничего такого нет. Модели кораблей не такие уж должны быть большие.
Это все код?
Гость

Сообщение Гость »

dr.Titus писал(а):
Это все код?
Да кода очень много, ~4кб модели, ~3кб пакованого текста, фонт, экранный буфер, остальное код.Отредактировано krt17 (2016-11-20 09:53:04)
Аватара пользователя
dr.Titus
Сообщения: 929
Зарегистрирован: 08 июл 2016, 00:00

Сообщение dr.Titus »

Зачем столько много кода? Что он там делает?
Гость

Сообщение Гость »

Там нет ничего явно лишнего, просто очень много работы через индексные регистры, да и просто в элите много всяких мелочей которые сами по себе не появятся, оптимизируется да хорошо зачастую, но вот так чтобы раз и 10 к без потерь оттуда не выжать. Не все сразу, когда в голове все будет по полочкам, можно будет о глобальном рефакторинге думать, пока рано.
Аватара пользователя
dr.Titus
Сообщения: 929
Зарегистрирован: 08 июл 2016, 00:00

Сообщение dr.Titus »

10к по коду понятное дело, что не добиться)
Если только ужать модели кораблей в какой-нить более удобный формат, да текст или фонт.
Аватара пользователя
GoodBoy
Сообщения: 664
Зарегистрирован: 09 июл 2016, 00:00

Сообщение GoodBoy »

dr.Titus писал(а):
Если только ужать модели кораблей в какой-нить более удобный формат
вроде Кладов как раз это и сделал
Аватара пользователя
dr.Titus
Сообщения: 929
Зарегистрирован: 08 июл 2016, 00:00

Сообщение dr.Titus »

Кстати, убирание рамки вокруг экрана и расширение рабочего поля на нее - не убыстрит ли игру?
Ответить