Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - pav13

Страницы: [1] 2 Далее
1
Anakinevgen, если дашь список адресов и необходимых значений, то добавлю.
https://www.emu-land.net/forum/index.php/topic,77919.msg1647731.html#msg1647731

может тут найдёшь нужное
https://www.emu-land.net/forum/index.php/topic,88982.msg1649494.html#msg1649494


RandomDude64xx, переименуй папку с музыкой, и попробуй поиграть без неё. если тормоза остались, то увы, лучше на 3DS не будет.

2
euror, всё работает. попробуй в другую папку положить программу. возможно что-то не так с правами доступа

в корень диска D например

upd
забудь мой предыдущий ответ, просто сделай что написано на экране.  перетащи файл ROM на файл программы, а не в консольное окно

3
При генерации через мусаши можно дефайном задавать под какие генерить же.
спс за идею. глянул musashi и он настроен по умолчанию на 68000. судя по всему надо сборку эмулятора делать с define BUILD_TABLES, чтобы он создал таблицы с нуля, а не использовал предрасчитанные. а потом как-то их сохранить в файл.

4
закинул musashi m680x0 opcode table в excel.
уточню, что эта таблица для всего семейства m680x0, не только m68000

можно ввести опкод в ячейке С1, а в E1 будет результат.

онлайн
https://docs.google.com/spreadsheets/d/15_shH2m7CCpVwqm5QfqcWF_k1o0iEjfTGDsFVrJkLrQ/edit?usp=drive_link

оффлайн
* musashi m680x0 opcode table.zip (98.52 КБ - загружено 22 раз.)

5
Таблицу можно сжать
:thumbup: 9 Кб это не 65 Кб

UPD: переписал на си.


всё работает. спс

6
Нужно использовать дизассемблер и не страдать фигнёй. Всё равно придётся проверять допустимость, что у branch инструкции размера byte не смещение 00 и что переходы в пределах рома (UPD: ещё код в RAM учитывать).
для простых задач простые решения.

прикрутил таблицу валидности опкодов, дало неплохое отсеивание.
// Читаем нормализованный ROM
uint8_t high_byte = 0;
uint8_t low_byte = 0;
int32_t target_addr = 0;
uint32_t trim = rom_has_header ? 0 : 0x200;

for (uint32_t byte_addr = trim; byte_addr + 1 < rom_size; byte_addr += 2) {
    high_byte = rom_data[byte_addr];

    // Ищем только BEQ(0x67) и BNE(0x66)
    if (high_byte != 0x66 && high_byte != 0x67)
        continue;

    low_byte = rom_data[byte_addr + 1];

    // Проверка целевого адреса на чётность и попадание в ROM
    if (low_byte != 0 && (low_byte & 1) == 0) {
        // Короткое смещение
        target_addr = byte_addr + 2 + (int8_t)low_byte;
    }
    else {
        // Длинное смещение
        if (low_byte != 0)
            continue;

        if (byte_addr + 3 >= rom_size)
            continue;

        uint16_t disp16 = (rom_data[byte_addr + 2] << 8) | rom_data[byte_addr + 3];

        if ((disp16 & 1) != 0)
            continue;

        target_addr = byte_addr + 2 + (int16_t)disp16;
    }

    if (target_addr < (int32_t)trim || (target_addr + 1) >= (int32_t)rom_size)
        continue;

    // Проверка данных по целевому адресу на легальность для M68K
    if (!m68k_opcode_valid[(rom_data[target_addr] << 8) | rom_data[target_addr + 1]])
        continue;
   
    // Правдоподобная BEQ/BNE инструкция
/* последующая обработка ......*/

}

7
в эмуляторе genesis plus gx есть
https://github.com/ekeeke/Genesis-Plus-GX/blob/master/core/m68k/m68ki_instruction_jump_table.h

скорее всего это сохранённый результат работы "build opcode table" из musashi, чтобы не создавать эту таблицу каждый новый запуск.

