Автор Тема: Вопросы новичков  (Прочитано 55873 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5590
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #150 : 15 Май 2023, 13:37:14 »
Для чего нужны эти изменения?
Это адрес начала кода, он указывает на меню, очевидно.
UPD: Вот в коде эмулятора об этом: https://github.com/ekeeke/Genesis-Plus-GX/blob/f0c8f839268ba2806fca47187555f084c1a04ad9/core/cart_hw/md_cart.c#L1905. Эмулятор определяет маппер по указанной и реальной контрольной сумме из заголовка рома https://github.com/ekeeke/Genesis-Plus-GX/blob/f0c8f839268ba2806fca47187555f084c1a04ad9/core/cart_hw/md_cart.c#L120, так что, если будете проверять вставку через Genesis Plus GX, нужно либо специально подбирать контр. сумму рома или изменить код эмулятора.
UPD2: Подобрать контр. сумму просто, это сумма всех чисел, представляя ром как массив 2 байтных Big-Endian беззнаковых, кроме заголовка, поэтому нужно в самом конце рома добавить число до суммы 0xFC84.
« Последнее редактирование: 15 Май 2023, 14:15:57 от Sharpnull »

Оффлайн Talking_Sword

  • Пользователь
  • Сообщений: 987
  • Happy Games Only!
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #151 : 15 Май 2023, 14:12:01 »
Sharpnull, на Sega Radica меню в отдельном банке. Вот на этой картинке указано расположение всех игр:



По идее, код меню "лежит" в отдельном банке и никак не "пересекается" с кодом остальных игр. По идее, изменение адреса нужно, только если меню "вшито" в одну из игр, как это описано здесь. Или я чего-то не понимаю?

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5590
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #152 : 15 Май 2023, 14:20:07 »
Talking_Sword, запуск рома с начального банка от Kid Chameleon, поэтому указывается адрес на код, который переключает банки на меню, иначе в банках останется Kid Chameleon. При замене Kid Chameleon вам нужно снова ставить адрес 00 3F 03 00.
UPD: Так как нужен начальный адрес 1-й игры чтобы её запустить, он хранится в коде меню - 0x3F06F4 в роме, для Kid Chameleon там 00 00 04 B0, а для заменяемой игры нужно взять с позиции 0x4-0x7 от его рома. Другие начальные адреса тоже могут хранится в меню, но такое не нужно. UPD2: Они всё-таки не тупые, нужно менять только для 1-й игры:
2078 0004      movea.l $00000004,a0
4ED0            jmp.l (a0)
« Последнее редактирование: 15 Май 2023, 17:28:52 от Sharpnull »

Оффлайн Talking_Sword

  • Пользователь
  • Сообщений: 987
  • Happy Games Only!
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #153 : 15 Май 2023, 17:56:48 »
В принципе, до того, как писал сообщение догадывался, что что это как-то связано с переключением на меню. сейчас проверил - после подачи питания на выводах Q1-Q6 74LS174 действительно нули, значит будет включен банк самой первой игры. Значит эти изменения нужны, чтобы на выходах 74LS174 было 111111? Тогда не понимаю другого. Уже до этого экспериментировал - игры переключаются по сигналу /TIME, прочитал здесь, что сигнал /TIME срабатывает при доступе к адресам 0xA13000-0xA130FF. Поставил в отладчике точку останова на доступ к этим адресам, пробовал запускать меню отдельно (вырезанное из ROM-а). При выборе игры в меню, точка останова срабатывает. Но вот если запустить этот самый Kid Chameleon, у которого в начале 3F 03 00, то точка останова не срабатывает.

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5590
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #154 : 15 Май 2023, 20:27:28 »
прочитал здесь, что сигнал /TIME срабатывает при доступе к адресам 0xA13000-0xA130FF
Я давал ссылку на код эмулятора, там действительно читается A13000-A130FF. Интересно, что OR (ИЛИ) с базовым индексом банка, поэтому 0xA1307E, который переключает на меню установит все банки одним банком меню (каждые 64КБ).
Поставил в отладчике точку останова на доступ к этим адресам, пробовал запускать меню отдельно (вырезанное из ROM-а). При выборе игры в меню, точка останова срабатывает. Но вот если запустить этот самый Kid Chameleon, у которого в начале 3F 03 00, то точка останова не срабатывает.
Не знаю каким эмулятором вы пользуетесь, но в вырезке только нет первого чтения A1307E (для меню). Код чтения A130xx выполняется в RAM по понятной причине, может это вас сбило.

Оффлайн Talking_Sword

  • Пользователь
  • Сообщений: 987
  • Happy Games Only!
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #155 : 16 Май 2023, 14:16:39 »
Sharpnull, честно говоря, с трудом могу понять что написано в вашем сообщении. Сразу говорю, вовсе не имею в виду, что вы плохо пишете, просто умений в этой области у меня нет.

Лучше спрошу так:

1. Чтобы заменить первую игру на многоигровке, нужно в "новой" игре значение по адресам 0x04-0x07 заменть на значение из "родной" игры?
2. А в коде меню что-то менять придется? Ну кроме текста, естественно.
Не знаю каким эмулятором вы пользуетесь
Gens r57shell mod.

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5590
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #156 : 16 Май 2023, 16:25:48 »
1. Чтобы заменить первую игру на многоигровке, нужно в "новой" игре значение по адресам 0x04-0x07 заменть на значение из "родной" игры?
Допустим вы не будете заменять на игру больше 1МиБ с позиции 0x0 (т. е. вместо Kid Chameleon, конечно можно меньше без доп. изменений или сделать все игры разного размера при редактировании кода), тогда после вставки нового рома как минимум нужно: на место 0x4-0x7: 00 3F 03 00 (для меню), а байты, что были на месте 0x4-0x7 от "новой игры", скопировать с 0x3F06F4 (UPD: т. е. в это место), например у Kid Chameleon это было 00 00 04 B0. Второе нужно чтобы меню при выборе 1-й игры перекинуло на код "новой игры".
Gens r57shell mod.
Я тоже им пользуюсь по безысходности, много чего нет и пара инструкций неправильно отображаются в M68k Debug, как раз здесь код выполняемый в RAM не отображается, ещё последняя версия в сети без исходного кода - Gens11svnr665. Ну так он не запускает "Sega Radica! Volume 1 BIOS (U).gen", не поддерживает маппер, я подумал вы запустили эмулятор, он дошёл до меню, но там почему-то не сработал breakpoint при выборе игры. Обрезок только из меню работает, потому что регистр маппера используется при выборе игры, а в начале не нужно переключаться.
Кстати, я не понимаю почему меню расположили в конце из-за чего нужно 1-ю игру редактировать, от Radica есть многоигровка где меню в начале и ничего переключать не нужно. Я только предполагаю для удобства, что в начале файле, или чтобы легко кто-то не достал их меню для своих игр, но вряд ли. Можно было бы сделать круче: на железе с маппером меню и все игры, а без маппера запуск 1-й игры без меню и без других игр.
« Последнее редактирование: 16 Май 2023, 16:43:34 от Sharpnull »

Оффлайн Talking_Sword

  • Пользователь
  • Сообщений: 987
  • Happy Games Only!
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #157 : 16 Май 2023, 21:34:35 »
а байты, что были на месте 0x4-0x7 от "новой игры", скопировать с 0x3F06F4 (UPD: т. е. в это место), например у Kid Chameleon это было 00 00 04 B0.
0x3F06F4 - это по идее адрес в области меню, то есть само меню тоже нужно править. Боюсь, что не получится у меня заменить первую игру. С другой стороны, на замену можно попробовать подобрать игру, у которой это значение будет как и у старой игры, тогда и надобность в редактировании кода меню отпадет.

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5590
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #158 : 17 Май 2023, 06:36:12 »
С другой стороны, на замену можно попробовать подобрать игру, у которой это значение будет как и у старой игры, тогда и надобность в редактировании кода меню отпадет.
Проверил 1699 ромов No-Intro (старый ромсет), подходит только Chameleon Kid (Japan).md :) Если речь про другую многоигровку, то как повезёт.

