Важная информация

User Tag List

Страница 17 из 17 ПерваяПервая ... 1314151617
Показано с 161 по 169 из 169

Тема: Портирование игр с PC на БК

  1. #161
    Activist Аватар для Manwe
    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    255
    Благодарностей: 110
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Глюки порождают "современное искусство". Буду бороться с ним
    Нажмите на изображение для увеличения. 

Название:	screenshot_87.jpg 
Просмотров:	120 
Размер:	23.6 Кб 
ID:	67115
    Manwe/SandS

  2. Этот пользователь поблагодарил Manwe за это полезное сообщение:
    nzeemin (01.12.2018)

  3. #162
    Activist
    Регистрация
    22.03.2018
    Адрес
    г. Усть-Каменогорск, Казахстан
    Сообщений
    358
    Благодарностей: 67
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Дизассемблирую программки для УКНЦ наткнулся на такую конструкцию:
    seg001:006676 mov #2600, R0
    seg001:006702 mov #2500, word_17414
    seg001:006710 call sub_17420
    seg001:006714 br loc_6676
    .................................................. ..........
    .................................................. ..........
    seg001:017420 mov SP, word_17412
    seg001:017424 call sub_56274
    .................................................. ..........
    .................................................. ..........
    seg001:056274 sub_56274: ; CODE XREF: sub_12226↑P
    seg001:056274
    seg001:056274 mov (SP)+, #0
    seg001:056300 mov R1, -(SP)
    seg001:056302 mov R2, -(SP)
    seg001:056304 mov R3, -(SP)
    seg001:056306 mov R4, -(SP)
    seg001:056310 mov R5, -(SP)
    seg001:056312 call @sub_56274+2
    seg001:056316 mov (SP)+, R5
    seg001:056320 mov (SP)+, R4
    seg001:056322 mov (SP)+, R3
    seg001:056324 mov (SP)+, R2
    seg001:056326 mov (SP)+, R1
    seg001:056330 return
    seg001:056330 ; End of function sub_56274

    Для чего может использоваться такая процедура?
    Последний раз редактировалось S_V_B; 02.12.2018 в 13:55.

  4. #163
    Activist Аватар для Manwe
    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    255
    Благодарностей: 110
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от S_V_B Посмотреть сообщение
    Для чего может использоваться такая процедура?
    Самое интересное, по-моему, пропущено (второй ряд многоточий).
    Я так понимаю, call sub_56274 делает следующее: сохраняет в стек регистры с R1 по R5, возвращается чтобы выполнить команды, идущие после call sub_56274 (где многоточия). Потом, встретив команду return, процедура восстановит из стека регистры с R1 по R5 и продолжит выполнение. А что там дальше со стеком и возвратом в основную программу - непонятно. Скрыто за многоточиями.
    То есть смысл всего этого - одной командой сохранить и восстановить регистры до и после вызова подпрограммы.

    - - - Добавлено - - -
    Нажмите на изображение для увеличения. 

