Announcement

Collapse
No announcement yet.

Printing information to screen

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

  • Printing information to screen

    I've scene people do hacks like this on other consoles (N64 to be exact).
    Like somehow forcing text to display on the screen to display info (DMA pointers, values, etc).
    I've done simplier hacks in assembly before, but im wondering how these types of hacks are done?
    Would this be incredibly advanced in ASM?
    They would be really useful for me.

    Also, is it possible to assemble C code into MIPS R3000/R5900?
    I've heard of people doing their ASM hacking in a programming language and then just assembling their code into the console ASM?
    Im way more familiar with C than I am with MIPS, so that would be useful to me if im on the right track...
    Last edited by CLH; 02-11-2010, 12:21:03 AM.

  • #2
    I remember GTLCPimp did some stuff with screen printing for PS2. What system did you hope to perform these hacks for?
    I may be lazy, but I can...zzzZZZzzzZZZzzzZZZ...

    Comment


    • #3
      I dunno if this is the same, but I've done stuff like this with Animal Crossing for the Wii/DS

      It actually isn't that hard if you just modify existing text. For my games, for example I wanted to see the value stored in a certain place

      I used an ASM routine to load the value from that address, convert it from hexadecimal to ASCII, find where the text is stored, and replace the text with the ASCII value (or whatever way text is handled in the game).
      To actually make text appear on screen that isn't already there, that would be harder.
      Last edited by dragonboy269; 02-16-2010, 03:33:41 PM.
      I only hack games that I like >:I
      And I ONLY use assembly O_o XD

      Comment


      • #4
        Originally posted by Lazy Bastard View Post
        I remember GTLCPimp did some stuff with screen printing for PS2. What system did you hope to perform these hacks for?
        PS2 actually.
        Is that guy a active member here?

        Originally posted by dragonboy269 View Post
        I dunno if this is the same, but I've done stuff like this with Animal Crossing for the Wii/DS

        It actually isn't that hard if you just modify existing text. For my games, for example I wanted to see the value stored in a certain place

        I used an ASM routine to load the value from that address, convert it from hexadecimal to ASCII, find where the text is stored, and replace the text with the ASCII value (or whatever way text is handled in the game).
        To actually make text appear on screen that isn't already there, that would be harder.
        Unfortunately, my game has no text on the HUD that isn't a image.
        (well, it does, but the one peice of text that is actually there can only use about 6 characters.)
        So I will have to take the long road and try to force the game to write to the screen.
        But I do know the hex value for each individual character in the font table. (sucks it didn't use ascii, took forever to find :P )


        Also here is a example of someone doing what im wanting to do.
        He didn't replace text, but rather forced the game to display it.
        http://www.youtube.com/watch?v=fqvIw3Abd5k
        Last edited by CLH; 02-21-2010, 08:33:03 PM.

        Comment


        • #5
          Yes, though he's been quite busy lately. I'll link him to this thread.
          I may be lazy, but I can...zzzZZZzzzZZZzzzZZZ...

          Comment


          • #6
            Originally posted by CLH View Post
            PS2 actually.

            Also here is a example of someone doing what im wanting to do.
            He didn't replace text, but rather forced the game to display it.
            http://www.youtube.com/watch?v=fqvIw3Abd5k
            From the way the video looks it seems like he is using an ASM code to access the game's pre-existing screen print functions. If you wish to accomplish like that you must first locate the game's screen printing functions and figure out how it manipulates the arguments given, can't really explain much there other than that method is game specific and would be more stable for the game. However if you want to force the output your own method so it has the ability to work with more than just that specific game, then you must write a stand alone application (yes you can use C as long as you have the tool chains and a Linux emulator if you are a Win32 user). Your application must have it's own stand alone graphics library implemented so that it can print to the screen by itself without accessing any IOP module to do so (see the Graph example for drawing boxes found in the tool chain download), and when you launch the game from your application you must force a hook from either the game or Kernel (preferable the game since it is more stable and has a better chance of returning the game to it's normal state than Kernel hooking an application). Granted if you want the full power of the application you must set it to loop within itself, pausing the game play, other wise it will run extremely slow (depending on how much drawing is done on the screen).

            Here is a video of the work I produced for the PS2 console:
            http://www.youtube.com/watch?v=EPXUgznS-Tc
            (Since it utilizes the controller for user input, it must be configured for each game it operates under.)
            Last edited by Gtlcpimp; 02-22-2010, 01:24:04 PM.

            Comment


            • #7
              However if you want to force the output your own method so it has the ability to work with more than just that specific game, then you must write a stand alone application (yes you can use C as long as you have the tool chains and a Linux emulator if you are a Win32 user). Your application must have it's own stand alone graphics library implemented so that it can print to the screen by itself without accessing any IOP module to do so (see the Graph example for drawing boxes found in the tool chain download), and when you launch the game from your application you must force a hook from either the game or Kernel (preferable the game since it is more stable and has a better chance of returning the game to it's normal state than Kernel hooking an application).
              Incidentally, if you produce such a module, it will be quite helpful for Artemis
              I may be lazy, but I can...zzzZZZzzzZZZzzzZZZ...

              Comment


              • #8
                Sooner or later I will completely finish the sub-project, however here is some improvement. Completely worked out the kernel hooking to be 100% stable, and here is a working example (attached is 'kmod_IG-Print.elf" should work with every game, if not let me know). It displays a white strip on the top of the screen with a black square that moves across from left to right at all times.
                Attached Files

                Comment


                • #9
                  Wow, awesome!

                  That's HUGE progress.
                  I may be lazy, but I can...zzzZZZzzzZZZzzzZZZ...

                  Comment


                  • #10
                    Egh... This next attachment, don't expect it to be a perfect worker.. I'm only uploading it to take a poll on:

                    1) How many games contain the same value it scans to find the "Joker"
                    2) How many games it actually works with 70%+ without freezing (even if it only works in the menus of the game let me know)

                    How to use it = Stick your game in your ps2, then launch the ELF from any ELF launcher of your choice (I use uLE4.12)
                    If it is working, you will see a red bar at the top of the screen. At first it will fill in with blue, this is the delay bar. Once it completely fills, it turns into a sky blue color, and fills in with the blue again. This is the progress of the scan for the "Joker". Once it all disappears, that means it detected it. If it keeps emptying and re-filling, that means it cannot find it. However if it detects it, and it all disappears, use the following keys:

                    L2 + R2 = Display the "Joker" and the value of the controller input
                    L1 + R1 = Hide display
                    Attached Files
                    Last edited by Gtlcpimp; 02-27-2010, 12:34:23 AM.

                    Comment


                    • #11
                      OK, I've done some testing with the first ELF (kmod_IG-Print).

                      Using FMCB to launch kmod_IG-Print, I tried the following games:

                      Finding Nemo, Need For Speed: Hot Pursuit 2, GTA3, and Splinter Cell: Pandora Tomorrow

                      ...and none of them worked (stuck on a black screen).

                      However, using FMCB to launch uLE, then using uLE to launch your ELF, worked fine for GTA3 and Splinter Cell (the other two were still stuck on a black screen). It would seem that it's relying on leftover modules from uLE (things that aren't being cleared out when uLE launches the ELF and closes itself). I remember earlier versions of PS2rd (back when it was simply artemis.elf) had that issue, or something similar, so it might be worth asking jimmi and/or misfire about, if you can't isolate these modules.

                      That said, awesome work!

                      I'll try to test the other ELF later, and I'll give you some more results from other games for the first one.
                      I may be lazy, but I can...zzzZZZzzzZZZzzzZZZ...

                      Comment


                      • #12
                        Oh yea, I forgot to have it load any modules for the application to even work, so go ahead and just load it with uLE for the testing for now...

                        Comment


                        • #13
                          OK.
                          I may be lazy, but I can...zzzZZZzzzZZZzzzZZZ...

                          Comment


                          • #14
                            Originally posted by Gtlcpimp View Post
                            From the way the video looks it seems like he is using an ASM code to access the game's pre-existing screen print functions. If you wish to accomplish like that you must first locate the game's screen printing functions and figure out how it manipulates the arguments given, can't really explain much there other than that method is game specific and would be more stable for the game.
                            Considering the state of PS2 debugging, im sure im screwed by this route.
                            Damn, I might look into programming on PS2 then.

                            Thanks
                            Btw, does this site seems to go down randomly from time-to-time?
                            Everytime I tried to come here I would get server errors most of the time.

                            Comment


                            • #15
                              whats the value its using to find the joker .

                              FFFF7900 (Pad1 values)
                              FFFF7300

                              i cant remember what controlls the 7900/7300 part but think its the type of controller . also for Pad2 games its 0000FFFF
                              so are u scannig for the pad address directly or u scanning for the Padread function cuz if u are looking for pad read function i posted some info in the IGmassdump thread that could be usefull

                              also heres some patters that we have used for a long time

                              Patterns (In Ps2Dis Press Ctrl+F and one of the below patterns in) (Pad Patterns)
                              00 00 00 5a 00 00 00 00 00 00 00 00 00 01 ff ff (8 addresses up from what this brings u to is the Joker Address)
                              Or
                              00 00 00 5a 00 00 ff ff ff ff 00 00 (8 addresses up from what this brings u to is the Joker Address)

                              Pattern (In Ps2Dis Press Ctrl+F and put the below patterns in) (Pad2)
                              01 16 12 04 01 00 00 00 (8 addresses Down from what this brings u to is the Joker Address)

                              For If you like what i do

                              Comment

                              Working...
                              X