1

Тема: UNIver для Агатовских игр

В процессе наполнение сайта образами дисков с играми иногда возникают вопросы, на которые моих знаний не хватает.

В основном это связано с тем, что некоторые игры несколько по разному ведут себя на Агат-7 и на Агат-9.
А в некоторых случаях очень неплохо сделать максимально универсальные мини-сборники.
Даже вот была "Быстропускалка" написана:
http://agatcomp.ru/agat/Software/MicroD … tart.shtml

Но дело даже не в том, чтобы поправить код, чаще просто не понятно почему автор именно так сделал. И вот тут важно мнение и рассуждения форумчан.

2

Re: UNIver для Агатовских игр

Вот пример STARBLAZER,   
http://agatcomp.ru/agat/Software/Game/A … pple.shtml

При управлении пультами не обрабатывает сигнал от кнопок. Их оттуда убрали.
Зачем?

Раньше была мысль что Бадер это сделали из-за разницы обработки пультов у 7 и 9, типа кнопки поменяны местами и
состояние при нажатии разное 1 или 0. Но похоже разницы между 7 и 9 нету.
Вот тут в части "Непонятности" все подробности:  http://agatcomp.ru/agat/Hardware/Key_Joy/paddles.shtml

Получается Роман Бадер стал жертвой небылицы? Слабо верится, ведь у него был доступ к любым модификациям.

3

Re: UNIver для Агатовских игр

Есть вот такая мысль: кнопки в пультах при нажатии выдают высокий уровень (и в семерке и в девятке). Но поддержание низкого уровня, когда кнопки отпущены, в семерке и в девятке сделано по разному.

У семерки подтяжка кнопок к нулевому уровню сделана резисторами в самих пультах. У девятки - резисторами на системной плате.

Пультов было тоже две версии (с резистором к земле и без). В результате получается 4 варианта:
1) резистор есть на плате, но его нет в пульте (все ок)
2) резистор есть на плате и есть в пульте (все ок)
3) резистора нет на плате, но он есть в пульте (все ок)
4) резистора нет на плате и нет в пульте. Вот тут все плохо: нажата кнопка, не нажата - уровень всегда будет высокий.

Дальше мои соображения, почему в коде обработка кнопок выключена:
1) это было сделано специально, чтобы при любых сочетаниях пультов и плат результат был одинаковым (маловероятно);
2) это было сделано случайно. Пультами ведь вообще не слишком широко пользовались, их надежная работа не была в приоритете (мне кажется);
3) возможно, версия с правильной обработкой была, но она не выжила. Может быть, в каком-то конкретном игровом зале были кривые пульты, обработку кнопок отключили, а дальше патченная версия разошлась намного шире, чем непатченная?

4

Re: UNIver для Агатовских игр

А в чём собственно проблема?

5 Отредактировано garnizon (02-11-2020 22:51)

Re: UNIver для Агатовских игр

Dohtur Frag пишет:

А в чём собственно проблема?

Понять, почему убрали обработку кнопок пультов и по возможности вернуть.


avivanov76 пишет:

Дальше мои соображения, почему в коде обработка кнопок выключена

А не могло быть как-то так: ведь игра адаптирована с Apple (у него же тоже подтяжка на материнке?),
и та процедура что обрабатывала кнопки, на семерке с отключенными пультами, вызывала постоянную "стрельбу"?
И её убрали.
А дальше уже, как ты и пишешь, просто не озаботились написанием подходящей процедуры так как пульты не в почёте были?

6

Re: UNIver для Агатовских игр

Нет, у Apple подтяжки нет, все резисторы либо в пультах, либо в джойстиках, поэтому там отключение пульта вызовет такую же постоянную стрельбу.

Кстати, может прямо в Apple версии кнопки и были заблокированы?
Надо проверить.

7 Отредактировано avivanov76 (04-11-2020 02:40)

Re: UNIver для Агатовских игр

Патч, возвращающий управление пультами:

1E0F: 11
179F: 0D
17A4: 08

В Apple версии все работает нормально. Оттуда эти смещения для BMI и взял.
Интересно, что кнопки на пультах начинают работать даже до того как переключишь управление.
Возможно, из-за того, что управление с пультов полностью не отключалось, кто-то и пропатчил их "насовсем".

8 Отредактировано garnizon (04-11-2020 20:44)

Re: UNIver для Агатовских игр

Не могу догнать зачем тогда пропатчили, может на Агате это как-то мешало.