это массив размером 65536 элементов из обработчиков всех опкодов. если на месте опкода обработчик m68k_op_illegal,  m68k_op_1111 или m68k_op_1010 - то это не инструкция.

Добавлено позже:
m68k_op_illegal - 11529 опкодов
m68k_op_1010 - 4096 опкодов
m68k_op_1111 - 4096 опкодов

итого ~30.1 % всех возможных опкодов изначально нелегальные

https://pastebin.com/cnzH46gt
в виде bool массива для удобства использования. если обработчик был m68k_op_illegal,  m68k_op_1111 или m68k_op_1010, то false, а для всех остальных true.



8
сам ром переглючивает в памяти и запускает каждый шаг в этом эмуляторе из памяти?
да

Цитата
то есть без создания рома как файла на жестком диске?
да

9
всё делается в памяти, как ты и хотел.

то что всё делается в памяти - это конечно хорошо. но я думаю, что SeregaZ имел ввиду немного другое под

... в виде дллки, чтобы подключать его к своим проектам ...


то что сейчас сделано это не динамическая библиотека именно Глитчера, это один конкретный эмулятор с Глитчером внутри.


10
Новая версия встроенного в эмулятор Глитчера - 0.1.7
https://www.emu-land.net/forum/index.php/topic,88982.msg1652059.html#msg1652059

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

максимальная длина записи 1 минута (думаю больше не надо). записываются данные с двух первых геймпадов. нажатие кнопки Меню Глитчера завершает запись и запускает процесс отсеивания кандидатов.

теперь остаётся только правильно нажимать на "A-Найден / B-Баг / X-Не найден / Y-Шаг назад" в зависимости от происходящего на экране.

11
Sharpnull, спасибо. Это видимо знать надо, логикой и не пахнет. Думал что раз длинное смещение, значит вся команда 4 байта и соответственно PC будет на позиции 0x0404.

upd: N дней спустя...
надо было просто глянуть исходный код musashi, обработку опкода длинного смещения.
static void m68k_op_bne_16(void)
{
  if(COND_NE())
  {
    uint offset = OPER_I_16();
    REG_PC -= 2;
    m68ki_branch_16(offset);
    return;
  }
  REG_PC += 2;
  USE_CYCLES(CYC_BCC_NOTAKE_W);
}

12
добрый день. у меня вопрос по командам для процессора m68k sega md.

в частности как рассчитывается адрес после команды смещения короткого и длинного?
BNE короткое
адрес   данные
0х0400 0х66
0х0401 0х38

т.е. мне надо к 0х0402 прибавить 0х38.

BNE длинное
адрес   данные
0х0400 0х66
0х0401 0х00
0х0402 0х50
0х0403 0х22

а в этом случае как правильно?

0х0402 + 0х5022  или  0х0404 + 0х5022

13
кто-нибудь в курсе происходит ли вообще дальнейшая разработка маппера (хоть и в лице одного эмулятора) для paprium?

потому как нехитрый вывод логов выявил что из 28 команд не имеют своих обработчиков аж 11.
https://github.com/pav1388/Genesis-Plus-GX-PUNCHiUM/issues/1#issue-3284130573

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

14
Да, было бы не плохо  :)
проблема с кириллицей в пути наблюдается только с определённым форматом аудио или со всеми?
если только с wav, то я знаю в чём проблема, а если со всеми, то надо думать.
Chaotix, получается, если дело только в звуке, то теоретически игру можно переделать под Сега Сиди, чтобы не требовался особый эмулятор, так?
дело не только в sega сd. изначально хотел делать воспроизведение wav через sega сd, но потом решил не мучаться и свернул в сторону библиотеки dr_wav.  потому как это не решило бы основной проблемы с запуском.

в fbneo сделано воспроизведение то ли через cd, то ли через общий для этой экосистемы sampler. и размер аудио при этом 2,5 Гб с максимальным качеством и без вариантов. нет уж спасибо. весь смысл применения внешней библиотеки - это возможность использовать аудио любого качества (частота дискретизации, mono/stereo), что является необходимым для относительно слабых устройств.