Оффлайн Talking_Sword

  • Пользователь
  • Сообщений: 987
  • Happy Games Only!
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #159 : 17 Май 2023, 10:48:10 »
Если речь про другую многоигровку
Да. Как уже говорил, мне нужно заменить игры на другой многоигровке, ROM Sega Radica использовал только для того, чтобы потренироавться, ROM-а нужной мне многоигровки у меня нет "на руках", так как пока нет программатора (но скоро будет), чтобы сдампить свою многоигровку.

В моей многоигровке первым, скорее всего, будет Ultimate Mortal Kombat 3. Его можно будет заменить на на Toy Story, так как подходит по размеру. Посмотрел - и там, и там значения совпадают - 00 00 02 00.
Проверил 1699 ромов No-Intro (старый ромсет)
Ради моих вопросов это слишком большие трудозатраты. Надо было мне сразу написать, что Radica не нужна.

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5590
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #160 : 17 Май 2023, 12:27:12 »
Ради моих вопросов это слишком большие трудозатраты
Мне было интересно, для 00 00 02 00 - 943 из 1699, вот скрипт на Python 3:
Класть в папку с ромами, отобразит все подходящие ромы.
« Последнее редактирование: 17 Май 2023, 12:36:30 от Sharpnull »

Оффлайн free.gen

  • Пользователь
  • Сообщений: 297
  • Пол: Мужской
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #161 : 21 Май 2023, 18:09:33 »
Хочу изменить кое какую отсебятину в переводе игры Crusader of Centy [SMD].
Текст оригинала (U) удалось найти с помощью Translhextion, там все буквально в пару кликов через Scan Relative. Находит закодированный текст и создает таблицу.
А вот с переведенной версией он уже не хочет искать ничего (В поиск ввожу кириллицу). Выделяет не то что нужно. То есть как бы не находит этот переведенный текст, как в оригинале.
Может что-то не так делаю? В настройках пробовал менять кодировку, все равно не ищет.
Хочу сделать правильную таблицу для этого перевода, так чтобы в редакторе все отображалось как и в игре - на русском. Это возможно?
Прошу советов и тд, как лучше и проще это все сделать.

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5590
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #162 : 21 Май 2023, 21:10:39 »
Хочу сделать правильную таблицу для этого перевода
Для диалогов графика шрифта с F5000 - 8x16px, 1bpp. Из CrystalTile2:
« Последнее редактирование: 22 Май 2023, 14:35:50 от Sharpnull »

