Разработка и ромхакинг > Ромхакинг
[Дэнди/NES/SMD] ROM glitcher - сделай себе хак не зная ромхакинг
Беларус учит русский:
Sharpnull спасибо, я перекрестился и передумал добавлять поддержку NES :hi:
AnyZero:
--- Цитата: perfect_genius от 23 Сентябрь 2025, 13:59:43 ---Уклонился от ответа :shifty:
Раз в одном случае "счетчики" и заглавные буквы, а в другом уже "счётчики" и строчные, то предположу, что тут смешанный опыт - твой и чужой
--- Конец цитаты ---
Можно сказать 80% личный опыт, даже больше. Заглавные в программе же были, а тут в ответе.
--- Цитата: perfect_genius от 23 Сентябрь 2025, 13:59:43 ---перекрестился и передумал добавлять поддержку NES
--- Конец цитаты ---
Зря зря :lol:
pav13:
--- Цитата: AnyZero от 19 Сентябрь 2025, 07:02:24 ---NesGlitcher v2.1.1
Фикс счётчиков.
--- Конец цитаты ---
как по мне nes глитчеру, да впрочем как и оригинальному, не хватает функционала "Лаунчера". а то от перетаскивания файла на файл вымораживает, особенно в total cmd. не надо мне писать про создание кнопки программы (это хлама на панели не надо) или перетаскивание файлов по очереди в строку команд (имена содержат пробелы, а кавычки сами не дописываются)
вот хотя бы батник положить в папку
--- Код: ---@echo off
:menu
cls
echo ==========================
echo NesGlitcher Launcher
echo ==========================
echo.
set count=0
echo Found ROM files:
echo ----------------
echo 0. CONTINUE SEARCHING
echo.
dir /b *.nes *.fds *.bin *.rom 2>nul > temp_list.txt
for /f "tokens=*" %%f in (temp_list.txt) do (
set /a count+=1
call echo %%count%%. %%f
call set "file_%%count%%=%%f"
)
del temp_list.txt 2>nul
echo.
if %count%==0 (
echo No NES ROM files found.
echo Supported: .nes .fds .bin .rom
echo.
pause
exit /b
)
:input
set choice=
set /p "choice=Enter file number (0~%count%) or 'q' to quit: "
if "%choice%"=="q" exit /b
if "%choice%"=="0" goto launch
if "%choice%"=="" goto input
set valid=0
for /l %%i in (1,1,%count%) do (
if "%choice%"=="%%i" set valid=1
)
if "%valid%"=="0" goto invalid
call set selectedFile=%%file_%choice%%%
echo.
echo Launching: %selectedFile%
echo.
:launch
set glitcherExe=
for %%e in (nesglitcher*.exe) do set glitcherExe=%%e
if "%glitcherExe%"=="" (
echo Error: nesglitcher*.exe not found!
echo.
pause
exit /b
)
if "%choice%"=="0" "%glitcherExe%"&goto menu
echo Running: %glitcherExe% "%selectedFile%"
echo.
"%glitcherExe%" "%selectedFile%"
goto menu
:invalid
echo Invalid input. Please enter a number between 0 and %count%.
goto input
--- Конец кода ---
!RUN NesGlitcher.bat.txt (1.38 КБ - загружено 119 раз.)
upd:
NesGlitcher v2.1.1 сломан, нажимаю Найден и сразу получаю 1 инструкцию. А куда делась "Локализация"?
Беларус учит русский:
Изменил места в коде, непонятные нейросетям и, похоже, антивирусу Вин11 - он впервые не удалил мою же программу :rofl:
Добавил поддержку NES. Додумался проверить только это:
-файтинг с черепахами, Хотхэд против Хотхэда - 13 шагов
-Контра, не надо набирать код Конами на 30 продолжений - 22 шага
Описанные AnyZero приколы должны найтись быстрее, т.к. у меня идёт сверка по таблице валидности инструкций, что отсеивает половину кандидатов на инструкцию.
SeregaZ:
надо образ рома, создаваемый в памяти - вписывать в память эмулятора и потом дергать перезапуск.
Беларус учит русский:
Это сделаю следующим, но тебе-то зачем? Ты разве этим пользуешься? Чем не устраивает вариант от pav13?
Или тебя заинтересовала поддержка NES?
SeregaZ:
запись образа рома в память эмулятора мне бы пригодилась.
AnyZero:
--- Цитата: pav13 от 09 Октябрь 2025, 01:32:58 ---в nes glitcher очень много баг-шагов было
--- Конец цитаты ---
Лотерея :ohmy:, в той же Контре Konami код срабатывал с 11 и 52 шага.
Я больше 10 минут ничего не ломал, всё открывалось раньше.
Беларус учит русский:
Разве у тебя начальный сид при каждом запуске не разный?
AnyZero:
Допилил до версии 2.2.0
Изменений прилично -_-, все касаются удобства использования.
pav13:
--- Цитата: AnyZero от 20 Октябрь 2025, 09:06:26 ---Допилил до версии 2.2.0
--- Конец цитаты ---
- каждый раз приходится по новой указывать путь к эмулятору. сделай создание ini файла с параметрами типа,
last rom path=путь\к\ром
emulator path=путь\к\эмулятору.exe
- лишнее меню при запуске программы, пускай сразу открывается диалоговое окно выбора файла, а папка по умолчанию берётся из ini: last rom path
- при выборе шага запускается копия эмулятора. добавь убийство процесса перед этим. а вообще зачем ручное закрытие и автоматический новый запуск эмулятора, это затягивание времени. по сути надо делать alt+tab, потом ctrl+f1, потом P.
как у тебя это реализовано? передача виртуальных нажатий или через аргументы командной строки при запуске эмулятора?
- бэкап создаётся, повторно не перезаписывается(что хорошо), но как по мне не хватает действия "восстановить оригинальный файл из бэкапа"(с возможным удалением бэкапа)
- для прерывания текущего поиска и начала нового с другой игрой надо идти в папку с программой у руками удалять search_pause.dat (может стоит сделать действие "начать новый поиск")
- через диалоговое окно выбора файла невозможно выбрать файл из папки с программой, только из другой (мне не критично и я рад что наконец-то файлы не надо копировать в папку с программой, но такой баг имеет место быть)
- сделай дописывание результата в файл ..._results.txt, а не полную перезапись
upd:
- используется ли отсеивание невалидных опкодов?
- надпись nes glitcher как-то мелко и бедно смотрится в углу может что-то из этого выберешь
figlet NES Glitcher.txt (2142.34 КБ - загружено 127 раз.)
AnyZero:
--- Цитата ---- каждый раз приходится по новой указывать путь к эмулятору. сделай создание ini файла с параметрами типа,
last rom path=путь\к\ром
emulator path=путь\к\эмулятору.exe
--- Конец цитаты ---
К эмулятору смысл сохранения пути есть, к рому нет, потому что если мы продолжаем с ним работу потом , всё берётся из search_pause.dat, а каждый раз перезаписывать настройки..., я пока не придумал в голове как это будет работать (а если мы удалили ром, путь останется, то что будет и прочие мелочи). При открытии другого рома search_pause.dat сейчас удаляется, возможно сделаю чтоб у каждого рома свой создавался с его именем, тут тоже надо будет подумать что и как будет работать и загружаться, если их будет 3-10-1000.
--- Цитата ---- лишнее меню при запуске программы, пускай сразу открывается диалоговое окно выбора файла, а папка по умолчанию берётся из ini: last rom path
--- Конец цитаты ---
Так делал, чтоб сразу файлпикер запускался, думал непонятно будет.
--- Цитата ---- при выборе шага запускается копия эмулятора. добавь убийство процесса перед этим. а вообще зачем ручное закрытие и автоматический новый запуск эмулятора, это затягивание времени. по сути надо делать alt+tab, потом ctrl+f1, потом P.
--- Конец цитаты ---
Если следовать инструкции, то ничего лишнего вообще не запускается.
Как было задумано, запускаем эмулятор вручную, бежим куда надо, делаем сейв. Вырубаем эмулятор вручную. Включаем автоматизацию, выбираем инструкцию, дальше эмулятор сам будет запускаться и отключаться, надо будет только пункты выбирать до получения результата. Реализовано через вирт нажатия.
--- Цитата ---alt+tab
--- Конец цитаты ---
А вот не всё так просто, если у тебя Телега работает, браузер, плеер или ещё что кроме этого.
--- Цитата ---потом ctrl+f1, потом P.
--- Конец цитаты ---
Подумаю, может получится и без закрытия эмуля. У меня вообще не сразу получилось передать нажатия в окно, гемор небольшой был.
--- Цитата ---- бэкап создаётся, повторно не перезаписывается(что хорошо), но как по мне не хватает действия "восстановить оригинальный файл из бэкапа"(с возможным удалением бэкапа)
--- Конец цитаты ---
Такое можно сделать.
--- Цитата ---- для прерывания текущего поиска и начала нового с другой игрой надо идти в папку с программой у руками удалять search_pause.dat (может стоит сделать действие "начать новый поиск")
--- Конец цитаты ---
При открытии другого рома search_pause.dat сейчас удаляется.
--- Цитата ---- через диалоговое окно выбора файла невозможно выбрать файл из папки с программой, только из другой (мне не критично и я рад что наконец-то файлы не надо копировать в папку с программой, но такой баг имеет место быть)
--- Конец цитаты ---
Не могу подтвердить, допустим программа у меня хоть где находится, в созданной специально папке или на рабочем столе по-умолчанию, если ром находится там же, то я его вижу и могу выбрать .nes файлы или можно выбрать all для всего остального.
--- Цитата ---- сделай дописывание результата в файл ..._results.txt, а не полную перезапись
--- Конец цитаты ---
Это тоже можно сделать.
--- Цитата ---upd:
- используется ли отсеивание невалидных опкодов?
--- Конец цитаты ---
Пока нет.
--- Цитата ---- надпись nes glitcher как-то мелко и бедно смотрится в углу может что-то из этого выберешь
--- Конец цитаты ---
Вообще хотел убрать анимацию эту, потом как-нибудь. Косметику на потом оставлю.
pav13:
--- Цитата: AnyZero от 20 Октябрь 2025, 14:40:51 ---При открытии другого рома search_pause.dat сейчас удаляется.
--- Конец цитаты ---
вот только я не могу открыть другой ром пока файл search_pause.dat есть в папке программы. двойной клик по программе = продолжение поиска. разве что перетаскивание сработало, но от чего уходили к тому и вернулись. :neznayu:
--- Цитата: AnyZero от 20 Октябрь 2025, 14:40:51 ---При открытии другого рома search_pause.dat сейчас удаляется, возможно сделаю чтоб у каждого рома свой создавался с его именем, тут тоже надо будет подумать что и как будет работать и загружаться, если их будет 3-10-1000.
--- Конец цитаты ---
для каждой игры свой файл это лишнее, кмк. просто сделай возможность нового поиска с принудительным прерыванием текущего.
--- Цитата: AnyZero от 20 Октябрь 2025, 14:40:51 ---Не могу подтвердить, допустим программа у меня хоть где находится, в созданной специально папке или на рабочем столе по-умолчанию, если ром находится там же, то я его вижу и могу выбрать .nes файлы или можно выбрать all для всего остального.
--- Конец цитаты ---
так и я ром вижу и могу выбрать, только после выбора получаю вот это
upd: всё, понял, если есть кириллица в пути к ром-файлу, то программа уже не работает.
--- Цитата: AnyZero от 20 Октябрь 2025, 14:40:51 ---Если следовать инструкции, то ничего лишнего вообще не запускается.
Как было задумано, запускаем эмулятор вручную, бежим куда надо, делаем сейв. Вырубаем эмулятор вручную. Включаем автоматизацию, выбираем инструкцию, дальше эмулятор сам будет запускаться и отключаться, надо будет только пункты выбирать до получения результата. Реализовано через вирт нажатия.
--- Конец цитаты ---
делаю по инструкции. эмулятор запускается, но не закрывается после нажатия 1/2/3 в окне консоли. через 10 шагов 10 запущенных копий эмулятора. только вручную надо закрывать. сделай через убийство процесса по имени exe-файла эмулятора, а не через виртуальные alt+f4.
--- Цитата: AnyZero от 20 Октябрь 2025, 14:40:51 ---К эмулятору смысл сохранения пути есть, к рому нет, потому что если мы продолжаем с ним работу потом
--- Конец цитаты ---
в принципе да, хотя бы путь к эмулятору постоянно не искать.
Беларус учит русский:
Какое совпадение, я тоже развиваю именно эти моменты, всё доделать не могу. А именно - поддержка Юникода в путях. Оказывается, Глитчер вылетает, если закинуть в него папку или что-то юникодосодержащее.
А ещё у меня ром можно теперь закидывать не только на иконку, но и в само окно :lol:
Ну и автоматизация - в начале назначаются кнопки переоткрытия и загрузки сохранения. На днях выложу.
Было неожиданно, что антивирус Винды удаляет твой Глитчер. Получается, нейросеть таки не знает как обуздать его.
--- Цитата: pav13 от 20 Октябрь 2025, 10:25:37 ---используется ли отсеивание невалидных опкодов?
--- Конец цитаты ---
У него ещё меняется только область PRG, похоже.
AnyZero:
--- Цитата: perfect_genius от 21 Октябрь 2025, 04:21:41 ---антивирус Винды удаляет твой Глитчер
--- Конец цитаты ---
Удаляет именно за вставки кода от AI.
--- Цитата: pav13 от 20 Октябрь 2025, 22:51:52 ---а не через виртуальные alt+f4.
--- Конец цитаты ---
Вирт нажатия только P.
Выход там по taskkill, но я похоже понял почему не работает у тебя и под CTRL+F1 P переделал уже всё равно.
--- Цитата: perfect_genius от 21 Октябрь 2025, 04:21:41 ---У него ещё меняется только область PRG, похоже.
--- Конец цитаты ---
Поиск в CHR верну. Проверка на валидность сделана будет.
--- Цитата: perfect_genius от 21 Октябрь 2025, 04:21:41 ---Ну и автоматизация - в начале назначаются кнопки переоткрытия и загрузки сохранения. На днях выложу.
--- Конец цитаты ---
Я делал под 4 разных эмуля сначала, плюс кастомные настройки кнопок для RA, не очень хорошо получилось, поэтому чисто под FCEUX потом делал.
--- Цитата: pav13 от 20 Октябрь 2025, 22:51:52 ---вот только я не могу открыть другой ром пока файл search_pause.dat есть в папке программы
--- Конец цитаты ---
Надо продумать сначала механику, потому что вот ты посчитал первоначальное меню лишним, сразу выход файлпикера, при продолжении сразу загрузка из search.dat, а в него можно было добавить продолжить поиск или начать новый и вот пришли к тому же ...
---
Надо сначала продумать как оно должно работать :lol:
Беларус учит русский:
--- Цитата: AnyZero от 22 Октябрь 2025, 12:28:46 ---Удаляет именно за вставки кода от AI.
--- Конец цитаты ---
А до этого изменение кода нейросетью избавило от удаления. Сейчас я добавил автообновление программы и антивирус снова ругается. Т.е. нет разницы откуда код.
Вместо отдельного окна выбора файла можно кидать ром прямо в окно программы.
SeregaZ:
тут это... а как вы реализовали вписывание в память эмулятора - образ в памяти рома? запустил в Gens ром, делаю поиск в памяти процесса Gens по слову SEGA - кусман в 4 килобайта начала рома находит. я надеялся что он там прям цельным куском весь ром сидит. а оно видимо раскидывает как ему удобно этими самыми "чанками" по 4 кб. в порядке бреда думаю сделать ром-болванку, где каждые 4 килобайта будет какое-то опорное значение, как та-же SEGA - типа SEG1, SEG2, SEG3... после делать поиск и надеятся, что найденные адреса будут лежать где-то в памяти таблицей. и иметь постоянный адрес. тогда я бы смог налету резать ром на 4 килобайтовые куски, а после потом вписывать по найденной таблице в память эмулятора.
и да, видимо тему надо будет переносить в ту ветку :))))
Беларус учит русский:
Печально, если не цэльным масивом лежыт (или наабарот - повод мне закончить ужэ с Гличером).
pav13 выяснил, што в Genesis Plus GX есть паддержка разного састаяния рома в памяти - нармальный ром, ром без загаловка, ром с переставленными местами каждой пары байтов. У Генса вот ещё адно, пахожэ.
SeregaZ:
я так понимаю читать твой пост надо в голове голосом Лукашенко? :lol:
Добавлено позже:
итак... в порядке бреда думаю сделать через жопу: какой-то программой заэмулировать жесткий диск. но чтобы он фактически обращался к оперативной памяти, а не к hdd. то есть винда будет видеть в Моем Компьютере F диск. соответственно ром будет собираться и скидываться в него, и после запускаться в эмуляторе. костыль... но зато временных файлов на hdd не создается. и типа если результат хороший - только тогда сохранять уже собранный ром на обычном hdd. хотелось бы конечно чтоб Gens заранее читал какую-то ром-болванку-заглушку в 8 или даже 12, чтоб с запасом, мегабайт и после уже писать в эту память эмулятора образ своего свежесобранного рома - писать в чужой процесс я могу, это мы обкатали на ZT и Дюне... но раз оно там оказывается всё в разобранном виде, то печаль. GPT предлагает пересобрать эмуль из сурсов и просто предусмотреть этот момент. типа не только через FILE сделать загрузку рома, но и из памяти... однако хотелось бы не стоковый Gens - его сурсы то вроде есть всети, а r57shell'овский мод, с блек джеком и легкодоступными женщинами в виде доп инструментов типа vdp и память просмоторщика, и прочие дебаги всякие, а вот его вроде как нет. пойду думать насчет эмуляции hdd...
Беларус учит русский:
А до этого момента всё читал голосом Путина?
Экспериментирую с русским уже несколько дней, пытаюсь найти баланс между ним и белорусским. Привыкнуть не смог, самому читать сложно, поэтому буду заканчивать, останусь на "жы-шы-цы".
А по теме - у тебя много слов (без заглавных букв таки читать сложно), а главное назвать опять забыл - что тебе надо-то в итоге? Чем не устраивает ramdisc?
Навигация
Перейти к полной версии