• Rise from your gwave!

Sega Nomad+Action Replay Country Codes

Discussion in 'Genesis/Mega Drive' started by DarkForce, Sep 4, 2001.

  1. DarkForce

    DarkForce New Member

    I've just got my nomad, and been playing some one my old games( they all look fab!) problem is some games like PS4, Shining Force 1/2 :(( , Landstalker and a few others won't play..I get the Pal only message crap...

    I have founda few codes for my action replay that let you play different games on different machines...2 that may don't..does anyone have the anti-country lockout codes for these games? I will get the system converted, but I would rather just use the AR to play these games...

    I also have game genie..any old genesis AR codes sites or help please?
     
  2. 3rdman

    3rdman New Member

    http://www.gamegenie.com/cheats/index.shtml

    Does that help?

    My apologies DarkForce. Hope you find what you're looking for.

    (Edited by 3rdman at 10:46 pm on Sep. 4, 2001)
     
  3. DarkForce

    DarkForce New Member

    I'm after any GG/AR country codes..that site just carries cheat codes( inf level,life,gold etc..)

    Thanks anyway....
     
  4. ExCyber

    ExCyber Staff Member

    I could probably find the locations to be patched. 2 questions:

    1) What is the territory of the Nomad?

    2) Which of the games do you most want to play? I'll start on PS4 for now.
     
  5. ExCyber

    ExCyber Staff Member

    Silly me, I thought it wouldn't be difficult to find a dump of the PAL PS4... moving on to Shining Force 2 :)
     
  6. ExCyber

    ExCyber Staff Member

    Well, this is what I found. This patch probably makes the game run as though the machine is PAL*, so it might cause display glitches. I didn't see any in the emulators though. I think I have the PAR code format right, but I couldn't find a real description, only a bunch of codes. Let me know how this works: 007ED-46000

    Edit:

    * By "run as though the machine is PAL", I mean that if it was meant to do something differently on NTSC/60Hz systems, it probably won't be doing so. AFAIK it's impossible for software to change the VDP between NTSC and PAL timings on Genesis/Megadrive hardware. However, the program might still try to take advantage of the PAL timing (you know, the kind a 60Hz system doesn't have :)), causing display glitches.

    Edit again: editing out a previous edit due to a stupid error

    (Edited by ExCyber at 8:05 am on Sep. 11, 2001)

    (Edited by ExCyber at 8:12 am on Sep. 11, 2001)
     
  7. DarkForce

    DarkForce New Member

    hey thanks man, i really appreciate someone doing that for me :)) how did you do it? I have most of the roms i play in cart format..and pretty comfortable with AR MD roms format...any tutorials so i can help myself I'll try that code now

    I have

    Shining Force 1 PAL

    Shining Force 2 PAL

    Phantasy Star 4 PAL

    Landstalker PAL

    All on a USA Nomad

    thanks again dude!
     
  8. DarkForce

    DarkForce New Member

    IT WORKS!!!!!!!!!!!!!!!!!!!!!!!!

    Ex Cyber you are officialy the coolest dude I know ( for today anyway)

    thanks again!!!!!!!!! :))
     
  9. ExCyber

    ExCyber Staff Member

    Landstalker: 11EA7-84E71

    Shining Force: 02C02-04E71

    Phantasy Star 4: 00040-66006

    Don't be too surprised if the Shining Force and PS4 codes don't work. In particular, PS4 might pop up the Red Screen of Death. I couldn't find PAL dumps of those so I used the US (actually, the PS4 one may or may not be the US version, but it is NTSC and English) ones, hoping that the boot code is the same except for the compared value (this was true for Landstalker at least, so there is some hope).

    As for how I do it, using Shining Force as an example:

    First, find a ROM image of the game to patch. Then use a tool like GROM (a genesis ROM image manipulation tool by Bart Trzynadlowski) to convert the ROM to raw binary (.bin) format. Then disassemble it (I use IRAPC ).

    Here's where the fun part begins :).

    Search the assembly listing for A10001. This is the address of the Genesis/MD version register. If using IRAPC, this will match a table of constants at the beginning of the file (this is because IRA is intended to allow you to edit the assembly listing and reassemble without breaking anything). The statement looks like this (undoubtedly Ikon will mangle the spacing):

    EXT_0C7A EQU $A10001

    In this case, EXT_0C7A is the label for A10001, so search the file for EXT_0C7A. On Shining Force, this turns up the following routine (Ikon could probably use a code/monospace tag...):

    LAB_155C:

    move.b EXT_0C7A, d0 ;02C014: 103900A10001

    andi.b #$C0, d0 ;02C01A: 020000C0

    cmp.b d0,d1 ;02C01E: B200

    bne.s LAB_155D ;02C020: 6602

    rts ;02C022: 4E75

    This is the routine that checks the version register. The upper two bits of the version register are what matters here, so everything but those bits are zeroed out (this is what andi.b #$C0,d0 does). In this case, you don't know what value the version register is being compared to, because it's loaded into d1 before the routine is called, but some games do load this value in the check routine. Anyway, the critical instruction here is the bne.s instruction. bne stands for "branch if not equal", and it jumps to another part of the program if the version register didn't match the desired value (determined with the cmp.b instruction). Since that's probably the "wrong version" code, you don't want that branch to happen, ever. So open up a hex editor, go to address 02C020, and change 6602 to 4E71. 4E71 is the 68000 "no operation" instruction, so that branch can now never happen.

    Other games might use beq (branch if equal) instead of bne. In this case, you always want the branch to happen. A beq instruction will always start with the byte 67. Changing this to 60 will make the branch unconditional, so it will always be taken.

    Yet other games might not use the cmp instruction, using something like btst instead. I don't want to even try to cover every possibility here though, and regardless of which instruction is used to do the actual comparison, it's still the branch instruction that matters (though if cmp isn't being used, bne and beq may lose their equal/not equal connotation and you might need to reverse the patch values).

    Now load up an emulator (I use KGen98), switch to the "wrong" country version, load the ROM and hope that it works :).

    The PAR code format is pretty simple. There are 24 bits for the address, and 16 bits for the desired replacement data, written in hexadecimal. For whatever reason, Datel decided to seperate the address/data pair into two halves rather than seperate the address from the data, so the code for SF is:

    Address: 02C020

    Data: 4E71

    PAR Code: 02C02-04E71

    There are two things that I know of that can complicate this process: PAL/NTSC-specific graphics optimizations, and a checksum routine. Games with PAL/NTSC-specific graphics optimizations (such as Golden Axe 3) will cause problems because the game program will try to use invalid timings for graphics. A checksum routine (which can be found on e.g. Mega Man: The Wily Wars) will cause the game to not run, usually making it display a solid red screen instead. Incidentally, GA3 and MM:WW are the other two games I've found patches for, and you should probably thank Arakon for ordering me to do so :). GA3 reads and compares the version register multiple times, so I just tried patching different comparison routines until a combination worked. Removing the internal checksum from MM:WW involved going through it with a debugger, which I don't feel like going into right now...

    Hope this helps :).

    Edit: added note about games not using cmp.

    (Edited by ExCyber at 6:36 am on Sep. 15, 2001)
     
  10. DarkForce

    DarkForce New Member

    Hmmmm interetsting ( in other words.. I need to do a bit of work)

    I am in your debt, thank you again :)

    If you stumble across the correct does for PS4 ( I haven't tried it may work..) let me know, however you've been more tha helpful :)
     
  11. RadSil

    RadSil New Member

    Thanks ExCyber for the interesting thing of the day :)

    As far as what you said about the "Red Screen of Death", can't that be avoided/corrected with a master code? (to correct the checksum...?)
     
  12. ExCyber

    ExCyber Staff Member

    Yeah, I'm pretty sure that's the purpose of most/all of the "master codes". However, it's not as simple as fixing the checksum in the header, because that's not what's used by the routine. What I did for Wily Wars is to go through it with a debugger and patch the jump to the red screen/lockup routine. I can't do that without having a version of the ROM that has the checksum routine (the two versions of PS4 I could find both lack it), so I can't come up with the code :(.
     

Share This Page