посмотри сравнение первого коммита в форке с оригиналом, там и без воспроизведения музыки много изменений. не факт, что они вообще доберутся до основного репозитория.
https://github.com/pav1388/Genesis-Plus-GX-PUNCHiUM/commit/df148e5d13822b369470d9003b5479095d2d7a97


по-моему есть форк Genesis-Plus-GX-Extended-rom-size или что-то похожее. вроде как версия для запуска paprium сделана на его основе.

15
AnyZero, возможно мимокрокодил с настроенной средой под андроид и соберёт  :neznayu:

16
Ядро Genesis Plus GX с встроенным
ROM Glitcher: Branch Inverter
(BHI/BLS, BCC/BCS, BNE/BEQ, BVC/BVS, BPL/BMI, BGE/BLT, BGT/BLE)

298281-0



Идея Глитчера perfect_genius, реализация pav13.

Используется Libretro API. Рекомендую RetroArch, так как у него полная совместимость. Это форк оригинального ядра последней ревизии отдельной веткой, а не Paprium`ского.

Каждый шаг поиска занимает по времени доли секунды и одно нажатие на кнопку.

! RetroArch может путать A-B/X-Y на геймпаде. Решения проблемы - "настройки ядра > Input > ROM Glitcher Swap buttons". Эта настройка не относится к глобальной замене кнопок.








17
suhmai, там сам rom bin файл изменён. Замени.
Заменяет стартовых персонажей на всех скрытых. Только в Original

18
sidnei55, нет. эти файлы остались из оригинального репозитория ядра. потом удалю

19
Margel, все мои правки есть на последних 3 страницах темы. если лень искать, то на гитхабе читай описание к коммитам

20
В общем, чтобы перестать страдать ерундой с исходниками в архивах, сделал форк ядра Genesis Plus GX и добавил все изменения.

https://github.com/pav1388/Genesis-Plus-GX-PUNCHiUM

Было сделано переименование переменных, функций и файлов, так что исходники из архивов теперь не совместимы с репозиторием.

ПАНЧиУМ / PUNCHiUM, чтобы никто не догадался

upd:
- Добавлен чит в настройках ядра
- Система -> Cheat> One-Hit Kill (Paprium) ->  Enabled / Disabled, по умолчанию: Disabled.
- Убийство врагов одним ударом, а-ля One-Punch Man.

21
Ведь всё, что нужно, это просто положить ядро в папку.
Нифига ты хакер. "Ядро скачать, релиз эмулятора скачать, игру скачать. Правильно объединить. Упаковать. В облако закинуть." Так и вспотеть можно.

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

22
Kane1, скорее всего проблема в том, что для psp использовал 4 bit adpcm с низкой частотой дискретизации. Для vita и 3ds - 8 bit pcm 22050. Скачай музыку из поста для 3ds и замени в psp.

23
Правка ядра Genesis Plus GX

https://github.com/pav1388/Genesis-Plus-GX-PUNCHiUM

Немного окультурил изменения. Вынес включение кэша тайлов и выбор формата музыкальных треков в отдельные пункты настройки ядра из графического интерфейса:

Система -> Tile cache 1 MB (Paprium) -> Enabled / Disabled, По умолчанию Disabled.
Аудио -> Audio track format (Paprium) -> WAV / MP3 /OGG / Disabled, По умолчанию WAV. Это выбор предпочтительного формата, если такого нет, то проверяются остальные файлы в порядке wav-mp3-ogg.

Обновил:

PS Vita - all in one vpk
С помощью лома, кувалды и какой-то там матери удалось добиться стабильных кадров. Вроде как.
https://www.emu-land.net/forum/index.php/topic,77919.msg1647693.html#msg1647693

3DS - all in one 7z
Тут тоже всё работает. Прям хорошо.
https://www.emu-land.net/forum/index.php/topic,77919.msg1647459.html#msg1647459

PSP :P - all in one 7z
На ПК PPSSPP выдаёт 40 fps, немного замедленно. Wav музыка играет. На реальной PSP виснет при показе текстовой заставки с сюжетом. На Android PPSSPP 60 fps (youtube).
https://www.emu-land.net/forum/index.php/topic,77919.msg1647442.html#msg1647442

24
Почему люди не идут простым путем
кто-то играет в игру. кто-то играет с игрой. по итогу играют все.


кстати игру запустили с флешкартриджа
https://www.reddit.com/r/PAPRiUM/comments/1m5zd15/mapper_file_now_available_for_everdrive_pro_to/

25
Правка для ядра Genesis plus GX

уже содержит правки из -> https://www.emu-land.net/forum/index.php/topic,77919.msg1648316.html#msg1648316

- добавлен кэш тайлов (#define TILE_CACHE_ENABLE 1)

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

Серьёзного прироста производительности НЕ ждите.

Как уже писал ранее тайлы бывают по 32, 64, 96, 128, 192, 256, 288, 384, 512 байт, но обрабатываются всегда как 512 байтные (по крайней мере при декодировании).

Средняя скорость отрисовки одного спрайта (не тайла) проверено на vita 2000:
- без кэша:            52,6 наносекунды
- с кэшем на 1 Мб: 10,8 наносекунд


26
Немного технической информации  :wacko:


На резонный вопрос "нах.. Зачем?" отвечу, что хочу под это всё сделать кэш таблицы в оперативной памяти.

Тайловый кэш самый выгодный, в принципе работает и хорошо работает, но не возымел существенной прибавки производительности эмулятора.

Возможно если получится настроить кэш спрайтов и анимаций на работу по шаблонам, тогда что-то и получится

27
ещё одно ядро из RetroArch стало поддерживает Paprium - FinalBurn Neohttps://github.com/finalburnneo/FBNeo/releases/tag/latest
Возможно уже есть в последней ночной сборке https://buildbot.libretro.com/nightly/. Там какой-то нереальный квест надо пройти, чтобы понять куда ложить упакованный ром игры, куда ложить и как назвать архив с музыкой (причем не понятно в каком формате и с какими именами), откуда брать какие-то специальные файлы с описанием поддерживаемых ромсетов. Жесть

Исходник - paprium.h



28
Правка ядра

Для желающих протестировать производительность системы с разными звуковыми форматами и качеством

- поддержка mp3, wav, ogg
- поддержка любой частоты дискретизации до 48 кГц (чем ниже тем выгоднее в плане памяти и производительности. Капитан О)
- поддержка любого битрейта и битность для wav(хоть 4 bit ADPCM)
- поддержка моно/стерео (моно выгоднее в плане памяти и производительности. Капитан О)
- проверяется наличие файлов в такой последовательности: *.mp3 -> *.wav -> *.ogg
- имена файлов музыки такие как оригинальные, за исключением расширения
- не обязательно чтобы все файлы были в одном формате и одном качестве (половина может быть wav, а другая mp3)
- пока только полная загрузка файла в буфер (не вижу смысла делать потоковое воспроизведение, когда есть поддержка wav)
- убрана загрузка в память 4-х босс-треков при старте игры (может стоит вернуть? пока не знаю)


upd : наконец-то дошли руки протестировать на реальном железе (vita). босс-треки грузятся посреди уровня и оригинальные файлы с их качеством надолго бы останавливали уровень при подходе к боссу на слабых устройствах. но если использовать wav и качество скажем так PCM 8 bit mono 22050 гц (получаем папку размером 250 Мб), то загрузка трека буквально 1,5-2 секунды.
Теперь проц виты долбится в 80-90% и всё норм.

29
Про Игрок, не кисни, на радуге зависни   :)

30
el-son, discord просит номер телефона для начала общения но том сервере. но как бы не вводил пишет неверный номер телефона.

вот исходники из поста "Paprium для PS Vita - All in One" дополнительно надо закинуть в корень уже готового vpk папку paprium с музыкой любым архиватором.
https://transfer.it/t/ZvQVuFlzRbQD

Страницы: [1] 2 Далее