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

User Tag List

Показано с 1 по 5 из 5

Тема: Unreal Speccy с трассировкой кадра

  1. #1
    Junior
    Регистрация
    10.08.2007
    Адрес
    Москва
    Сообщений
    5
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Unreal Speccy с трассировкой кадра

    Чего-то последнее время ностальгия замучила по демкам спектрума, решил глянуть. После просмотра очередного шедевра стала появляться мысль как сделан тот или иной эффект, копаться в недрах было лень и тут пришла мысль - так как большинство эффектов in one frame (или как раньше бы сказали "в один halt"), то можно просто делать дамп всех команд которые выполнились в этот момент. К сожалению ни один эмуль такой простой вещи не позволяет сделать. Пришлось искать исходники Unreal Speccy адаптированные для Visual Studio 2008 и делать фикс. Выкладываю это для общественности. Управление простое, нажатием F9 во время демки генерится файл с именем и директорией указанным в TraceFileName секции Misc, по умолчанию это tracefile.txt директории эмуля.

    P.S. Забавная штука, например в Insult где очень крутой точечный эффект, Rst7 в строке пишет что там 3200 dots in one frame, а на самом деле из всего 800

    В качестве примеров в архиве прилагается пару дампов - это вышеупомянутый dots из insult, а также intro dizzy 7 от titus'a.
    Вложения Вложения

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

  3. #2
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,557
    Спасибо Благодарностей отдано 
    1,220
    Спасибо Благодарностей получено 
    1,754
    Поблагодарили
    683 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Matador Посмотреть сообщение
    P.S. Забавная штука, например в Insult где очень крутой точечный эффект, Rst7 в строке пишет что там 3200 dots in one frame, а на самом деле из всего 800

    В качестве примеров в архиве прилагается пару дампов - это вышеупомянутый dots из insult, а также intro dizzy 7 от titus'a.
    Про 800 точек - это нормальная практика в классе эффектов SineDots, которая пошла с Амиги. Правда, на Амиге обычно писали, допустим, 800*4 = 3200 sinedots. Это говорит о том, что 800 точек реальные, а остальные - это их след в том или ином виде.

    А вот интро от Диззи-7 - поковыряйтесь. Там хитрая самогенерящаяся каждый кадр функция рисования скролла)

  4. #3
    Member
    Регистрация
    10.07.2009
    Адрес
    Санкт-Петербург
    Сообщений
    121
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Matador Посмотреть сообщение
    К сожалению ни один эмуль такой простой вещи не позволяет сделать. Пришлось искать исходники Unreal Speccy адаптированные для Visual Studio 2008 и делать фикс.
    Буквально месяц назад сделал подобное. Только не искал "адаптированные исходники" (что за ламерство?), а за полчаса сделал проект для студии из последнего снапшота сорцов от Deathsoft.

    Мой трассер больше предназначен для игр, и не привязан к фрейму. (Понятно, что добавить привязку к фрейму тривиально) Он трассирует всё. Какие ячейки писались, читались, исполнялись, обнулялись. Для этого пришлось серъёзно перепахать коллбеки из команд, т.к. там были события на чтение и запись, но не было на исполнение. То есть не отличить чтение от исполнения, Только m1_cycle можно было ловить, исполнение первого байта команды, что меня не устраивало.

    Для каждой ячейки строится список команд, обращавшихся к ней. Запоминается какое именно было обращение, сколько раз. По этим данным нетрудно в динамике построить обратные таблицы - куда лазила какая команда.

    Для начала записи лога в игре доходим до интересующего нас момента (как правило начало игрового процесса, когда управление выбрано, все стартовые мессаги завершились и т.д.). Жмём хоткей и сбор статистики начинается. В это время бегаем по уровню, делаем всё то, что хотелось бы потом проанализировать. Размер статистики растёт только до определённого момента, его рост всё время замедляется и в пределе останавливается, только счётчики продолжают накручиваться. В завершении жмём другой хоткей (всё настраивается в INI файле) и эмулятор сохраняет файл-лог.

    Для всего этого дела написал вьювер. В котором можно быстро просматривать дамп. С подсветкой строк (например - жёлтые это исполнение, синие - самомодифицирующийся код, красные - запись в ячейку и т.д.). При выборе инструкции, если она писала в экран, это сразу же визуализируется в графическом виде, на битмапке в форме speccy-экрана, разлинованной по знакоместам. А также сделал функции автопоиска таблиц (отражения, автомаски, экранные адреса) и спрайтов. Плюс просмотрщик памяти, чтобы искать графику "вручную".

    Немного интересных фактов, которые уже удалось нарыть:
    - Mirror Table в играх Dave Thompson-а размещается в быстрой памяти, хотя хватило бы и медленной. Rafael Cecco размещает эту таблицу в медленной памяти.
    - Saboteur2 и Satan размещают эту таблицу и обращаются к ней крайне по-идиотски.
    - копирование бек-буфера на экран в играх Dave Thompson-a (Yogi Great Escape, Scooby&Scrappy Doo, Hong Kong Phooey, Potsworth&Co) абсолютно такое же, как и в более ранних играх Mike Lamb-а (Robocop, Batman-3). Видимо Dave утащил идею, когда 1988 работал на Ocean Хотя кто знает...
    - отрисовка экрана в Wacky Races содержит баг: один байт не отрисовывается.


    Вот пара примеров работы с дампом:

    Поиск inner-loops:
    Группируем байты по типу доступа Execute. Выбираем рассчёт частоты исполнения по доступу Execute. Сортируем созданные блоки по столбцу Frequence. Блоки кода будут отсортированы от наболее часто исполнявшихся к наименее.

    Поиск самомодифицирущегося кода и кто этот код генерирует:
    Группируем байты по типу доступа Execute & Write. Видим все самомодифицирующиеся блоки. Если надо, сортируем по частоте исполнения или модификации, по размеру. Выбирая блок, в соседнем списке видим все команды, к нему обращавшиеся. Двойной щелчок на команде делает прыжок на блок кода, в который входит данная команда (то есть на генератор самомодифицирующегося кода)

    Пока играюсь с этим делом, обкатываю, дописываю функционал. Сейчас вот хочу дизассемблер прилепить, а то каждый раз переключаться в IDA неудобно. И переделать диалоговый UI на Docking Panes. Когда пойму что готово - выложу на http://omegahg.com.
    Последний раз редактировалось Screw; 15.08.2011 в 14:05.

  5. #4
    Junior
    Регистрация
    10.08.2007
    Адрес
    Москва
    Сообщений
    5
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    А вот интро от Диззи-7 - поковыряйтесь. Там хитрая самогенерящаяся каждый кадр функция рисования скролла)
    Ну интро Диззи 7 одно из самых крутых на спектруме, помню в 90х у нас "челюсть отвисла" когда увидели. Еще очень достоин внимание zoom scroll из Illulision demo от X-Trade, там похоже чистый realtime вообще (trace дамп прилагается).
    Вложения Вложения

  6. #5
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,557
    Спасибо Благодарностей отдано 
    1,220
    Спасибо Благодарностей получено 
    1,754
    Поблагодарили
    683 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Matador Посмотреть сообщение
    Ну интро Диззи 7 одно из самых крутых на спектруме, помню в 90х у нас "челюсть отвисла" когда увидели. Еще очень достоин внимание zoom scroll из Illulision demo от X-Trade, там похоже чистый realtime вообще (trace дамп прилагается).
    Думаю, что как раз в Illusion не совсем чистый реалтайм, а скорее всего имеются программные шаблоны для растяжения на заданную ширину. Тогда как в Диззи-7 полный реалтайм, без каких либо таблиц сжатия/растяжения. Причем, в Диззи-7 эффект занимает только половину прерывания.

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

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

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

Похожие темы

  1. Порт Unreal Speccy под Linux!
    от ^m00h^ в разделе Эмуляторы
    Ответов: 62
    Последнее: 28.11.2018, 22:02
  2. Настройщик Unreal Speccy
    от Dr.Lion/RSM в разделе Эмуляторы
    Ответов: 97
    Последнее: 03.03.2008, 14:12
  3. unreal speccy ряд вопросов по monitor
    от Raider в разделе Эмуляторы
    Ответов: 83
    Последнее: 25.10.2005, 00:59
  4. unreal speccy beakpoints
    от Raider в разделе Эмуляторы
    Ответов: 2
    Последнее: 10.07.2005, 23:13

Ваши права

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