Наверное повторюсь, но немного опишу...;)
1) Регион конечно же прописан на флэшке
структура флэшки примерно такая
Код:
size hex
00000 |- 10000 - write
0FFFF |
10000 |- 8000 - write - Game setting (Play history)
17FFF |
18000 |- 2000 - write
19FFF |
1A000 |- 2000 - Factory settings
1BFFF |
1C000 |- 4000 - write - ISP
1FFFF |
подробнее см. код из KOS
файл flashrom.c и flashrom.h
В зависимости от региона дрим имеет три вида настроек
Код:
--- EUROPE ---
0 0 2 1 1 (char)
30 30 32 31 31 (hex)
| | |
| | |
| | Broadcast type = PAL
| |
| Language = ENGLISH (по умолчанию)
|
Country code = EUROPE
--- AMERICA ---
0 0 1 1 0 (char)
30 30 31 31 30 (hex)
| | |
| | |
| | Broadcast type = NTSC
| |
| Language = ENGLISH (по умолчанию)
|
Country code = AMERICA
---- JAPAN ---
0 0 0 0 0 (char)
30 30 30 30 30 (hex)
| | |
| | |
| | Broadcast type = NTSC
| |
| Language = JAPANESE (по умолчанию)
|
Country code = JAPAN
Region Changer как раз их и меняет (на примере NTSC-US консоли)
(еще на скрине, написал расположение уникального ID кода консоли)
scr1.gif
плюс как то заметил особенность Дримов которые сделаны для Индии, на флэшке этих дримов, в определенной ячейке (адрес 0x1A00F) должно быть значение 0x30.
Специальный "индийский" браузер проверяет наличие этого значения, и если его нет, то он не запускается... но это не относится к теме вопроса;)
scr India.gif
2) На всех официальных играх принадлежность к региону описано исключительно в IP.BIN
да и чисто технически проверка происходит именно в IP.BIN
Как дрим включается, и запускается диск, биос читает первые 16 секторов второй сессии, т.е. IP.BIN
Не будем описывать все подробности проверок, но скажем, что биос сразу же сравнивает значение региона, с тем что в ip.bin и что на флэшке, и если они совпадают, то процесс загрузки идет дальше.
Структура IP.BIN см. на сайте Маркуса
Так что регион игры (с оригинальным ip.bin) легко определяется по значению региона "Area Symbols" и "Product number".
но если ip.bin не оригинальный, то регион придется определять по косвенным параметрам (структуры файлов на диске, наличии варезных меток и пр.)
3) Меняешь Region Changer-ом на нужную тебе систему цвета и нет проблем:)
4) Не пойму, о чём ты спрашиваешь?
В основном меняют результат проверки на broadcast
Но бывают и другие проверки...
Вот припер как изменить результат проверки на broadcast, чтобы игра шла в режиме PAL 60Гц
Sonic Shuffle 60 Hz Fix
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>
ROM:8C015050 ; ---------------------------------------------------------------------------
ROM:8C015050
ROM:8C015050 loc_8C015050: ; CODE XREF: sub_8C014FDC+30j
ROM:8C015050 ; sub_8C014FDC+3Aj ...
ROM:8C015050 mov #0, r4
ROM:8C015052 mov.l @(h'B0,pc), r3 ; [8C015104] = sub_8C033344
ROM:8C015054 jsr @r3 ; sub_8C033344
ROM:8C015056 nop
ROM:8C015058 mov.l @(h'AC,pc), r2 ; [8C015108] = sub_8C03336C
ROM:8C01505A jsr @r2 ; sub_8C03336C
ROM:8C01505C nop
ROM:8C01505E mov.l r0, @(4,r15)
ROM:8C015060 mov.b @(h'C,r0), r0 -->> зам. на mov h'30,r0
ROM:8C015062 mov.l r0, @r15
ROM:8C015064 mov.l @r15, r0
ROM:8C015066 cmp/eq #h'31, r0
ROM:8C015068 bt loc_8C01507A
ROM:8C01506A cmp/eq #h'32, r0
ROM:8C01506C bt loc_8C015084
ROM:8C01506E cmp/eq #h'33, r0
ROM:8C015070 bt loc_8C01508E
ROM:8C015072 cmp/eq #h'30, r0
ROM:8C015074 bt loc_8C015098
ROM:8C015076 bra loc_8C0150A2
ROM:8C015078 nop
ROM:8C01507A ; ---------------------------------------------------------------------------
ROM:8C01507A
ROM:8C01507A loc_8C01507A: ; CODE XREF: sub_8C014FDC+8Cj
ROM:8C01507A mov #1, r3
ROM:8C01507C mov.l @(h'8C,pc), r2 ; [8C01510C] = unk_8C0F5550
ROM:8C01507E mov.l r3, @r2
ROM:8C015080 bra loc_8C0150AC
ROM:8C015082 nop
ROM:8C015084 ; ---------------------------------------------------------------------------
ROM:8C015084
ROM:8C015084 loc_8C015084: ; CODE XREF: sub_8C014FDC+90j
ROM:8C015084 mov #2, r0
ROM:8C015086 mov.l @(h'84,pc), r1 ; [8C01510C] = unk_8C0F5550
ROM:8C015088 mov.l r0, @r1
ROM:8C01508A bra loc_8C0150AC
ROM:8C01508C nop
ROM:8C01508E ; ---------------------------------------------------------------------------
ROM:8C01508E
ROM:8C01508E loc_8C01508E: ; CODE XREF: sub_8C014FDC+94j
ROM:8C01508E mov #3, r2
ROM:8C015090 mov.l @(h'78,pc), r3 ; [8C01510C] = unk_8C0F5550
ROM:8C015092 mov.l r2, @r3
ROM:8C015094 bra loc_8C0150AC
ROM:8C015096 nop
ROM:8C015098 ; ---------------------------------------------------------------------------
ROM:8C015098
ROM:8C015098 loc_8C015098: ; CODE XREF: sub_8C014FDC+98j
ROM:8C015098 mov #0, r0
ROM:8C01509A mov.l @(h'70,pc), r1 ; [8C01510C] = unk_8C0F5550
ROM:8C01509C mov.l r0, @r1
ROM:8C01509E bra loc_8C0150AC
ROM:8C0150A0 nop
ROM:8C0150A2 ; ---------------------------------------------------------------------------
ROM:8C0150A2
ROM:8C0150A2 loc_8C0150A2: ; CODE XREF: sub_8C014FDC+9Aj
ROM:8C0150A2 mov #-1, r0
ROM:8C0150A4 add #8, r15
ROM:8C0150A6 lds.l @r15+, pr
ROM:8C0150A8 rts
ROM:8C0150AA nop
ROM:8C0150AC ; ------------------------------------------------------------------------
</div>
после проверки broadcast, на выходе получаем значение 0x31 т.е. дрим системы PAL.
При этом игра запускается в режиме PAL 50Гц.
Но если подменить это значение на 0x30, то этим мы скажем, что типа дрим то NTSC-шный;)
и игра запустится в NTCS режиме, а для паловского дрима сигнал станет PAL 60Гц