Оффлайн free.gen

  • Пользователь
  • Сообщений: 297
  • Пол: Мужской
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #163 : 22 Май 2023, 02:28:54 »
Sharpnull, действительно, сам не допер просто сопоставить шрифты.  :blush:
Таблица готова, однако все равно в Translhextion кракозябры и пробелы. Отображаются только спецсимволы.

Разобрался. Таблицу нужно создать в кодировке OEM 866.
Спасибо.
« Последнее редактирование: 22 Май 2023, 02:36:48 от free.gen »

Оффлайн Talking_Sword

  • Пользователь
  • Сообщений: 987
  • Happy Games Only!
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #164 : 16 Июнь 2023, 06:54:22 »
Есть вопрос, но он с некоторым уклоном в железо, не совсем уверен, будет ли это уместно в этой теме.

Программы для работы с файлами на компьютере, такие как HEX-редакторы в основном оперируют байтами, в которых 8 бит, соответственно, конкретный адрес в файле указывает на конкретный байт. Но есть ПЗУ с 16-битной шиной, у них на одном адресе "лежит" уже 16 бит, получается что адресов будет меньше в два раза.

Как перевести адрес из файла в адрес, который будет на шине адреса ПЗУ и обратно? Просто поделить на 2? А если нужно наоборот, перевести адрес из ПЗУ в адрес в файле, то умножить на 2?

Оффлайн Беларус учит русский

  • Модератор
  • Сообщений: 1388
    • ВКонтакте
    • Steam
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #165 : 17 Июнь 2023, 00:45:07 »
Действительно, слишком железно, слишком непонятно.
конкретный адрес в файле указывает на конкретный байт.
Этот адрес может состоять из любого количества байт - 1, 2, 4, 8. Он может быть с "большим" удобством для глаз (Big Endian - 1234), а может быть с "маленьким" (Little Endian - 3412).
есть ПЗУ с 16-битной шиной, у них на одном адресе "лежит" уже 16 бит, получается что адресов будет меньше в два раза.
Т.е. к таким ПЗУ можно обращаться только по адресам, кратным двум байтам? Судя по твоим сообщениям, это связано с Сегой?
Как перевести адрес из файла в адрес, который будет на шине адреса ПЗУ и обратно?
Т.е. в файле адрес однобайтный? И не достаточно расширить его до двух байт, заполнив второй нулём?