Название:	delta.jpg 
Просмотров:	69 
Размер:	11.4 Кб 
ID:	67131

    Выкладываю bin и исходники алгоритма вывода спрайтов без мерцания посредством дельта-буфера.
    Получилось изящно, занимает мало памяти, но... жутко тормознуто. Для игр где много больших спрайтов не годится.
    delta-algorithm.zip
    Последний раз редактировалось Manwe; 02.12.2018 в 16:38.
    Manwe/SandS

  5. #164
    Activist
    Регистрация
    22.03.2018
    Адрес
    г. Усть-Каменогорск, Казахстан
    Сообщений
    358
    Благодарностей: 67
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Зачем она сама себя вызывает.. call @sub_56274+2..
    многоточия это три разных процедуры.. начинается все с call sub_17420.. идет дальше на sub_56274..
    а внутри нее call @sub_56274+2.. вот в чем вопрос..
    ...
    то что они пытаются сделать PUSHA я догадываюсь этот вызов часто встречается..
    и вообще такое ощущение что на ЯВУ написано, передача параметров через стек делается.. везде.


    /* Выкладываю bin и исходники алгоритма */
    Чуть бы побыстрее и было бы новое слово в игрописательстве..
    На УКНЦ этот алгоритм наверное тоже не подойдет потому что все нужно будет делать 2 раза
    Последний раз редактировалось S_V_B; 02.12.2018 в 17:29.

  6. #165
    Activist Аватар для Manwe
    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    255
    Благодарностей: 110
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от S_V_B Посмотреть сообщение
    Зачем она сама себя вызывает.. call @sub_56274+2..
    Она не себя вызывает, она берёт число #0 (только оно уже не 0, а заменено на адрес) и переходит по этому адресу.

    и вообще такое ощущение что на ЯВУ написано, передача параметров через стек делается.. везде.
    Похоже, да.


    Чуть бы побыстрее и было бы новое слово в игрописательстве..
    Если выполнять в статической памяти контроллера SMK, то будет намного быстрее.

    На УКНЦ этот алгоритм наверное тоже не подойдет потому что все нужно будет делать 2 раза
    А зачем два раза?
    Manwe/SandS

  7. #166
    Activist
    Регистрация
    22.03.2018
    Адрес
    г. Усть-Каменогорск, Казахстан
    Сообщений
    358
    Благодарностей: 67
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    /* А зачем два раза? */
    Ну плана ВОЗУ два же используем.. это в БК все за раз делается..
    Да и с регистровым доступом все равно долго будет.

    /* и переходит по этому адресу. */
    А ну да.. что-то я торможу.. это действительно PUSHA..
    в #0 .. лежит адрес возврата и когда делает call то возвращается в вызывающую процедуру но с сохраненными регистрами, а потом возвращается чтобы их восстановить.. точно ЯВУ.. потому что понатыкано где надо и где нет..

    хотел подсмотреть как они в "NEWTET.SAV" периферийным процом общаются, но код тяжело читается..
    Последний раз редактировалось S_V_B; 02.12.2018 в 18:28.

  8. #166
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  9. #167
    Activist Аватар для Manwe
    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    255
    Благодарностей: 110
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Попробую ещё одну идею вывода спрайтов.
    Поскольку больше двух спрайтов вряд ли буду пересекаться в одном месте, а если и будут, то три наложенных спрайта – это уже непонятная каша, то можно попарно сравнивать спрайты и искать области пересечения. Если такие области есть, то дополнять изображение в соответствующей области каждого спрайта, взяв пиксели (целыми словами) из другого спрайта.
    Если в какой-то области будет пересечение трёх и более спрайтов, то алгоритм обработает только первое найденное пересечение.
    Спрайты сначала целиком копируются во временный буфер (с применением сдвига на сколько-то точек), потом запускается поиск пересечений по координатам и размерам, в конце происходит обмен пикселями (словами) в найденных областях.
    Муторная выйдет подпрограмма вычисления области пересечения. Некрасивая.

    update: можно придать чуть-чуть красоты, сравнивая попарно левые и правые границы двух спрайтов и устанавливая (или сбрасывая) один бит для каждого сравнения. Получим число (16 вариантов), которое можно использовать как индекс в таблице ссылок на разные процедуры (для разных типов пересечений).
    Последний раз редактировалось Manwe; 02.12.2018 в 21:56.
    Manwe/SandS

  10. #168
    Veteran
    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    1,568
    Благодарностей: 213
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от S_V_B Посмотреть сообщение
    Дизассемблирую программки для УКНЦ наткнулся на такую конструкцию
    Извращение какое то. (насколько я помню, но правильный вариант легко восстановим) Это делает так:

    Код:
            JSR  R5, $SAVAL
            ...
            RETURN
            ...
    
    $SAVAL: MOV R0, -(SP)
            MOV R1, -(SP)
            MOV R2, -(SP)
            MOV R3, -(SP)
            MOV R4, -(SP)
            MOV R5, -(SP)
            CALL @(SP)+
            MOV (SP)+, R4
            MOV (SP)+, R3
            MOV (SP)+, R2
            MOV (SP)+, R1
            MOV (SP)+, R0
            MOV (SP)+, R5
            RETURN

  11. #169
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    3,574
    Благодарностей: 757
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    Попробую ещё одну идею вывода спрайтов.
    Поскольку больше двух спрайтов вряд ли буду пересекаться в одном месте, а если и будут, то три наложенных спрайта – это уже непонятная каша, то можно попарно сравнивать спрайты и искать области пересечения. Если такие области есть, то дополнять изображение в соответствующей области каждого спрайта, взяв пиксели (целыми словами) из другого спрайта.
    Если в какой-то области будет пересечение трёх и более спрайтов, то алгоритм обработает только первое найденное пересечение.
    Спрайты сначала целиком копируются во временный буфер (с применением сдвига на сколько-то точек), потом запускается поиск пересечений по координатам и размерам, в конце происходит обмен пикселями (словами) в найденных областях.
    Муторная выйдет подпрограмма вычисления области пересечения. Некрасивая.

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

    по маске удаляется старая фаза спрайта
    потом поверх накладывается новая фаза
    при пересечении выглядело занятно
    если интересно игра со спека DanDare2

    сама маска для удаления создавалась из спрайта
    С уважением,
    Jerri / Red Triangle.
    [02.05.2014] не забудь этот день. Чубайс должен умереть. Dixi.
    [l'Abbey des morts TSEvo EV...5%] kiwi кошелек +79178162712

Страница 17 из 17 ПерваяПервая ... 1314151617

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Портирование Stop the Express
    от nzeemin в разделе ДВК, УКНЦ
    Ответов: 90
    Последнее: 21.11.2018, 09:46
  2. Портирование Lode Runner БК->УКНЦ
    от nzeemin в разделе ДВК, УКНЦ
    Ответов: 100
    Последнее: 21.08.2017, 01:20
  3. Портирование на Xilinx конфигураций компьютеров на ПЛИС
    от parsec в разделе Клоны на ПЛИС, МК и БМК
    Ответов: 20
    Последнее: 01.04.2016, 20:11
  4. Ответов: 38
    Последнее: 23.11.2014, 16:00

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •