Разработка и ромхакинг > Ромхакинг и программирование
(VS) ромы NES
(1/1)
Teffycom:
Почему даже после изменения одного байта игра совсем не запускается на нестопии, а на fceu начинает глючить палитра? В этих ромах есть какая-то защита или это эмуляторы как-то специфически на них настроены?
Guyver(X.B.M.):
Какая игра-то? Я смотрел несколько ромов таких - всё прекрасно эмулируется после изменения...
JTH:
Защита — возможно, но маловероятно.

Скорее, есть эмуляторы, содержащие в себе кучу захардкоженных хаков для эмуляции отдельных ромов. Контрольная сумма поменялась — всё, хак не работает.
Teffycom:
Например, тетрис не пошел, танчики. Эмули - Nestopia, fceu (санчезовский). Других эмулей для эмуляции VS ромов не встречал, правда, говорят, что MAME это дело кушает, но это я еще не пробовал.
JTH:
Вот кусок из vsuni.c от FCEu-mm:
--- Код: ---VSUNIENTRY VSUniGames[]  =
{
 {"Baseball",    0x691d4200ea42be45LL, 99, 2,RP2C04_001,0},
  {"Battle City",  0x8540949d74c4d0ebLL, 99, 2,RP2C04_001,0},
  {"Battle City(Bootleg)",0x8093cbe7137ac031LL, 99, 2,RP2C04_001,0},

  {"Clu Clu Land",  0x1b8123218f62b1eeLL, 99, 2,RP2C05_004,IOPTION_SWAPDIRAB},
  {"Dr Mario",    0xe1af09c477dc0081LL,  1, 0,RP2C04_003,IOPTION_SWAPDIRAB},
  {"Duck Hunt",    0x47735d1e5f1205bbLL, 99, 2,RCP2C03B  ,IOPTION_GUN},
  {"Excitebike",    0x3dcd1401bcafde77LL, 99, 2,RP2C04_003,0},
  {"Excitebike (J)",    0x7ea51c9d007375f0LL, 99, 2,RP2C05_004,0},
  {"Freedom Force",  0xed96436bd1b5e688LL,  4, 0,RP2C04_001,IOPTION_GUN}, /* Wrong color in game select screen? */
  {"Stroke and Match Golf",0x612325606e82bc66LL, 99, 2,RP2C04_002,IOPTION_SWAPDIRAB|IOPTION_PREDIP,0x01},

  {"Goonies",    0xb4032d694e1d2733LL, 151,1,RP2C04_003,0},
  {"Gradius",    0x50687ae63bdad976LL,151, 1,RP2C04_001,IOPTION_SWAPDIRAB},
  {"Gumshoe",    0x87161f8ee37758d3LL, 99, 2,RC2C05_03,IOPTION_GUN},
  {"Hogan's Alley",  0xd78b7f0bb621fb45LL, 99, 2,RP2C04_001,IOPTION_GUN},
  {"Ice Climber",  0xd21e999513435e2aLL, 99, 2,RP2C05_004,IOPTION_SWAPDIRAB},
  {"Ladies Golf",  0x781b24be57ef6785LL, 99, 2,RP2C04_002,IOPTION_SWAPDIRAB|IOPTION_PREDIP,0x1},

  {"Mach Rider",  0x015672618af06441LL, 99, 2, RP2C04_002,0},
  {"Mach Rider (J)",  0xa625afb399811a8aLL, 99, 2, RP2C04_001,0},
  {"Mighty Bomb Jack",  0xe6a89f4873fac37bLL, 0, 2, RC2C05_02,0},
  {"Ninja Jajamaru Kun",  0xb26a2c31474099c0LL, 99, 2,RC2C05_01 ,IOPTION_SWAPDIRAB},
  {"Pinball",    0xc5f49d3de7f2e9b8LL, 99, 2,RP2C04_001,IOPTION_PREDIP,0x01},
  {"Pinball (J)",    0x66ab1a3828cc901cLL, 99, 2,RCP2C03B,IOPTION_PREDIP,0x1},
  {"Platoon",    0x160f237351c19f1fLL, 68, 1,RP2C04_001,0},
  {"RBI Baseball",       0x6a02d345812938afLL,  4, 1,RP2C04_001 ,IOPTION_SWAPDIRAB},
  {"Soccer",    0xd4e7a9058780eda3LL, 99, 2,RP2C04_003,IOPTION_SWAPDIRAB},
  {"Star Luster",  0x8360e134b316d94cLL, 99, 2,RCP2C03B  ,0},
  {"Stroke and Match Golf (J)",0x869bb83e02509747LL, 99, 2,RCP2C03B,IOPTION_SWAPDIRAB|IOPTION_PREDIP,0x1},
  {"Super Sky Kid",  0x78d04c1dd4ec0101LL,  4, 1,RCP2C03B  ,IOPTION_SWAPDIRAB | IOPTION_PREDIP,0x20},

  {"Super Xevious",  0x2d396247cf58f9faLL,  206, 0,RP2C04_001,0},
  {"Tetris",    0x531a5e8eea4ce157LL, 99, 2,RCP2C03B  ,IOPTION_PREDIP,0x20},
  {"Top Gun",    0xf1dea36e6a7b531dLL,  2, 0,RC2C05_04 ,0},
  {"VS Castlevania",     0x92fd6909c81305b9LL,  2, 1,RP2C04_002,0},
  {"VS Slalom",    0x4889b5a50a623215LL,  0, 1,RP2C04_002,0},
  {"VS Super Mario Bros",0x39d8cfa788e20b6cLL, 99, 2,RP2C05_004,0},
  {"VS Super Mario Bros [a1]",0xfc182e5aefbce14dLL, 99, 2,RP2C05_004,0},
  {"VS TKO Boxing",  0x6e1ee06171d8ce3aLL,4, 1,RP2C04_003,IOPTION_PREDIP,0x00},
 {0}
}; 
--- Конец кода ---

