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

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


Сообщения - Sharpnull

Страницы: [1] 2 3 4 5 ... 131 Далее
1
Как видим, работа очень сильно зависит от эмулятора
Пример palette.nes, о котором писал выше, работает нормально и в ужасном VirtuaNES, и в среднеточном FCEUX и в Mesen. Судя по коду, вы не поняли, что важен тайминг, откл. и вкл. экрана нужно в HBlank (за пределами видимой области scanline), а т. к. успеть нельзя за один HBlank, нужно откл. в 1-м и дождаться следующего HBlank и там записать цвета и вкл. экран придётся уже на 3-м HBlank. Получается, что у вас должно быть 2 scanline сплошного цвета $3F00, пока отключен экран (можно попробовать его тоже изменить сразу на цвет от фона "клавиша").

UPD: Я попробовал для примера переключать внизу палитры то на красную, то на синюю и у меня получилось. Я растянул на 3 HBlank и использовал цвет из PPU $3F04 для полос при откл. экране, но в FCEUX и VirtuaNES не знают про The_background_palette_hack и 2 scanline не того цвета. Вообще, удивительно, что у вас почти правильно работает, но не понял:
Цитата
   ; пропускаю цвета, чтобы вернутьсЯ на цвет фона (иначе фон зальет этим цветом)
   BIT PPUDATA
   BIT PPUDATA
   ; возвращаем адрес на позицию экрана (тот знакомест, где у нас нулевой спрайт)
   LDA #$23
   STA PPUADDR
   LDA #$3f
   STA PPUADDR
Там же нужен один BIT PPUDATA для возврата к цвету фона, а вторая запись в $2006 должна быть #$40.
Придётся ещё для PAL адаптировать. Не для всех это.

2
Как скачать с "КиноПоиска"? Точнее не с мобильного клиента, а сайта на ПК.
Так вам хакеры и рассказали как обходят защиту для скачивания платных фильмов и сериалов.

3
Нужно в виде exe просто.
Не знаю зачем это может понадобится. Современные эмуляторы, а не старая хрень типа Fusion и Gens, обновляются и бессмысленно каждый раз обновлять каждый exe, тем более они весят прилично, если говорить о BizHawk (там Genesis Plus GX) и RetroArch. После запуска exe происходит распаковка, что может быть не быстро и записывает на диск (расходуя ресурс SSD), оставляя где-то файлы. В общем, крайне тупая идея.

UPD: Выше я писал про тупую запаковку эмулятора. Можно поступить основательно: написать GUI (frontend) для конкретного ядра Libretro, ядро и ром хранить в ресурсах (если возможно, загружать DLL сразу в ОЗУ), минимум пунктов меню, будет почти как обычная нативная игра без распаковки и весить немного. Это тоже бессмысленно, но для ленивых людей пойдёт.

4
Arigato, вы можете попробовать переключение цвета, а то я вас отговорил. Здесь пример с переключением: https://forums.nesdev.org/viewtopic.php?t=13264. Разберите его, в Mesen в Event Viewer можно увидеть в каком пикселе были чтение/запись. В конце нужно будет записать адрес в $2006 где начинается нижняя часть. Но для переключения без артефактов придётся выбирать место с 1-2 сканлайном цвета фон (PPU $3F00), когда отключен экран, я посмотрел экраны Dictator и там бывает текст сразу выше "клавиша", тогда нужно переключать выше.
UPD: При использовании спрайтов для слова "клавиша", без изменения цветов в палитре можно менять фон между красным и синим, переключая на другой экран nametable, где будут заранее заполнены тайлы другого сплошного цвета (индекса цвета).