Скорее всего, тебе к Кластеру (на Хабре).

Оффлайн Talking_Sword

  • Пользователь
  • Сообщений: 987
  • Happy Games Only!
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #166 : 17 Июнь 2023, 06:53:22 »
Действительно, слишком железно, слишком непонятно.
Ну вот смотрите. Вот у нас есть ПЗУ. Пускай это будет S29GL512P:



У него есть адресные выводы - A0-A24, на них можно в двоичном виде выставить адрес. Данные будут выдаваться на шине данных - DQ0-DQ15. Всего адресных выводов получается 25 (так как нумерация с нуля) 2^25 получается 33554432, 32 миллиона, но вмещает наше ПЗУ 64 мегабайта, то есть байт в два раза больше, чем адресов, но выводов данных у нас 16, поэтому на них будет сразу два байта.

Нельзя просто так взять адрес из HEX-редактора и выставить его на шине адреса, чтобы получить нужные данные. В HEX-редакторе крайний адрес будет 3FFFFFF, на S29GL512P адрес будет 1FFFFFF (если перевести из двоичного в шестнадцатеричное).

Нужно понять, как "перевести" значение адреса из файла, чтобы его можно было выставить на шине адреса ПЗУ, чтобы получить те же данные.
Т.е. к таким ПЗУ можно обращаться только по адресам, кратным двум байтам?
Не знаю.
Судя по твоим сообщениям, это связано с Сегой?
Да.

Оффлайн Марат

  • Пользователь
  • Сообщений: 559
  • Пол: Мужской
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #167 : 17 Июнь 2023, 07:13:37 »
Насколько я понимаю шина данных в 16 бит, лишь означает, что можно считывать/записывать сразу два байта за одну операцию. А можно и по одному байту читать/записывать. А если адресов не хватает, видимо, есть какой то маппер, который переключает банки.

Добавлено позже:
Ну вот из даташит: в режиме побайтного доступа вывод dq15/a1 используется в качестве младшего бита при адресации. Таким образом будет уже 2^26 степени.
А в режиме чтения вордами, как вы и говорили, видимо, доступ будет по чётным адресам.
« Последнее редактирование: 17 Июнь 2023, 07:41:51 от Марат »

Оффлайн Talking_Sword

  • Пользователь
  • Сообщений: 987
  • Happy Games Only!
    • Просмотр профиля
Re: [ALL] Вопросы новичков
« Ответ #168 : 17 Июнь 2023, 20:27:58 »
А можно и по одному байту читать/записывать.
Это если свой код писать наверно нужно учитывать. А мне нужно просто адрес из файла превратить в комбинацию бит, которые можно будет выставить на шине адреса ПЗУ.
А если адресов не хватает, видимо, есть какой то маппер, который переключает банки.
Мимо! У большинства картриджей нет ничего кроме ПЗУ. Там наоборот нужна дополнительная логика, чтобы подключить 8-битное ПЗУ. Есть у меня один странноватый картридж для Mega Drive с 8-битным ПЗУ, там еще стоит 74LS374, похоже при помощи него как-то "адаптируют" 8-битную шину к 16-битной, но я не разбирался, как это работает.
Ну вот из даташит: в режиме побайтного доступа вывод dq15/a1 используется в качестве младшего бита при адресации. Таким образом будет уже 2^26 степени.
А в режиме чтения вордами, как вы и говорили, видимо, доступ будет по чётным адресам.
Про вывод /BYTE вообще не в тему, он на картриджах для Mega Drive вообще не используется и подтянут к лог. "1".

Оффлайн Марат

  • Пользователь
  • Сообщений: 559
  • Пол: Мужской
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #169 : 17 Июнь 2023, 21:10:04 »
Про мегадрайв в вашем сообщении нет упоминания

Оффлайн Turbo2000

  • Пользователь
  • Сообщений: 104
  • Пол: Мужской
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #170 : 10 Июль 2023, 00:28:26 »
А что за регистр такой VDP_PSG? 0x00C00011
Нигде не могу найти упоминания

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5590
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #171 : 10 Июль 2023, 01:03:46 »
Turbo2000, регистр 0xC00011 для 68K для работы с SN76489: https://www.smspower.org/Development/SN76489.