С этой игрой кстати, еще одна непонятка есть, там звук работает только на девятке. 
Здесь пробовали разобраться, но так дело куда-то и уехало: http://forum.agatcomp.ru//viewtopic.php?id=137
Звук там чтением выводится.

9 Отредактировано avivanov76 (05-11-2020 19:05)

Re: UNIver для Агатовских игр

Кажется, я понял, в чем тут дело было.

Сначала, почитав описание на сайте, я подумал, что Бадер сам добавил возможность отключения пультов. Вот взять хотя бы кнопку переключения "клавиатура/пульты". Это клавиша "=" на боковой клавиатуре, которой у Apple вообще нет.

Кажется логично, но на самом деле - нет. Процедура по адресу $17B6, которая отвечает за переключение  "клавиатура/пульты", кнопку ESC и некоторые другие, уже была в оригинальной версии для Apple и перешла в Агатовскую без изменений. То есть, возможность переключаться между клавиатурой и пультами была и на Apple.

Спрашивается, а как же клавиша "f="? А это случайное совпадение. Эта клавиша генерирует такой же код, что и сочетание Ctrl+C, которое использовалось на Apple. И на Агате точно также можно нажать УПР+Ц.

Так, а зачем же понадобилось патчить код для управления пультами? А дело в том, что в оригинальной версии есть ошибка. Когда управление пультами вроде как отключено, на самом деле отключается только ввод направления движения корабля. А кнопки пультов продолжают работать. То есть, при отключенных пультах корабль будет стрелять непрерывно.

Хорошо бы, конечно, выяснить, это Тони Сузуки (автор игры) эту багу посадил или кто-то после него в игрушке что-то патчил и эта версия широко разошлась (в той версии, что я скачал с apple2.org.za уже кто-то ковырялся). Но, в общем, неважно. Штатное отключение пультов не работало и надо было что-то делать.

Было всего два варианта: найти багу, либо отключить работу с пультами насовсем. Видимо, второй вариант оказался проще.

Кстати, у игрушки есть еще одна настройка, про которую не написано на сайте. Процедура по адресу $17B6 понимает такие комбинации клавиш:

Ctrl+C  УПР+Ц, f=  Переключение "клавиатура/пульты" (Controls)
Ctrl+S  УПР+С      Включение/выключение звука (Sound)
Ctrl+R  УПР+Р, f9  Перезапуск игры с самого начала (Restart)
ESC     РЕД        Пауза

Насчет звука могу сказать вот чего. Процедура генерации звука обычная. Ничего, что мешало бы ей работать на семерке я не вижу. Процедура точно такая же, как в оригинальной игре.

Есть две мысли, почему на семерке звук мог не работать:
1) случайно нажали УПР+С и выключили звук
2) процедура использует несколько рабочих массивов данных для создания звука. Перед тем, как издать звук, эти массивы заполняются из ресурсов игры. И вот содержимое этих массивов на Apple и на семерке отличается в момент окончания игры (проверял на эмуляторе). Возможно, в какой-то момент в эти массивы попадает неинициализированное содержимое памяти. И при каких-то значениях звук пропадает. Но тогда звук может пропадать и на девятке. По хорошему, надо много раз проверить игру на реальных Агатах, каждый раз выключая питание после проверки.

P.S.: одно не могу понять, зачем надо было вешать стрельбу на букву "Я"? Ведь пробелом, как в оригинале, стрелять удобнее.

10

Re: UNIver для Агатовских игр

avivanov76 пишет:

P.S.: одно не могу понять, зачем надо было вешать стрельбу на букву "Я"? Ведь пробелом, как в оригинале, стрелять удобнее.

Возможно, это вопрос личных предпочтений. Я, например, если есть возможность переназначить кнопки, тоже использую, извиняюсь за тавтологию, кнопку "Я". Она нажимается значительно легче и быстрее, чем "пробел" и расположена удобно для левой руки, в то время, как правая нажимает стрелки курсора. Прошу прощения, что не по теме, но, думаю, это вполне вероятное объяснение.

11

Re: UNIver для Агатовских игр

avivanov76 пишет:

Было всего два варианта: найти багу

А это реально сейчас сделать и поправить игру чтоб на сайте положить исправленную?

12

Re: UNIver для Агатовских игр

Сдлеать то можно, но я тут задумался, а была ли это на самом деле бага. Сначала мне показалось, что в коде просто что-то напутано с отключением кнопок пультов. А сейчас я внимательно эту логику разобрал и понял, что отключать эти кнопки никто и не пытался, и чтобы их отключить надо еще придумать куда впихнуть дополнительный код.

