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

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


Сообщения - Ti_

Страницы: Назад 1 2 [3] 4 5 6 7 ... 111 Далее
61
Программирование / Ребенок изучает asm [SMD]
« : 24 Сентябрь 2023, 09:56:40 »
если с загрузкой файлов все понятно. как забабахать указанную логику, чтоб ASM68K.EXE её понял? конец процедуры вроде понятно - rts . прочее как сделать? и наверное нужна пауза, чтоб эта картинка удерживалась на экране?
Ну это уже не вопрос про асм, а про то как создать ром sega md с картинкой используя асм?

Например, можно так:

62
Ромхакинг / Кое-что о DPCM в музыке на NES
« : 17 Сентябрь 2023, 11:01:32 »
В Fester Quest - семплы совсем кривые, их исправляли только в nsf:

В Bucky O'Hare и Jim Power - сдвинуты на несколько байт.

Добавил ром/патч для Бакки:

63
Ромхакинг / Хаки на любой вкус
« : 10 Сентябрь 2023, 09:36:52 »
Megaman Plus Limited in Edoropolis MM9 Music MIX:
https://www.romhacking.net/hacks/8071/

64
Ромхакинг / Хаки на любой вкус
« : 03 Сентябрь 2023, 10:11:06 »
Обновление хаков - Megaman II - RushJet1 music - v1.1  и Ren Adventures - v2.2.

65
Но скорость обмена при этом повысится. Вот несколько замеров:
В этом тесте vramx2 это как раз для 128 Kb режима. Интересно почему они не поставили 2 x 32 Kb, если передумали ставить вторую на 64 Kb?

66
Ромхакинг / Хаки на любой вкус
« : 13 Август 2023, 09:52:13 »
Прикольно. Только графоний и музыку поменяли, уровни те же самые?
Не меняли. Написано же. Даже в тегах указано - S (sound), G (graphics).  А уровни это вроде L (levels).