Оффлайн Turbo2000

  • Пользователь
  • Сообщений: 104
  • Пол: Мужской
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #172 : 10 Июль 2023, 01:11:34 »
Turbo2000, регистр 0xC00011 для 68K для работы с SN76489: https://www.smspower.org/Development/SN76489.

Спасибо, странно, что он в отладчике называется VDP_PSG

Оффлайн Adven

  • Пользователь
  • Сообщений: 1
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #173 : 29 Сентябрь 2023, 21:11:28 »
Возможно уже есть хак на алиен 3 нес что бы боссы двигались рандомно а не как бараны по траектории невидя перса ?

Оффлайн MaxWooD

  • Пользователь
  • Сообщений: 1110
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #174 : 30 Сентябрь 2023, 08:17:52 »
Возможно уже есть хак на алиен 3 нес что бы боссы двигались рандомно а не как бараны по траектории невидя перса ?
Такого хака нет, потому что никто не предлагал альтернативные маршруты для дальнейшей их рандомизации. Возможно вы будете первый, кто выскажет такие предложения в этой теме...

Оффлайн paul_met

  • Супермодератор
  • Сообщений: 8168
  • Пол: Мужской
  • Похититель эмуляции
    • Youtube
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #175 : 25 Ноябрь 2023, 16:19:13 »
Вопрос про картриджи от Talking_Sword перемещён в отдельную тему:
https://www.emu-land.net/forum/index.php/topic,88657.msg1576812.html

Оффлайн Nik Pi

  • Пользователь
  • Сообщений: 149
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #176 : 12 Январь 2024, 19:47:32 »
Доброго времени суток!
Вопрос по SMD. Конвертация музыки для ром-хака;
У меня при конвертации файлов VGM в формат SMPS- файлы весят больше, чем сама игра  0_0
Хотел узнать, есть ли способ оптимизации smps файлов помимо smps optimizer?

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2661
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #177 : 12 Январь 2024, 20:12:43 »
потому что вгм - это дамп регистров во времени. а smps, как и gems - это по сути ноты, что играть, с какими задержками. то есть там не нужно содержать прям ваще всеееее как это вгмка делает. в вгм нет понятия инструмент. каждый раз получается там выставляется не инструмент номер 8 к примеру, а все 39 или сколько то там параметров в регистры инструмента нужного канала. в драйверах же есть что-то типа "выставить инструмент номер 8" и драйвер уже сам все чо надо распихивает читая данные инструмента из одного и того-же места. второе - вгм это как бы вся песня целиком. восемь куплетов, три припева... драйверу это нафиг не надо. ему достаточно 1 куплет и 1 припев. а дальше он их просто мешает в нужном порядке типа 1 куплет, 1 припев, 1 куплет, 1 куплет, 1 припев... в результате песни занимают грамульки совсем. так-же имеет значение сэмплы есть ли в песне. если есть, то песня тоже раздувается в вгм. в драйвере же указано просто: играть сэмпл номер 3. он лезет туда где сэмплы лежат, читает оттуда... вгмки оптимизированные тоже такое в принципе умеют - играть сэмплы из банка внутри вгм, а не из регистров 2А чтоль для сэмплов регистр используется... но чаще всего сэмплы именно что просто регистром играются, а не из банка. лень людям вгмки оптимизировать :)

Оффлайн Talking_Sword

  • Пользователь
  • Сообщений: 987
  • Happy Games Only!
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #178 : 27 Январь 2024, 10:57:57 »
Подскажите, бывают ли эмуляторы Sega Mega Drive, которые бы могли запретить игре использовать SRAM для сохранений в картридже? То есть, сымитировать работу игры на картридже без SRAM.

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5590
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #179 : 27 Январь 2024, 11:48:44 »
сымитировать работу игры на картридже без SRAM
Укажите неверный промежуток адресов SRAM в заголовке рома - 0x1B4-0x1B7 (начало), 0x1B8-0x1BB (конец). Для простой SRAM в Genesis Plus GX так работает: https://github.com/ekeeke/Genesis-Plus-GX/blob/master/core/cart_hw/sram.c, т. е. нужно, чтобы не было T-26013 в промежутке 0x182-0x18D (rominfo.product), для части ромов есть определение своей SRAM, нужно учесть по этому коду: https://github.com/ekeeke/Genesis-Plus-GX/blob/master/core/cart_hw/md_cart.c, чтобы не было переопределения. UPD: Или просто скомпилируйте эмулятор с отключенной SRAM.