Announcement

Collapse
No announcement yet.

Teaching young dogs new tricks

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • #31
    Originally posted by OldSchoolGamer
    I believe it is:

    PAIAZA

    You can use the converter in FCEUX or you can use the stand alone program "Game Genie Code Converter 4.0" that can be found in the download's section.
    You need a debugger to find out what reads or writes to 000052. You can't convert RAM addresses to game genie.
    Last edited by nolberto82; 07-15-2012, 04:34:47 AM.

    Comment


    • #32
      Originally posted by OldSchoolGamer View Post
      I believe it is:

      PAIAZA

      You can use the converter in FCEUX or you can use the stand alone program "Game Genie Code Converter 4.0" that can be found in the download's section.


      nope not right ram codes cannot be encrypted in to Game Genie codes so i'm going to show you how with a simple write code the game is Lone Ranger the code Infinite Bullets
      so first open your debbuger then click add in the breakpoints secion


      then in the first address box put down the par code 0052 then check the box next to write then OK
      fire a bullet game play should stop to this

      now that you want to do for this code is change the DEC to an LDA
      so open up your Game Genie Decoder/Encoder tool
      for your Address box you put the Address of the Command in this case
      Af50
      the Compare Box what ever the OP Code originally was in this case (code without compares are six letter long with 8)
      C6
      Value Box will be what you want to change it to in this case
      A5

      RIP MOM 6-27-52 - 12-25-10

      Comment


      • #33
        To better understand the difference between ROM and RAM, consider this.

        Imagine you have a set of instructions for a drawing. You go through the instructions and draw the scene. You want to change a small section of the drawing, so you erase it and redraw it your way. You decide that this change should be available the next time you draw the scene, so you alter the instructions.

        A system's RAM is like the drawing. When you find a RAM code, you alter the "drawing" of the game, such as how many lives you have or what weapons you possess. This area of a system is normally what a Pro Action Replay (or PAR) can alter on real game hardware, thus a lot of people call them PAR codes even when a PAR might not have been available for that system.

        A system's ROM, or rather, what comes as the game itself, is like the instructions. When you alter the ROM, you change the instructions of the game to alter the "drawing" how you see fit. Because you're telling the game how to "draw," these codes are generally more advanced but produce much better effects. ROM is altered many ways, such as the Game Genie on real hardware. The GG watches the instructions as they travel from the cart to the system, and changes them accordingly. On computers, ROM is either altered within the emulator manually or with GG codes, or by patching the ROM file.

        Because the GG only alters the instructions is why you can't directly convert a RAM code. A RAM code only knows where the game stores the number of lives for example, so you have to find the instruction that lowers the lives and change it to do nothing. Or change the instruction to increase your lives. Or increase your coins. Or a multitude of other things. This is what makes learning ASM and doing ROM codes fun as hell, so you can alter the instructions instead of just the drawing.
        Please put all complaints in writing and submit them here.

        Above link not working? Try here.

        Comment


        • #34
          Just remember that RAM is like a grid of "storage" spots in memory where pretty much every thing you do is temporarily stored. As you can see in the pictures below (selected in blue), $0052 is just one of many addresses that sit right next to it that all run 0-F (left to right). You can see that the code below modifies $0052 would decrease its value by 1 (DEC).

          RAM:


          ROM:


          Now once you understand the concept of RAM being different from ROM (RAM is only a spot for ROM to write to and read from, and ROM is the actual game code that the programmer wrote), then you should know that only ROM codes can be converted into GG codes. With this being said, the address selected in red would be the address you use to convert (along with its default value, and the new value you want to change it to).
          Last edited by Abystus; 07-15-2012, 01:47:12 PM.
          Not taking any requests at this time.

          Bored? Watch some of my hacks here.

          Comment


          • #35
            Originally posted by rimsky82 View Post
            This is what makes learning ASM and doing ROM codes fun as hell, so you can alter the instructions instead of just the drawing.
            Well put rimsky.
            The Code Hut: http://codehut.gshi.org/

            Comment


            • #36
              Originally posted by Meijin View Post
              I don't get it, how do you turn this 000052 01 into GG?

              one way to get the game genie code for invincibility is use a read breakpoint on the raw 0052
              the thing you want to do here is change the BEQ to a BNE effectively running the timer constantly
              ESVTKPEY

              RIP MOM 6-27-52 - 12-25-10

              Comment


              • #37
                Originally posted by Hybrid View Post
                one way to get the game genie code for invincibility is use a read breakpoint on the raw 0052
                the thing you want to do here is change the BEQ to a BNE effectively running the timer constantly
                ESVTKPEY
                Can you explain when using 'write' and when using 'read' on breakpoints? I've always messed around with 'write' to make my codes and never touched 'read' before.

                Speak of the above example, I just thought that when we do a breakpoint, the top ROM address we receive on debugger is always the address that we will manipulate ( in this case E9E2 ), not the second ( in this case E9E4 ).
                Last edited by Meijin; 07-15-2012, 11:25:19 PM.

                Comment


                • #38
                  It sounds like you're going by a method you learned from a guide or something. If you know how to actually interpret what task a set of instructions are doing, you have more options available to you. In the situation you described, it might not matter too much how you go about it, as preventing the game from storing the decremented health/lives (write) has the same effect as bypassing the decrement/store (read or write).

                  For a slightly hypothetical example, say you have a game that compiles a "percent complete" by checking a set of flags loaded in RAM, and this percentage determines the quality of the ending you get. The percentage isn't a value that's saved, the flags aren't contiguous, and they're written by individual events throughout the game rather than as a single batch. You could slowly work out how to overlay each necessary flag in RAM, but it's easier to find the routine that reads them and computes the percentage. Do a break-point on read, evaluate the routine, and modify its end result to be 100% regardless of the actual value. If you did a break-point on write for one of the flags, you might a find a general purpose routine for setting them, if you're lucky, but there might not be an easy way to force it to write all of them unless you know what "all of them" is.
                  Last edited by Pyriel; 07-16-2012, 07:29:30 AM.

                  Comment


                  • #39
                    Originally posted by Hybrid View Post
                    one way to get the game genie code for invincibility is use a read breakpoint on the raw 0052
                    the thing you want to do here is change the BEQ to a BNE effectively running the timer constantly
                    ESVTKPEY
                    Wouldn't that have the side effect of making it not work then by doing the normal requirements? I know nothing of the older systems ASM, but you'd want an unconditional branch that always goes there to always execute the code if it has one, whatever it is.
                    July 7, 2019

                    https://www.4shared.com/s/fLf6qQ66Zee
                    https://www.sendspace.com/file/jvsdbd

                    Comment


                    • #40
                      Originally posted by bungholio
                      Wouldn't that have the side effect of making it not work then by doing the normal requirements? I know nothing of the older systems ASM, but you'd want an unconditional branch that always goes there to always execute the code if it has one, whatever it is.
                      The NES doesn't have unconditional branches. The BNE won't branch until the timer is decreased then the next time it comes around it branches skipping the timer decrease.
                      Last edited by nolberto82; 07-16-2012, 09:13:52 AM.

                      Comment


                      • #41
                        To elaborate a bit, Bung, think of it as the PS2/MIPS instructions, just with an inherent zero/$0 comparison. What's actually happening is that many operations (arithmetic like ADDs and usually Loads) change the value of a set of condition code flags in a special register. One of the flags is "zero", so if you load a value onto a register, you can check it for zero by simply evaluating the zero flag. On the NES, BEQ and BNE appear to do exactly that.
                        Last edited by Pyriel; 07-16-2012, 08:38:02 AM.

                        Comment


                        • #42
                          nol is right to say the nes doesn't have unconditional branches, which is rather annoying, but I agree that changing a bne (read: branch if not equal) to a beq (read: branch if equal), or vice versa, is not always the best option. Something I like to do, since there are no unconditional branches, is change the length of the branch to 0. That way, regardless of the condition, the program continues on the next line. That's a good way to never branch, however it's not so simple to always branch.

                          To always branch, you could try loading memory from a different address that will always satisfy the condition. Unfortunately, there's really no way unless you watch the memory through the entire game to know if it's a static value.

                          Pyriel, I believe that is accurate. The zero flag is manipulated by many operations such as inc, dec, ld?, and often cmp.
                          Please put all complaints in writing and submit them here.

                          Above link not working? Try here.

                          Comment


                          • #43
                            The opcode was changed from BEQ to BNE. In this particular case BNE is the best option since it will keep the value at 0xFF. In some games changing the length of the branch is not always ideal since you might still get hurt when the timer reaches 0. The way Hybrid changed the opcode kind of works like an unconditional branch.
                            Last edited by nolberto82; 07-16-2012, 01:27:16 PM.

                            Comment


                            • #44
                              In this situation you're probably right, but I'm only offering alternatives that might work better in other cases.
                              Please put all complaints in writing and submit them here.

                              Above link not working? Try here.

                              Comment


                              • #45
                                Probably? It is the best option for this situation never leave things to chance. You can use BMI and get the same results

                                Comment

                                Working...
                                X