67
Ромхакинг / Хаки на любой вкус
« : 11 Август 2023, 17:48:54 »
Shovel Knight (Whomp 'Em Hack):
https://www.romhacking.net/hacks/7992/

68
Ромхакинг / Хаки на любой вкус
« : 10 Август 2023, 18:57:22 »
Ход мыслей у нас одинаковый, как раз сейчас собрал xdelta3 для Linux/ARM - под ним все пропатчилось отлично!
У меня какой-то патч не вставал, даже через онлайн патчеры, и пришлось новую хдельту качать, но так как я использую UI, я заменил файл в папке. И потом просто забыл обратно откатить, когда сам делал патчи.
Мегаманы на ips, а Ren Adventures я обновлял пару дней назад (исправил запуск на некоторых эмулях), и как раз это и заметил, поэтому с ним и нет проблем. Так что с компрессией это не связано, а с версией.
Мегаман 1 тоже обновлён, но вероятно будет ещё 1 будет апдейт.
Но нафига они формат сменили это конечно вопрос.

69
Ок, про X-men 2 надо бы закончить тогда оффтоп - я ошибся, даже более точные эмуляторы так и не дают получить случайного перса при запуске
Ну главное, что они делают это при резете. А то в генсе всегда один персонаж при запуске, и другой при резете. То есть только 2 разных.

от как связан тут счётчик кадров, понятно теперь. А сам этот счётчик кадров - он зачем игре? Для таймеров что ли? Или это стандартная аппаратная функция консоли?
Это не функция консоли, а просто 1 строчка в коде игры. Некий стандартный подход в играх, он сам по себе много для чего бывает нужен, для разных моментов. Но для таймеров, если имеется ввиду секунды то нет, там отдельно делают на 60 кадров отсчёт (если нтсц). Но именно в ЧП для выпадения призов там какие-то другие счётчики. Перечитал предыдущую страницу - Sharpnull написал подробно же. Это наверно сложно понять, но в игре это не какой-то мудрёный код, это просто несколько строк.
Разные вариации генераторов есть почти везде, где-то совсем простые, где-то немного сложнее. Где-то смешивают с кадровым счётчиком и/или нажатиями кнопок. Но принципиально они все простые в 5-15 строк кода. То есть, это не сотни-тысячи операций, 'тормозов' не добавляет (всё делали максимально простым).

70
Я так же написал и потом задумался - а причём здесь счётчик кадров? (и самой игре вообще зачем такой счётчик?).Но ведь человек не может убивать врага всегда в один и тот же кадр или в кадр рядом, и получать примерно те же предметы. Допустим, крутятся по кругу 10 предметов, меняются каждый кадр, за 60 кадров эти 10 предметов прокрутятся 6 раз. Не верится, что это плохой генератор, что человек сможет попадать на одни предметы чаще. И счётчик кадров для этого не нужен, только зацикленный указатель на предметы.
Счётчик есть в любой игре. Это просто 1 строчка, которая прибавляет +1 к какому-то значению в памяти каждый кадр. Если 1-байтовый получается 256 разных значений. Далее это универсально используется для всего, и в т.ч. для 'рандома' разных вещей, если отдельного генератора нет. А отдельные зацикленные указатели-счётчики как раз не создают. Просто используют меньшее кол-во битов от кадрового, например на 8 или 16, и делают таблицу где 'предметы'.

Посмотрел - вот в роме ЧП эти таблицы на 32 значения:
187b2 - 187d1,  далее ещё такая же на 32 для какого-то другого случая.  $1C - корона (100), $1D - золото? (500), далее не проверял. Значения которые влияют на выбор индекса - в памяти $E5 и $E6.

71
Почему в BlastEm появляются другие персонажи только с включением рандомизации памяти? "Точка кадра" тоже хранится в памяти? Или рандомизируется не только память, но и всё окружение эмулируемой Сеги, получается?
У меня независимо от того, включаю я рандомизатор памяти или нет, при запуске эмулятора - один и тот же персонаж с палкой, при сбросе через TAB - рандомно разные персонажи. Версия бластема 0.6.3 - 10.02.2023.

72
Но не в сеговских?

Почему же тогда эта функция нужна?

Т.е. приставка считывает в каком месте находится луч телевизора в данный момент? Я не очень разбираюсь в этой части.
Если бы в этой игре рандом был связан на "точке кадра", то не приходилось бы использовать в эмуляторе случайные данные в памяти при включении.

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

Вопрос теперь в том, почему у Darkwing Duck такой сложный рандом, если можно было просто крутить предметы в цикле. Скорее всего, этот механизм перекочевал вместе с движком от мегаменов.
1) В сеговских да, там по нулям при повер-оне. И в бластеме тоже, но там в конфиг файле можно сделать не нулевой.
В default.cfg
#set this to random to debug initialization bugs
ram_init zero
изменить на ram_init random

2) Нужна для проверки багов, и вот они: https://www.nesdev.org/wiki/Game_bugs#Reliance_on_RAM_values

3) Да, Hcounter это точка луча по горизонатали, а Vcounter -по вертикали. Эти значения можно считывать на Sega MD.

4) Там в памяти остаётся предыдущее значение, и когда выключаешь память разряжается и постепенно значение меняется на FF или 00, по крайней мере у меня так было на сега-сд.

5) Простенький генератор случайных чисел есть практически в каждой игре. Они занимают байт 10-20. Никто не делает чтобы подряд выпадало одно и тоже в определённом порядке, это просто нелепо по гейм дизайну. Плюс можно даже без генератора, в зависимости от счетчика кадров делать (так тоже делают). Ну иногда ещё смешивают с нажатиями кнопок.

Добавлено позже:
Если бы в этой игре рандом был связан на "точке кадра", то не приходилось бы использовать в эмуляторе случайные данные в памяти при включении.
В моём конфиге ram_init zero (дефолтный конфиг - то есть в памяти нули при включении). При запуске эмулятора персонаж всегда один и тот же. При софт резете персонаж рандомный. Но софт резет не сбрасывает память и в других эмуляторах, так как и не должен. То есть с ram это не связано.  Ну и вот даже тут написано, что это каунтеры: https://gendev.spritesmind.net/forum/viewtopic.php?f=2&t=1006&p=14949&hilit=x+men#p14949

