Page 4 of 11

Posted: Tue Mar 26, 2013 4:41 pm
by blackbird_ru
А как эмуляторы проблему обходят?
Подозреваю что либо пофигу на заголовки, либо фиксят на лету.
Нет, вот, к примеру, как работает zsnes.

Берёт два адреса заголовка (Hi и Lo) и начинают там смотреть ключевые значение, у которых написаны пределы валидности (больше, меньше чего-то, равно чему-то), за каждое значение начисляется баллы, потом сравнивают, кто больше баллов набрал, так и узнает что Hi, а что Lo. Хотя не, если ищется способ определить Hi Lo, то вполне можно взять метод из zsnes'a, не очень трудоёмкий и вполне можно провести на консоли.

Code: Select all

Файл initc.c int InfoScore(unsigned char *Buffer) { int score = valid_reset(Buffer); if (validChecksum(Buffer, 0)) { score += 5; } if (Buffer[CompanyOffset] == 0x33) { score += 3; } if (!Buffer[ROMSizeOffset]) { score += 2; } if ((1 << (Buffer[ROMSizeOffset] - 7)) > 48) { score -= 2; } if ((8 << Buffer[SRAMSizeOffset]) > 1024) { score -= 2; } if (Buffer[CountryOffset] < 14) { score += 2; } if (!AllASCII(Buffer, 20)) { score -= 2; } if (valid_normal_bank(Buffer[BSBankOffset])) { score += 2; } return(score); } void BankCheck() { unsigned char *ROM = (unsigned char *)romdata; infoloc = 0; Interleaved = false; if (NumofBytes < Lo) { romtype = 1; infoloc = 1; //Whatever, we just need a valid location } if (NumofBytes < Hi) { romtype = 1; infoloc = Lo; } if (NumofBytes >= 0x500000) { //Deinterleave if neccesary CheckIntlEHi(ROM); if (EHiHeader(ROM, EHi)) { romtype = 2; infoloc = EHi; } } if (!infoloc) { static bool CommandLineForce2 = false; int loscore, hiscore; //Deinterleave if neccesary CheckIntl1(ROM); loscore = InfoScore(ROM+Lo); hiscore = InfoScore(ROM+Hi); switch(ROM[Lo + BankOffset]) { case 32: case 35: case 48: case 50: loscore += 3; break; } switch(ROM[Hi + BankOffset]) { case 33: case 49: case 53: case 58: hiscore += 3; break; } if (hiscore > loscore) { romtype = 2; infoloc = Hi; } else { romtype = 1; infoloc = Lo; } } }
Часть кода, много чего не указано, но понять в общих чертах можно.
Ну и Масяня немного не прав по способы проверки в эмуляторах.

Posted: Tue Mar 26, 2013 4:44 pm
by blackbird_ru
Как карту понять в каком режиме запустить игру? HIROM? LOROM? На плате картриджа производителя игры это жестко соеденино, поэтому и на заголовок пофиг.
Не, тут вопрос, твоему карту пофиг на заголовки или нет, если не имеют значения, то сделай опцию отключения проверки валидности и всё.

Posted: Tue Mar 26, 2013 5:30 pm
by SAMuel
Тогда два решения:
1 - сделать отключение проверки заголовков в картридже и посмотреть резщультат.
2 - написать софтинку которая будет проверять ромы и править заголовки.

Posted: Tue Mar 26, 2013 8:57 pm
by SavitarSvit
Тогда два решения:
1 - сделать отключение проверки заголовков в картридже и посмотреть резщультат.
2 - написать софтинку которая будет проверять ромы и править заголовки.
+1, лишь бы все работало. :)
P.S. С хексом я не сталкивался, а разбираться не охота. Буду ждать что смогут сделать светлые головы. :)
SAMuel, есть еще третий вариант вручную допилить ромы из списка которые я выложил.
Кстати цена на игру Magical Pop'n за полнокомплект сейчас на ебае, на аукционе, поднялась более 400$, так что я думаю никто не скажет что овчинка не стоит выделки :)

Posted: Tue Mar 26, 2013 9:57 pm
by SavitarSvit
Я думаю, что самый легкий и наименее болезненный метод запуска этих ромов - это отменить эту проверку. Но! не просто отменить а оставить ее. Например. У какого то рома не определяется файл инфо. Я нажимаю записать ром в память, мне выдается сообщение что мол ром не того формата и тд. и т.п. но тут же выдается сообщение, типа "вы все равно хотите записать этот ром?" И вариант да и нет. Если я допустим знаю, что ром рабочий, то я уж лучше принудительно его запишу и поиграю. Если конечно такой способ не выведет карик из строя :)

Posted: Tue Mar 26, 2013 10:14 pm
by blackbird_ru
SavitarSvit
Да софтинку написать, чтобы она проверила ромы в папке и добавила значение в нужный адрес - не проблема, только решение больно костыльное, нужно чтобы такая штука работала на уровне самого картриджа.

P.S. Масяня, ты так и не ответил, из-за чего проблемы с Hyper Iria, на карте есть поддержка FastROM?

Posted: Tue Mar 26, 2013 11:01 pm
by SAMuel
SavitarSvit, кстати да, мысля хорошая, оставить проверку заголовков, при хорошем все как обычно работает, а при корявом заголовке выдвет предупреждение что мол ром некорректный, желаете продолжить Да или Нет.

Ждем что Масяня скажет о таком варианте.

Posted: Wed Mar 27, 2013 1:36 pm
by blackbird_ru
Вот как-то так, тулза которая фиксит всякое в заголовке.
http://www.mediafire.com/download.php?63pd522bvzpgb8g

Желательно на весь ромсет прогнать, но при этом его забекапив, т.к. может побить ромы с чипами ну и так, для сохранности.