5
чтобы основной экран отрисовывался с одной палитрой, но низ уже с другой
Лучше не пытаться так делать, но это возможно: https://www.nesdev.org/wiki/Palette_change_mid_frame. У вас часть экрана сверху, потому что запись в $2006 вне VBlank меняет место откуда рисовать фон, так делают в играх иногда. Для меня эти эффекты сложные, нужно понимать как работает рисование кадра и тайминг соблюдать, хотя один раз я использовал Split X/Y scroll, взяв код https://www.nesdev.org/wiki/PPU_scrolling. Возможно проще будет вместо sprite 0 hit использовать прерывание, например от MMC3, но в обоих случаях срабатывание не происходит в одной и той же точке на экране. Там ещё спрайты можно сломать. А главная проблема, что в эмуляторах по-разному выглядят сложные эффекты и не всё эмулируется, поэтому придётся проверять на железе.
UPD: Если проблема в том, что у текста разный фон (в игре внизу красный и синий чередуются), то можно использовать маппер с переключением банков графики как MMC3, в других банках расположить такой же алфавит в тех же местах, но у фона сделать индекс цвета другой, тогда внизу у вас будет палитра из цветов "фон, серый (текст), синий, красный", вы переключаете банк с фоном из цвета синий, потом из цвета красный.

6
Epic > Midnight Ghost Hunt: https://store.epicgames.com/ru/p/midnight-ghost-hunt. Только мультиплеер, ранний доступ, играет мало человек, ну вы поняли.
Steam > Elspell: нажать Install https://steamdb.info/app/1986930/. Только VR.

7
С музыкой может не совсем верно сделал, но решение такое. Имеется две версии треков, для PAL играет немного быстрее, в FamiStudio параметр BPM 108, а для NTSC - 90 (значение определил по пропорции).
Там же просто нужно указать в движке FamiStudio значение TV системы (NTSC/PAL, предварительно вкл. поддержку - FAMISTUDIO_CFG_PAL_SUPPORT = 1) и трек будет один в роме, для SFX (эффектов) можно экспортировать в NTSC и PAL вместе.
В https://www.nesdev.org/wiki/Detect_TV_system написано: "NTSC needs different numbers of frames per beat from PAL NES and Dendy to achieve the same tempo" - это похоже про скорость и она учитывается в движках, а вот "PAL NES needs different period values from NTSC and Dendy to achieve the same music pitch", т. е. для Dendy нужно к скорости PAL движка выбрать pitch (высоту) от NTSC. Я не знаю как задаётся pitch, может Note tables от NTSC брать, но с выбором режима PAL.
UPD: Скомпилировал пример от FamiStudio с поддержкой PAL, для PAL рома передаю 0 в famistudio_init, а для Dendy ещё заменил famistudio_note_table_lsb и famistudio_note_table_msb от NTSC на месте от PAL. У меня проблемы с определением высоты музыки, но вроде сработало, вот ромы для теста, там NES 2.0 с указанным Frame Timing, поэтому в эмуляторах как Mesen будет автоматически выбран регион.
UPD2: В коде движка байт famistudio_pal_adjust отвечает за NTSC/PAL, одновременно и флаг (0 - PAL, != 0 - NTSC), и смещение для famistudio_note_table (97 для NTSC). Для одновременной поддержки NTSC/PAL/Dendy можно завести ещё переменную или доп. проверки.

8
SaintAspid, нашёл координаты (внутри текстуры и на экране), остаётся самое сложное - нарисовать буквы.

9
Суть просьбы: Нужно вернуть отображение этих опций в меню паузы.
Могу только вернуть кнопки Option и Exit. Для перевода нужно найти задание координат отдельных букв, этого не знаю.

10
Если есть желающие помочь с музыкой и звуковыми эффектами
Используйте https://famistudio.org, там музыку можно из MIDI импортировать и эффекты сделать, движок есть (https://famistudio.org/doc/soundengine/) и его легко вставить в ASM код. Можно сделать для PAL и NTSC, весить будет больше и нужно будет вставить небольшой код для определения NTSC/PAL/Dendy (https://www.nesdev.org/wiki/Detect_TV_system), к сожалению нет поддержки Dendy, а там звук отличается от PAL и NTSC.

