|
Yes, it is possible, but not automatically. To play in all regions, you need the area codes "JTUE". After that, you have to add the area strings, "For JAPAN." etc.
These strings have the following format:
$a00e, $0009, "For REGION.". Together this must make 32 bytes, pad the string with spaces as necessary. (Those hex words in front of the text strings actually SH2 instructions to jump over the text string.)
Now, to insert additional area strings, you must write over some data. Fortunately, most games have a piece of standard initialisation code that immediately follows the strings. The length of this code is just enough to insert the new strings and add a short stub.
The beautiful part of this standard piece of code (SYS_INIT.O, if you have the SGL kit) is that it is completely position-independent! So what you do, is find an empty area after the main IP, insert the SYS_INIT code there and append a jump back to the game's own IP code. So after the region strings you have this:
Code:
| | mov.l =$relocated_code, r0
jmp @r0
nop |
At some suitable place later on, you have
Code:
| | incbin "sysinit.bin"
mov.l =$6002ea0, r0
jmp @r0
nop |
$6002ea0 is the address of the start of the game's own IP.
Provided the game uses the standard init code, the main problem becomes finding a spot with enough free space (140 bytes). To help with the offset calculations, remember that the whole first 32(?) sectors are loaded into memory beginning from $6002000.
Note that these calculations are for a game with only one region originally! |