У меня вообще подозрение появилось, что в Apple версии кнопки пультов специально сделаны неотключаемыми. Типа, такой вид родительского контроля: если папа дома или учитель в школе заперли пульты в шкаф, то на компьютере и играть нельзя. Тем более, что на Apple пульты подключать сложнее, чем на Агате, и без вскрытия корпуса это не сделать.

И вот еще какой вопрос всплыл. По адресу $1061 тут вот такой красивый косвенный JMP:

    JMP    ($0200)

В Apple версии по адресу $0200 прописан некий адрес в коде. Насколько я понял, переход на этот адрес выполняется, когда 5-я миссия выполнена. Игрушка при этом снова предлагает пройти все пять миссий, но скорость игры при этом возрастает. И так по кругу, пока игрок не наберет 100000 очков. На этом месте игра кончается и выводится поздравление, типа "Вы большой молодец".

Проблема в том, что Агатовская версия ничего не пишет в адрес $0200, там остаются нули. А адрес, на который делается переход в Apple версии, на Агате вообще занимают какие-то данные. И вопрос вот в чем: а кто-нибудь до конца Star Blazer на Агате проходил? Что он делает после 5-й миссии? Играет дальше или просто виснет?

13

Re: UNIver для Агатовских игр

Я играл конкретно вот в этот диск в эмуляторе, не виснет точно, после пятого на первый снова переходит.
Там вот прям по ссылке для скачивания: http://agatcomp.ru/agat/Software/Game/A … pple.shtml
В архиве есть два текстовика с пометками.

14

Re: UNIver для Агатовских игр

Вот патч. Тут исправлено два куска кода, один используется в процессе игры, второй обслуживает меню.
Вот первый кусок, тут я умудрился впихнуть дополнительную проверку не используя ни одного лишнего байта 😎. Было (Apple):

SUB_1E03
        CLC
        BIT    ZP_F0
        BMI    CODE_1E1E
        LDA    DATA_C061
        ORA    DATA_C062
        BMI    CODE_1E21
        LDA    #$02
        AND    ZP_F1
        BEQ    CODE_1E1D
        LDA    #$FD
        AND    ZP_F1
        STA    ZP_F1
        SEC

Стало:

SUB_1E03
        CLC
        BIT    ZP_F0
        BMI    CODE_1E1E
        LDA    DATA_C061
        ORA    DATA_C062
        ORA    #$7F
        AND    ZP_F1
        BMI    CODE_1E21
        AND    #$02
        BEQ    CODE_1E1D
        EOR    ZP_F1
        STA    ZP_F1
        SEC

В ZP_F1 7-й (старший) бит определяет, читаются ли кнопки пультов. Манипуляции с 1-м битом - это проверка нажатия стрельбы с клавиатуры и сброс бита.

Второй кусок кода. Тут была логика, что если кнопка на пульте нажата, то надо переключить управление на пульты и начать игру. Иначе проверить последний введеный код с клавиатуры, и если это пробел, начать игру. Было:

SUB_1797
        LDA    ZP_F1
        ORA    #$80
        BIT    DATA_C061
        BMI    CODE_17AD
        BIT    DATA_C062
        BMI    CODE_17AD
        AND    #$7F
        LDY    ZP_F2
        CPY    #$A0
        BNE    CODE_17D0

Стало:

SUB_1797
        LDA    DATA_C061
        ORA    DATA_C062
        ASL    A
        LDA    ZP_F1
        BPL    CODE_17A7
        BCS    CODE_17AD
        NOP
        NOP
        NOP
CODE_17A7
        LDY    ZP_F2
        CPY    #$A0
        BNE    CODE_17D0

Ну тут легко - убирать код проще, чем вставлять.

Post's attachments

Attachment icon Star Blazer.FIL 30.79 kb, 157 downloads since 2020-11-09 

15

Re: UNIver для Агатовских игр

Спасибо! Про звук в Старбалзере  будем проверять на реале как посоветовал. Результаты сообщу.

А вот про звук в PUSHERе  (ссылку давал в 8 сообщении этого топика - так и не смогли понять никто) - печалька.

16 Отредактировано garnizon (06-12-2020 05:43)

Re: UNIver для Агатовских игр

AlexBel записал видео, видно что звук есть на семерке :)

Используется версия с патчем avivanov76 - так что управление тоже норм

https://yadi.sk/d/y2HtmuWjveMtjw