11
Известный кому?
Любой кто покупал качественный кабель, зарядку и т. п. на али. Ещё Baseus хороший бренд. Смотрел подробные тесты на mysku, поэтому купил отличную зарядку от Ugreen на 18Вт и кабель Type-C от Baseus. Более дешёвые с али сделаны хуже, например, говорят у дешёвых кабелей бывает что при зарядке экран телефона плохо работает. Конечно не все модели удачные и идеальные, так с любым известным брендом, недавно ASUS запятналась с хреновым контролем качества на дорогих материнках (слили деньги на покупные обзоры).

12
Дополню для оригинальной европейской версии (E).
[SMD/GEN] The Story of Thor - A Successor of The Light (E) - NTSC / PAL60
От "Story of Thor (S) NTSC patch" взят "video mode to 28 cell vertical", а проверки контрольной суммы и региона убраны, а не инвертированы. Возвращены скорость аудио и тайминги начальной кат-сцены для 60Гц.

13
Ugreen известный бренд, должен быть качественным, только не понятно есть ли там аудио порт. На али такой модели у них сейчас нет, но есть HDMI -> VGA + Jack + доп. питание (интересно что это изменит).

14
Arigato, не тестируйте в мусорном VirtuaNES, используйте Mesen. В коде попадаются длинные записи как STA $0012 вместо STA $12. Для заглушки IRQ можно поставить адрес (метку) конца NMI, где и так RTI. Незачем постоянно делать PHP/PLP. Информацию лучше не располагать на краю экрана (8 пикселей слева и справа), хотя это видно для большинства телевизоров, но не всегда (https://www.nesdev.org/wiki/Overscan#For_game_developers) и это не красиво. В теме по 6502 уже написал, что нужно записывать палитру в VBlank всегда чтобы не было артефактов (UPD: вы уже сделали), а как недавно узнал лучше ещё после этого сделать так: https://www.nesdev.org/wiki/PPU_registers#Palette_corruption. Чтение контроллера без поддержки порта расширения Famicom и лишняя инструкция, хотя код почти как из https://www.nesdev.org/wiki/Controller_reading_code, вот так лучше:

15
1. Нужно ли тут 2 цикла или хватит одного? Нужно ли делать лишний BIT PPUSTATUS до цикла?
В https://www.nesdev.org/wiki/Init_code написано зачем ждать 2 раз: чтобы дождаться разогрева PPU, поэтому можно вообще не ждать, если ваш код будет производить долгие вычисления (30 000 тактов) до использования PPU. В Init_code специально вставили код очистки памяти между ожиданиями VBlank, чтобы не терять лишнего времени. 1-й BIT PPUSTATUS, потому что не знаем начальное состояние VBlank флага. Часто в играх делают 3 итерации ожидания, поэтому всегда ожидается нужное кол-во времени, я так использовал во 2-й варианте инициализации от меня:
Добавлю, что даже с отключенным экраном запись палитры нужно делать в VBlank, в Mesen заметно как записываются цвета в виде разноцветных полос на экране. Поэтому в коде инициализации с окончанием на ожидании VBlank можно сразу записать палитру, это нужно, потому что неизвестен начальный цвет фона (https://www.nesdev.org/wiki/PPU_power_up_state), а он используется для экрана даже с отключенным отображением фона и спрайтов (т. е. откл. экран или forced blanking) - https://www.nesdev.org/wiki/PPU_palettes#Backdrop_color_(palette_index_0)_uses.
Ну то есть как бы вообще нежелательно использовать данный метод?
Желательно только в коде инициализации. Я сам до конца не понимаю, но если включен NMI, то точно нельзя из-за Race Condition. Поэтому после инициализации в начале и включения NMI ожидайте только через проверки переменной, которая изменяется в NMI. Только у вас NMI код может быть долгим и ожидание в основном коде закончится вне VBlank, но вы можете весь код сделать в NMI обработчике: https://www.nesdev.org/wiki/NMI_thread.
Я уже отвечал похожим образом на emu-land.

16
Steam > TGV Voyages Train Simulator: https://store.steampowered.com/app/443910/. Удалённая игра, до 2 июня в 20:00 МСК.
DLC для Train Sim World® 2: LGV Méditerranée: Marseille - Avignon Route Add-On и Train Sim World® 3: LGV Mediterranee: Marseille - Avignon Route Add-On - TSW2 & TSW3 compatible.

17
Hard'n'Soft / Windows 11
« : 27 Май 2023, 18:05:15 »
Vochatrak, в 7z разные алгоритмы сжатия, Zstandard есть для 7-zip. Попробовал и по степени сжатия Zstandard хуже LZMA2 Ultra и по скорости, но у LZMA2 было больше потоков выбрано. Использовал https://github.com/facebook/zstd/releases/tag/v1.5.5, zstd.exe -19 "Gran Turismo 4 (USA) (v2.00).iso":
.iso - 4,94 ГиБ (5 314 478 080 байт)
.zst - 4,11 ГиБ (4 423 741 826 байт) - 83.24%
.7z  - 3,92 ГиБ (4 218 625 614 байт) - 79.38%
Где-то zstd может лучше.

18
Steam > Hue || Warhammer 40,000: Gladius - Relics of War: https://store.steampowered.com/app/383270/, https://store.steampowered.com/app/489630/. 1-я до 8 июн в 20:00 МСК, 2-я до 1 июн в 20:00 МСК.

19
Akira FMV, Sonic Mania FMV
Полная ерунда, единственный смысл в этих демо показать как конкретный человек может что-то сделать. В данном случае используется сжатие, по тайлам и/или по предыдущим кадрам, потому что несжатым не влезет в 4МиБ: 184*104*0.5*2 (байтов на 2 слоя для 1 кадра 31 цвет) * 7.5 FPS * 80 секунд = 11МиБ только на графику. Если конечно он не использовал маппер, в котором можно до 128МиБ, что не спортивно.
Как правильно понял, что на данный момент нет программ с графической оболочкой, способных самостоятельно конвертировать видео и WAV файлы
Как и с галерей картинок это тупость, потому что WAV плохой получается, с VGM хотя бы понятно, там слушают звук от конкретного чипа. Есть галерея картинок для NES, где специально сделана каждая картинка с добавлением цветов через спрайты. В моей галерее 16 цветов, можно сделать 31, но будет упираться в кол-во VRAM в некоторых картинках. Поэтому всё индивидуально.

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

20
lupus, SGDK вроде не делает заголовков, потому что в коде указывается частота и размер для PCM драйвера: SND_startPlay_PCM(music_pcm, sizeof(music_pcm), SOUND_RATE_8000, SOUND_PAN_CENTER, TRUE);, где music_pcm - массив const u8 music_pcm[];, а у других драйверов фиксированная частота и больше не знаю зачем заголовок. Функция вида SND_startPlay_PCM() передаёт параметры в Z80 драйвер, так что можно найти её и перехватывать адреса на аудио. Стоит учитывать, что PCM выровнено до 256 байт, а ADPCM до 128 байт.

21
Какой порядок нужен для ROM-ов Sega Mega Drive?
У MD Big-Endian, но ромы при записи и дампе могут с другим порядком байтов, это уже вы смотрите. Вы можете сделать перестановку при любом варианте, вам нужно знать как в файле у вас идут байты и их биты и что нужно получить. У меня при BE: в HEX-редакторе 01 04, значит биты от старшего (15) до младшего (0) идут слева направо как есть - 0000 0001 0000 0100, а если у меня сделать LE - будут сначала биты от 7 до 0 (bin 0000 0001), потом от 15 до 8 (bin 0000 01000). Так что наверно BE удобнее будет.

22
Вот проект для картинок + WAV на фоне, нужно будет ставить SGDK, Python 3 и к нему Pillow, всё в readme.txt, давно его писал. Предполагается, что человек умеет менять переменные среды и открывать командную строку от администратора. Проверил в SGDK 1.80, работает. Сегодня добавил сортировку палитры по светлости чтобы самый тёмный был цветом фона, так лучше при использовании 16 цветов, можно отдельно 15 цветов для картинки и фон - чёрный.

lupus, в SGDK (как написано в bin/rescomp.txt) есть несколько форматов в зависимости от Z80 драйвера:
* PCM - один канал 8 бит signed от 8КГц до 32КГц, весит много и качество не очень при 8КГц, но у меня отдельная сборка для него (full_build_8000hz.bat), т. к. при 8КГц у него размер меньше следующего драйвера.
* 2ADPCM - 4 бита и фиксированные 22050Гц, неплохой звук и размер поэтому у меня по умолчанию.
* Остальные 4PCM и XGM не использовал в этом проекте, у 4PCM фиксированные 16КГц, а у XGM видимо для эффектов (PCM SFX) на 14КГц при воспроизведении XGM музыки.
Аудио не должно сжиматься, поэтому PCM лежит в роме как есть после преобразования к 8 бита и можно открыть в аудио редакторе, только ADPCM сжато. Например, для 8000Гц в Audicity импортировать как Signed 8-bit PCM, 1 канал, 8000Гц и воспроизвести пока не услышишь звук, внизу вкл. отображение текущего положения в сэмплах, что и равно байтам в роме.

23
Под алгоритмом имел в виду более подробное описание действий. Как понял, обработка по 2 байта из файла и порядок байтов Big-Endian. Вот скрипт на Python 3, кидать файл на него (1-й аргумент), в скрипте задайте порядок байтов: BIG_ENDIAN = True - это BE, поставить False для Little-Endian, перестановку битов: список TABLE состоит из чисел от 0 до 15, это число - индекс бита из входного числа, а индекс самого списка указывает на индекс бита куда будет на выходе, т. е. для D15=D11 (D11 из входного в D15 выходного):
Справа после # комментарий для удобства, указывает на выходной бит.

24
Есть какой-то алгоритм, как таблица перестановки битов, или должно быть магическим способом?

25
В SGDK можно сунуть WAV и он у тебя в роме играет (простой код для воспроизведения). Я делал простую галерею: суёшь картинки и WAV, на выходе ром с переключением картинок и WAV аудио. Ещё делал конвертер видео в ром, но он хуже существующих демок и не доделал до полной автономности.

26
Чаще всего обновления что-то исправляют или добавляют. Почему не стоит обновляться? Кроме занимаемого места, но некоторые покупают в цифровом виде, тогда всё на накопителе. Большинство всегда ставит обновления, это не BIOS чтобы бояться.

27
Вопрос в том, где ошибка: либо в описании команды RTI, и она в реальности восстанавливает значения всех регистров, либо в книге, и заниматься сохранением регистров должен программист самостоятельно.
RTI восстанавливает только флаги, в большинстве игр в NMI делают PHA TXA PHA TYA PHA и обратные (по не знаю делают ещё PHP/PLP), можно делать STA $00 STX $01 STY $02 и обратные, если память свободная есть. Для простых обработчиков, которые не трогают X, Y, делают только PHA/PLA, совсем простые могут не сохранять (например, INC FrameCounter, RTI).
Ну и тема создана для вопросов и для всевозможных заметок и аккумуляции полезной информации
Из книг. Making Games for the NES (2019) - Steven Hugg (mega.nz). Dev Cart Issue 1 Vol.1 B07H72XDM3 (mega.nz) не помню где качал, там полезно про выбор цветов, много мусора из них.

Хотел поделиться макс. коротким кодом инициализации для освобождения места под хак, например. На основе https://www.nesdev.org/wiki/Init_code.
Или с большим ожиданием, но короче на 3 байта:

28
Видимо это: https://www.reddit.com/r/explainlikeimfive/comments/3e7a5b/eli5_why_does_practically_every_psxps1_games/. Я загуглил что там в PSX с Z-буфером, а его там нет, разрабам самим решать на какой глубине объект, получает не всегда хорошо.

29
Хочу сделать правильную таблицу для этого перевода
Для диалогов графика шрифта с F5000 - 8x16px, 1bpp. Из CrystalTile2:

30
И этот шум был немного другим, с более низким гудком в начале.
Есть с более заметным гудком из sound\gt4race2.ins (D420 - 2140F), также сделайте: смещения E0A6420 - E0BA40F и байты начала и конца для проверки:

Страницы: [1] 2 3 4 5 ... 131 Далее