73
В эмуляторах, естественно, этих помех нет и персонаж всегда один и тот же, сколько ни сбрасывай.
Но десятилетия спустя таки появился более точный эмулятор BlastEm, и он позволяет не обнулять память при запуске, отчего и возможно получить разного персонажа. Причём даже тех, кого никак не получалось получить на оригинальной консоли.
Память при сбросе не обнуляют практически все эмуляторы. При включении - зависит от эмуляторов и их настроек. Во многих эмуляторах можно настроить на случайные значения в рам (например, в fceux). Но игры это не используют, так как всё равно очищают память в коде в самом начале, кроме некоторых пираток. И даже если значение при включении не будет 00/FF, то таким образом рандом нормальный (равномерный) не получить.
Касаемо X-men 2 там это может быть связано, с тем что включение или резет в произвольной точке кадра начинается, а в эмуляторах всегда с 1 места. И/или H/V counter.

 'Помехи' с неиспользуемых областей RAM он не читает, хотя такое тоже возможно. Но эмуляторы помехи и температуру не эмулируют. Вот видео помехов: https://gendev.spritesmind.net/forum/viewtopic.php?f=2&t=551#p37603


75
Картинка как раз бьётся очень логично. Проблемы с одним слоем, как я понимаю, спрайтов. В принципе это можно уточнить в каком-нибудь эмуляторе, где есть отключение слоёв.
Это проблема не спрайтов, а dma из rom->vram. Просто обычно используют именно для спрайтов.
Соник не глючит, т.к. там вначале спрайты копируются в ram. То есть dma ram->vram не глючит.

76
Ромхакинг / Хаки на любой вкус
« : 26 Июль 2023, 19:43:32 »
Жду финальной версии Ninja Gaiden, с удовольствием бы перепрошел с новой музыкой.
Я скидывал ТроянХорсу ссылку на ромхак. Но по другим трекам он ничего не сказал, есть ли у него желание и их сделать.

77
Ромхакинг / Хаки на любой вкус
« : 25 Июль 2023, 18:24:43 »
Потестил мегамужиков на FamInvite, работают и звучат хорошо.
О, хорошо. А то эвердрайв требует изменения файлов мапперов. На нём и хаки жаб не работали.

78
Ромхакинг / Хаки на любой вкус
« : 25 Июль 2023, 08:50:35 »
МегаМужик с VRC6 музыкой (ремиксы):
MM1:
https://www.romhacking.net/hacks/7899/
MM2:
https://www.romhacking.net/hacks/7968/
MM plus ltd (Darkwing Duck)
https://www.romhacking.net/hacks/5362/

Нинздя Гайден - VRC6 (beta) -
https://www.romhacking.net/forum/index.php?topic=37316.0

Ren Adventures (Kaiketsu Yanchamaru 3) с полностью новой музыкой на VRC6:
https://www.romhacking.net/hacks/5117/
Также в паузе отображается кол-во собранных бонусов (надо 20).