И напишите, помогает вообще в проблеме или так ещё какие-то заковыки есть.

Posted: Wed Mar 27, 2013 4:05 pm
by SAMuel
Вот как-то так, тулза которая фиксит всякое в заголовке.
http://www.mediafire.com/download.php?63pd522bvzpgb8g

Желательно на весь ромсет прогнать, но при этом его забекапив, т.к. может побить ромы с чипами ну и так, для сохранности.

И напишите, помогает вообще в проблеме или так ещё какие-то заковыки есть.
Отлично, немного потестил на играх:

Battletoads & Double Dragon - The Ultimate Team (U) [!].smc
Battletoads in Battlemaniacs (U) [!].smc
Bio Metal (U) [!].smc
Blackthorne (U) [T+Rus Shed].smc
Contra III - The Alien Wars (U) [!].smc

Эти игры запустились без проблем, до этого Биометал и Контра напрочь картридж вводили в ступор, после ресета карту не видит, приходило выкл\вкл делать, но теперь порядок.

правда Биометал непошел дальше надписи This Game pak Is Not Designed For Your Super Nes.

Потестюка ещё игры которые не шли, 10 минут и ещё результат сообщю.

Posted: Wed Mar 27, 2013 4:10 pm
by admin
Как карту понять в каком режиме запустить игру? HIROM? LOROM? На плате картриджа производителя игры это жестко соеденино, поэтому и на заголовок пофиг.
Не, тут вопрос, твоему карту пофиг на заголовки или нет, если не имеют значения, то сделай опцию отключения проверки валидности и всё.
Карту пофиг на заголовок, но не пофиг на режим игры HI LO.

Поковыряю ZNES, подправлю детект рома.

Posted: Wed Mar 27, 2013 4:25 pm
by blackbird_ru
Карту пофиг на заголовок, но не пофиг на режим игры HI LO.

Поковыряю ZNES, подправлю детект рома.
Нет, вопрос был в том, что карт берёт значения Hi Lo из заголовка и нигде больше?
А zsnes ковырять нефиг делать, там всё в одном файле и близко к друг другу.
Эти игры запустились без проблем, до этого Биометал и Контра напрочь картридж вводили в ступор, после ресета карту не видит, приходило выкл\вкл делать, но теперь порядок.
Хм, биометал какой-то эффект плацебо, в нём как бы всё и так нормально и файл не меняется.

Лучше это, проверь разные версии из этого архива и напиши, какие нормально запускаются и идут.
http://www.mediafire.com/download.php?39taqsjp4an8c6y

Posted: Wed Mar 27, 2013 4:42 pm
by SAMuel
Потестил ещё немного:

Adult Manga 1 (PD) [T+Rus 100 Dennis].smc - нет
Adult Manga 2 (PD) [T+Rus].smc - нет
Chrono Trigger (U) [T-Rus].smc - да
Chrono Trigger [Leonis].smc - да
Dinocity [T+Rus 0.82 Lin].smc - да
Dr. Mario (J) [T+Rus] by Multisoft.smc - нет
Mega Man X (U)(V1.1)[!].smc - да
Pilotwings (U) [!].smc - нет
Shin Nekketsu Kouha - Kunio-tachi no Banka (J) [T+Rus(Mature)].smc - нет
Shin Nekketsu Kouha - Kunio-tachi no Banka (J) [T+Rus(Kind)].smc - нет
Shodai Nekketsu Kouha Kunio-kun (J).smc
Star Fox (U) (V1.2) [!].smc - нет
Star Fox (V1.2)(U)[!].smc - нет
Wolfenstein 3D (J).smc - да
Wolfenstein 3D (U).smc -да
WORMS (R).SMC - да
Zelda LttP [T+Rus 0-98-5].smc - да

эти ромы все подряд брал, не смотрел ни регионы ни наличии спец чипов.

потестю ещё игры пойду.

итак, было бы неплохо в проге сделать такие улучшения как:
1 открываться кнопкой обзор в папке где находится сама прога и запоминать последнюю папку которую указали,
2 также неплохо бы чтоб прога создавала папку Fix и туда копировала пофиксеные ромы,
3 ну и прога не реагирует на файлы с атрибутом Только чтение, она их пропускает не информируя что небыл пофиксен и обнаружен.

Posted: Wed Mar 27, 2013 4:49 pm
by blackbird_ru
SAMuel
Да мне лень что-то её в неё добавлять, временный костыль, на время, пока Масяня прошивку не починит. Хотя файл с фикшенными ромами можно было бы добавить, если очень нужно.

Адрес с значением Hi, Lo кстати только в играх ~100 из ~3000 затёрто.
А вот у ~1500 фаст ромы юзают.

Posted: Wed Mar 27, 2013 4:53 pm
by SAMuel
тестанул

Hyper Iria (Japan)_0.sfc
Hyper Iria (Japan)_1.sfc
Hyper Iria (Japan)_2.sfc
Hyper Iria (Japan)_3.sfc

что с архива что после фикса, хрень, никак не запустилось у меня :(

ну то понятно что Масяня допишет и пофиксит прошивочку, но многим юзерам не доступно ни физически ни мозгами как обновлять ПО, им проще будет прогой прогнать да пофиксить ромы, да и лишняя прожка не помешает :)

Posted: Wed Mar 27, 2013 4:55 pm
by blackbird_ru
тестанул

Hyper Iria (Japan)_0.sfc
Hyper Iria (Japan)_1.sfc
Hyper Iria (Japan)_2.sfc
Hyper Iria (Japan)_3.sfc

что с архива что после фикса, хрень, никак не запустилось у меня :(
А она даже не загружается в память?