А вот из source\core\vssystem\NstVsSystem.cpp от Nestopia 1.40:
--- Код: --- switch (prgCrc)
{
// VS. Dual-System Games are unsupported

case 0xB90497AA: // Tennis
case 0x2A909613: // Tennis (alt)
case 0xBC202DB6: // Tennis P2
case 0x008A9C16: // Wrecking Crew P1
case 0x30C42B1E: // Wrecking Crew P2
case 0xAD407F52: // Balloon Fight P1
case 0x6AD67502: // Balloon Fight P2
case 0x18A93B7B: // Mahjong (J)
case 0xA2AD7D61: // Mahjong (J) (alt)
case 0xA9A4A6C5: // Mahjong (J) P1
case 0x78D1D213: // Mahjong (J) P2
case 0x13A91937: // Baseball P1
case 0xC4DD2523: // Baseball P1 (alt 1)
case 0xB5853830: // Baseball P1 (alt 2)
case 0x968A6E9D: // Baseball P2
case 0xF64D7252: // Baseball P2 (alt 1)
case 0xF5DEBF88: // Baseball P2 (alt 2)
case 0xF42DAB14: // Ice Climber P1
case 0x7D6B764F: // Ice Climber P2

throw RESULT_ERR_UNSUPPORTED_VSSYSTEM;
}

Context context( cpu, ppu );

try
{
// Credit to the MAME devs for much of the DIP switch info.

switch (prgCrc)
{
// …кусок пропущен для краткости…

case 0x70433F2C: // Battle City
--- Конец кода ---


Мораль — либо патчить так, чтобы не менялась контрольная сумма (что в случае FCEu довольно затруднительно, ибо md5), либо патчить эмулятор.

С MAME в общем–то аналогичная ситуация — он чуть ли не весь состоит из хаков и подпорок для каждого рома. Игровые автоматы  всё–таки штучный товар, у каждой железки свои особенности.
Guyver(X.B.M.):
Либо использовать Виртуанес - ему пофигу, если маппер поддерживается, конечно...
Teffycom:
Виратуанес тоже некорректно воспроизводит VS ромы после их изменения - портится палитра.
Guyver(X.B.M.):
Да ну? Я изменял 4 VS рома - все остались как и были... Может версия не та...
Teffycom:
У меня версия 0.97. Battle City, по крайней мере, после изменения работает с глючной палитрой.
Навигация
Главная страница сообщений

Перейти к полной версии