79
Эх... спасибо конечно но мне бы просто поиграть а не по... возиться((
Regen0972D в tools -> overclock M68000 - увеличить в 3-4 раза (windows-подобный UI как у Генса и Фужена).
Или Blastem - в settings -> system -> 68000 clock divider - уменьшить с 7 на 1-2.

Также советую ромхак road rash 3 improvement v1.04.

80
Ромхакинг / Хаки на любой вкус
« : 21 Июнь 2023, 20:57:04 »
О, интересно!
Из энтузиазма переведу на русский список изменений (взято из readme-файла на romhacking.net).
Там есть на русском - в архиве с самим хаком.  :)

81
Ромхакинг / Хаки на любой вкус
« : 21 Июнь 2023, 19:18:41 »
[NES] Contra Spirits - замена музыки + улучшения/фиксы.
https://www.romhacking.net/hacks/7890/

82
На счет отличий MOVE от MOVEA:
  • Размер данных: MOVE автоматически определяет размер данных, основываясь на размерности операндов, тогда как MOVEA работает только с адресами и не учитывает размер самих данных.
  • Расширение адресов: Когда MOVEA копирует 16-битный адрес в 32-битный регистр, она расширяет адрес, добавляя ведущие нули, чтобы заполнить оставшиеся биты. MOVE не выполняет автоматического расширения адреса.
Все 16-битные операции с An регистрами знако-расширяемые до 32 сами по себе, включая "cmpa.w", а не только move.
Но только с .w  , так как с .l расширять уже некуда, а .b  не бывает с Ax регистрами.  Но отличие в том, что movea не меняет никакие флаги статуса (xnzvc).

83
про сво ?
Да.

Ещё проверил. На вырезки из эпизода AVGN Atari porn, ограничение установлено.  :lol:

84
У sinc LAIR удалили канал за порно и он просит поделиться своими же видео (?!) с ним.
Дайте скриншот жесткого 4-цветного спектрум прона за который банят. А он ограничение по возрасту не поставил? А то интересно, ютуб последний год завален видео с трупами и расчленёнкой, возраст не требуется.

85
Ну по идеи чисто в теории такая ситуация может возникнуть, если между парой записей произойдет вызов nmi. Хотя это весьма странно, так как к этому моменту работу с PPU уже надо бы завершить.
Само по себе NMI не сбрасывает адрес тоже. Просто там может быть, код который тоже делает запись в vram, или даже просто строчка BIT PPU_STATUS.
Только чтение PPU_STATUS в основном цикле в этом случае не поможет, код всё равно 'посыпется'. Потому что тогда nmi может проскочить и 'между строк' установки адреса, или просто в цикле записи в PPU_DATA.
Поэтому, если у тебя много данных для записи (более 1 фрейма по времени) то NMI отключают вместе с дисплеем (или можно в самом nmi вначале добавить 'флаг'),  а если у тебя записи в пределах vblank или даже экрана, то случайно/повторно в текущем кадре nmi сработать не может.

Добавлено позже:
При этом в _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

86
В общем, как такое решение? Можно ли что-то улучшить или оптимизировать?
Не совсем понял, но отдельный код для вывода каждой строки нигде не делают, обычно везде одна функция печати строки, и для нее параметры передаются. Это может быть даже просто её номер, а всё остальное в массиве данных быть. Вычисления как раз можно через макрос сделать.  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

87
Во втором, если писать $40, то рендер смещается на одно знакоместо вверх. Во всяком случае у меня такой был эффект.
В приведенном по ссылке коде сначала делают bit $2002 и утверждают, что он должен сбросить состояние, после чего ждут первый раз vblank, затем предлагают заняться разными манипуляциями с памятью (время есть) и ждут второй раз vblank.
А, ну значит пример там именно для инит кода, а не для обычного ожидания vblank, то есть по 2 кадра не надо пропускать чтобы палитру записать.

88
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 вне него. Если он будет срабатывать где-то в середине твоего кода, и будет всё ломаться.
И как раз через NMI лучше всё и делать, он автоматически и срабатывает вначале vblank, никакие ожидания не нужны, везде так и делают.

89
Общий / [NES] Music collection
« : 21 Май 2023, 15:51:50 »
Сборник около 150 треков музыки из разных игр.

Трек-лист только для тех, где названия не влезли в строку:

 Работает на:
 MESEN
 FCEUX
 Everdive N8 with nesos-v1.26

'Select' для авто-переключения.

90
Lunar Laser, после того, как ты выплатишь суду 12 миллионов долларов, всякие Диззи и Шиноби ты удалишь сам.
Ну и что нашёл он 12 миллионов?

Страницы: Назад 1 2 [3] 4 5 6 7 ... 111 Далее