61
Ромхакинг и программирование / [ALL] Ваши хаки
« : 25 Июль 2023, 18:24:43 »Потестил мегамужиков на FamInvite, работают и звучат хорошо.О, хорошо. А то эвердрайв требует изменения файлов мапперов. На нём и хаки жаб не работали.
В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.
Потестил мегамужиков на FamInvite, работают и звучат хорошо.О, хорошо. А то эвердрайв требует изменения файлов мапперов. На нём и хаки жаб не работали.
Эх... спасибо конечно но мне бы просто поиграть а не по... возиться((Regen0972D в tools -> overclock M68000 - увеличить в 3-4 раза (windows-подобный UI как у Генса и Фужена).
О, интересно!Там есть на русском - в архиве с самим хаком.
Из энтузиазма переведу на русский список изменений (взято из readme-файла на romhacking.net).
На счет отличий MOVE от MOVEA:Все 16-битные операции с An регистрами знако-расширяемые до 32 сами по себе, включая "cmpa.w", а не только move.
- Размер данных: MOVE автоматически определяет размер данных, основываясь на размерности операндов, тогда как MOVEA работает только с адресами и не учитывает размер самих данных.
- Расширение адресов: Когда MOVEA копирует 16-битный адрес в 32-битный регистр, она расширяет адрес, добавляя ведущие нули, чтобы заполнить оставшиеся биты. MOVE не выполняет автоматического расширения адреса.
про сво ?Да.
У sinc LAIR удалили канал за порно и он просит поделиться своими же видео (?!) с ним.Дайте скриншот жесткого 4-цветного спектрум прона за который банят. А он ограничение по возрасту не поставил? А то интересно, ютуб последний год завален видео с трупами и расчленёнкой, возраст не требуется.
Ну по идеи чисто в теории такая ситуация может возникнуть, если между парой записей произойдет вызов nmi. Хотя это весьма странно, так как к этому моменту работу с PPU уже надо бы завершить.Само по себе NMI не сбрасывает адрес тоже. Просто там может быть, код который тоже делает запись в vram, или даже просто строчка BIT PPU_STATUS.
При этом в _GOTOXY можно передавать не только числа (константы), но и регистры или переменные. Скажем: _GOTOXY #10, Y - установить курсор в строку с номером Y (регистр) в позицию 10.Понятно, ну минимально можно сделать функцию вместо макроса .macro _PRINT , чтобы не забивать ром однотипным кодом (передавать адрес строки). Если скорость не важна, можно даже сделать и отдельную функцию для установки адреса сделать вместо макроса, а в макросе оставить только вычисление A и Y.
proc_set_ppu_addr:
STA PPU_ADDRESS
STY PPU_ADDRESS
RTS
; 'PRESS START'
LDX #'P'
STX PPU_DATA
INX ; R'
STX PPU_DATA
LDA #'E'
STA PPU_DATA
LDY #'S'
STY PPU_DATA
STY PPU_DATA
LDA #' '
STA PPU_DATA
STY PPU_DATA ; 'S'
INY ; 'T'
STY PPU_DATA ; 'T'
LDA #'A'
STA PPU_DATA ; 'A'
STX PPU_DATA ; 'R'
STY PPU_DATA ; 'T'
offset:
LDA #>SCR_BASE ; SCR_BASE = $2000
ORA sreg + 1
STA PPU_ADDRESS
TXA
ORA sreg
STA PPU_ADDRESS
RTS
В общем, как такое решение? Можно ли что-то улучшить или оптимизировать?Не совсем понял, но отдельный код для вывода каждой строки нигде не делают, обычно везде одна функция печати строки, и для нее параметры передаются. Это может быть даже просто её номер, а всё остальное в массиве данных быть. Вычисления как раз можно через макрос сделать. LDA PPU_STATUS тоже нет никакого смысла каждый раз перед установкой адреса делать, это нужно только в 1 случае - если ты где-то записал только 1 раз в $2006 или $2005. Сам по себе регистр на 'нечетный' никак не слетит.
; 2 переменные обязательно в zeropage!
tmp_ptr_l equ $20
tmp_ptr_h equ $21
; макрос для печати строки (не знаю подойдёт ли под твой asm)
MACRO print_str str_x,str_y,str_ptr,nt
LDX #>((str_y*32)+$2000 + nt*$400)
LDY #<(str_y*32 + str_x)
LDA #<str_ptr
STA tmp_ptr_l
LDA #>str_ptr
JSR print_str_
ENDM
; функция печати
print_str_:
STA tmp_ptr_h
STX PPU_ADDRESS
STY PPU_ADDRESS
LDY #0
LDA (tmp_ptr_l),Y
@print_l
INY
STA PPU_DATA
LDA (tmp_ptr_l),Y
BNE @print_l
RTS
stroka1: .BYTE 'TEST STROKA 1 ',0
stroka2: .BYTE ' STROKA 2 TEST ',0
; пример использования в коде:
print_str 4,5,stroka1,0 ; печать строки str0 по x=4,y=5, экран0
print_str 10,15,stroka2,0 ; печать строки str1 по x=10,y=15, экран0
Во втором, если писать $40, то рендер смещается на одно знакоместо вверх. Во всяком случае у меня такой был эффект.А, ну значит пример там именно для инит кода, а не для обычного ожидания vblank, то есть по 2 кадра не надо пропускать чтобы палитру записать.
В приведенном по ссылке коде сначала делают bit $2002 и утверждают, что он должен сбросить состояние, после чего ждут первый раз vblank, затем предлагают заняться разными манипуляциями с памятью (время есть) и ждут второй раз vblank.
UPD: Я попробовал для примера переключать внизу палитры то на красную, то на синюю и у меня получилось. Я растянул на 3 HBlank и использовал цвет из PPU $3F04 для полос при откл. экране, но в FCEUX и VirtuaNES не знают проВ Fceux config->ppu->new ppu выставляет более точную эмуляцию. Касаемо смены палитры, можно из Tom & Jerry ещё взять.
В https://www.nesdev.org/wiki/Init_code написано зачем ждать 2 раз: чтобы дождаться разогрева PPU, поэтому можно вообще не ждать, если ваш код будет производить долгие вычисления (30 000 тактов) до использования PPU.То, что ждать 2 раза это никак не связано с инит кодом, просто вначале идёт проверка на вне vblank, а потом vblank. Потому что если оставить только вторую строчку (ожидание vblank), а сам код ожидания ты запускаешь в произвольное время - ты можешь оказаться и в середине, и в самом конце vblank, а тебе надо оказываться именно в самом его начале, чтобы провести максимум операций с ппу. Посмотрел ещё раз - там просто пример кривой (2 раза с BPL), не знаю откуда вы их берёте.
Я сам до конца не понимаю, но если включен NMI, то точно нельзя из-за Race Condition.Если NMI включен, то вообще не надо ничего делать с ppu вне него. Если он будет срабатывать где-то в середине твоего кода, и будет всё ломаться.
Lunar Laser, после того, как ты выплатишь суду 12 миллионов долларов, всякие Диззи и Шиноби ты удалишь сам.Ну и что нашёл он 12 миллионов?
Ti_, мм, я мог что то забыть и пропустить. А можешь перечислить, что это за игры?Как и p.o.w. на аркаде есть:
Ну че вы? Это же авторский топ.Так что он же не сказал 'мой топ, буду добавлять что хочу', а сам определил правила, вот и пусть придерживается их.
Вот, к примеру, Дабл Драгон Баттлтоадс на Сегу. Назовите мне хоть 1 причину, кроме того, что она была у всех в детстве, почему я должен включать ее в топ.BT&DD включать уже нельзя, так как это будет повтор. А если касаемо вопроса, хотя бы 1 причина - Сега это официальный порт от Рейр, недоделанный, Снес - кривой порт от левой конторы.
[Ну а допустим если брать серию Страйков, то какой смысл мне их пихать на СНЕС повторно, если на Сеге немного лучше - хотя бы более широким обзором.Jungle Strike, На Сеге оригинал, а на Снес кривой порт, и увеличение разрешения это не исправит. В версии для ПК добавили доп.уровень , но не помню что там с механикой.
Ti_, мм, я мог что то забыть и пропустить. А можешь перечислить, что это за игры?Я сейчас не буду проверять каждую, к которой есть другая версия, но минимум к играм snk и konami аркадные оригиналы. К первому ДТ есть ремастеред.
вам нужно будет запустить не эмулятор сеги, а эмулятор Амиги, например, какая разница. Пока что есть идея расширять зону видимости спрайтов на СНЕС и писать, что для игры нужен широкоформатный эмулятор.Ну для многих эмулятор Амиги это слишком сложно. Идея разрешения хорошая , но на Снес есть только убогий вайдскрин, там нет кастомного разрешения как в эмуляторе Думдея. Так что там 320 например не сделать, или другое , не строго кратное 16x9.
Но мне хочется сделать топ как можно более сжатым, не прибегая к перечислению всех существующих игр на консоль.Но тогда это должно быть одинаково для всех игр. В текущем топе уже есть игры, для которых есть аркадные оригиналы, или они все хуже, и только pow лучше?
Хак совместим с переводами, и англ. и рус. , но не помню порядок патчинга и какие именно переводы, вечером могу проверить.
Добавлено позже:
Ti_, слушай, а у тебя есть английская или русская версия твоего хака, с добавленным уровнем? Если есть, можешь куда нибудь кинуть на файлообменник? Я могу в принципе и японскую выложить, там сюжет абсолютно не важен и не интересен, но если вдруг у тебя недалеко файлик лежит...
Добавлено позже:Если ты про аркаду. Я пробовал играть в разные аркадные оригиналы игр, и эта как раз одна из тех, которая там совершенно не понравилась.
Ti_, да вроде все нормально с POW, просто оригинал лучше по всем параметрам, не вижу смысла играть в него на НЕС
Не против.
Добавлено позже:
Ti_, я на Шаттерхэнд прикреплю твой хак с пометкой в названии рома, но если ты вдруг будешь против, я удалю тогда его отсюда) хак идеальный конечно, ничего прибавлять я к нему не буду
Прикольно было бы заменить машинку на что ниубдь другое, но я не нашел ее через графический редактор, в упор не вижуно выглядит странно.
Вообще, хотелось бы иметь конкретную картину по цифрам, что даёт каждый мотор, каждые покрышки. Убрать нафиг это читерство у ИИ.
Не, спасибо. Нет описания изменений, нет тестов. Без вариантов.Pro-Am 2 - убраны конты. Ну как убраны - стали бесконечные. Но при этом зачем-то валяются на трассах, продаются в магазине, причем как и в оригинале с растущей ценой при покупке.