Page 1 of 3 123 LastLast
Results 1 to 10 of 24

Thread: Project Artemis - Specifications

  1. #1
    Join Date
    Jul 1999
    Posts
    7,105

    Default Project Artemis - Specifications

    Though we will refer to these as specifications, they are really aspirations. That said, enjoy reading our dreams


    ************************************************
    BAREBONES (v1.0)
    ************************************************

    - ELF, bootable via CDROM (assuming it's run on a bootable disc or via a swap method/mod chip)

    - Able to initialize games (swap in properly)

    - Able to dump memory during game play, repeatedly, without crashing the game

    - Able to dump either via the crossover cable directly to the PC, or to USB flash drive on PS2, or to memory card on PS2

    - If on PC, we can use 3rd party compare utilities. If on PS2, there must be comparison functions built-in

    - At boot, must have the ability to add, edit, save, and choose which codes will be active during gameplay

    - If Artemis is a remote debugger, we must be able to enable codes on the fly during gameplay, from the PC, so as to test results. If Artemis is console-side, we must be able to bring up a screen in-game, and choose results to enable, at a minimum.


    ************************************************** ***
    EVENTUAL (v2.0)
    ************************************************** ***

    If you have any questions, or something seems unspecific, please feel free to ask us whatever you like.

    To simplify these specifications, we will refer to the user as a male (ie, "he", "him", "his", etc).

    We will also generally refer to pressing buttons on the PlayStation 2 controller as such: "If the user presses X", "If he then presses Start", or "He will then either press Select, or R1...". We will occasionally specify that we're referring to the controller, when we feel it may be confusing otherwise.

    For a good example of a basic structure similar to our project goal, see the GameShark Pro for the original Playstation.

    __________________________________________________ _

    Upon final completion, this application will be able to read and write to a USB flash drive (ie "thumb drive", "pen drive", etc), read and write to the PS2 memory, and perform constant write operations so as to essentially keep the values of certain addresses constant. This has been performed by the Action Replay, GameShark, and CodeBreaker, as well as a homebrew PS2 cheat application called Cosmic Cheat, among others. The application will be able to perform dumps of the PS2's memory, to a USB flash drive, and compare one memory dump to another, outputting addresses whose values have changed to a GUI, which will be invoked by a preset button combination. These addresses and values will, unless otherwise specified, be displayed in raw hexadecimal.

    The program will be bootable via CDROM (assuming it's run on a bootable disc or via a swap method/mod chip).

    When the disc is inserted into the PS2, and the PS2 is started up, the application will load a GUI (Graphical User Interface), with a basic menu. This menu will consist of the following choices:

    [Start Game]
    [Options]


    ---[Start Game] will consist of the following sub-choices:

    ------[Start Game]
    ------[Choose Codes]


    ------[Choose Codes] will consist of a list of games (which will be user-modifiable - able to be renamed, deleted, and so forth), each of which will consist of a list of codes (addresses to which a chosen value will be written to constantly). It will also contain a choice, at the top of the list of games, called [Add A Game], which will allow a user to add a game to the list. Inside each game choice will be a choice, at the top of all codes present: [Add A Code], which will allow a user to add a code to the list within that game.


    ---[Options] will consist of a few aesthetic and theme-related options, to be ironed out and detailed at a later time. It will also include a menu to allow the user to modify the button combination used to invoke the application's in-game GUI. These are of little consequence now.



    _______________________________________

    Here's an example (note that before a user can see any sub-choices, he must first select one of the choices one layer above it):

    ---Start Game

    ------Start Game

    ------Choose Codes

    ---------Add A Game
    ---------Game #1
    ------------Add A Code
    ------------Code #1
    ------------Code #2
    ------------Code #3
    ---------Game #2
    ---------Game #3

    ---Options
    ------Option #1
    ------Option #2
    ------Option #3

    __________________________________________

    Games and codes will be alphabetized automatically.

    The user will be able to toggle each code on or off, the default being off.

    When he is finished selecting which codes will be enabled (if any will be enabled at all), he will press the Start button, which will bring him back to the menu that includes [Start Game] and [Choose Codes]. At this point, he can either select [Choose Codes] again and change which codes will be enabled, or select [Start Game] to start his game with the selected codes enabled. If he chooses [Start Game], the disc will stop spinning, he will open his PS2 and replace the application's disc with his game disc, and close the PS2. At this point, he will be required to press a button to initialize the game.

    If the user does not select any codes to be enabled, and instead immediately selects [Start Game], the disc will stop spinning, and the same sequence of events that occurs above will occur.

    Either way, a part of the application will stay resident in the PS2's memory. Once the game has initialized, the user will be able to, at any time, press a combination of buttons on the PS2 controller to enter a GUI. This combination will be, by default, something like "R2+R1+L2+L1+Start+Select+X", but the user will be able to modify it by editing a text file, similar to an *.ini file, on his USB flash drive.

    **It should be noted, if it hasn't been inferred already, that all saved options, as well as codes, will be saved to the user's USB flash drive. The application's disc may eventually come equipped with a good starting list of codes for many games, but that will come later.**

    When the user presses the button combination, the PS2 will freeze, the application's in-game GUI will come up, and the user will choose from one of several options, as follow:


    [Return To Game]
    [Search]
    [Screen Capture]
    [Turn Codes Off] (if codes are off already, it will be called [Turn Codes On])

    This menu will be referred to in this specification sheet as the in-game GUI main menu.

    **Note that the [Screen Capture] function is optional, if it's feasible to create. If not, we'll handle it later, as it's not essential. [Screen Capture] would save a snapshot of the VRAM (essentially, a screen capture) to the USB flash drive.**

    [Return To Game] will, obviously, return the user to the game.



    Before detailing the [Search] sub-menu, I'll explain a few basics about the desired functionality. If this seems confusing, it will become more clear as you read on.

    The [Search] sub-menu will contain a group of functions that will allow the user to take memory dumps, and compare them with one another, outputting the differences to files on the USB flash drive, which will be viewable using this application. For example, the initial dump may be named Initial.dmp, the first search may be named Search1.dmp, and so forth. After taking the initial dump, and running a search, the second search will be performed on the results of the first search, the third search will be performed on the results of the second search, and so forth. Each search will be performed only on the addresses which matched the criteria of the previous searches. Therefore, for the most part, each search will be performed on a smaller number of addresses.

    From here on out, the phrase "the last dump" will refer to the initial dump if no searches have been made, or the results of the most recent search.

    As these memory dumps will be fairly large (16MB or more apiece), we'll recommend a minimum of 256 MB USB flash drive storage capacity. These can be found for around $20 US, with proper shopping.

    After the user runs any search, he will be returned to the [Search] submenu.

    Continuing on...

    [Search] will bring the user to a sub-menu, as follows:

    __________________________________________________ _______________

    ---[Address Range]
    ---[Compare To x]
    ---[Initial Dump]
    ---[Specific Value Search]
    ---[Value Range Search]
    ---[Equal To Last]
    ---[Different To Last]
    ---[Different To Last By (value)]
    ---[Different To Last By At Least (value)]
    ---[Different To Last By At Most (value)]
    ---[Different To (value)]
    ---[Greater Than Last]
    ---[Greater Than Last By (value)]
    ---[Greater Than Last By At Least (value)]
    ---[Greater Than Last By At Most (value)]
    ---[Greater Than (value)]
    ---[Less Than Last]
    ---[Less Than Last By (value)]
    ---[Less Than Last By At Least (value)]
    ---[Less Than Last By At Most (value)]
    ---[Less Than (value)]
    ---[I Forgot...]
    ---[Step Backward]
    ---[View Results]

    Before an [Initial Dump] has been made, only the choices [Address Range] and [Initial Dump] will be available; the rest will be "grayed out", and inaccessible.

    After the initial dump has been made, "Initial Dump" will be displayed in the top right corner of the screen, when the user is in the in-game GUI (not during gameplay; just in the in-game GUI). After a search has been run, this will change to "Search # 1"; after another search, it will change to "Search #2", and so forth. This will be referred to, in this spec sheet, as the "dump counter".

    [Address Range] will bring the user to a screen in which he will enter an address range, or several ranges, by using the Up/Down buttons on the controller to change each digit, the left/right buttons to move back and forth between digits, and the Select button to move to the next address range. Each address range will consist of a starting address, a dash [-], and an ending address. If the user decides to enter an address range, all searches performed thereafter (or until the user changes/removes the address range) will be performed on that address range. If the user selects two or more address ranges (up to four), the application will, thereafter (or until the user changes/removes the address ranges), perform all searches within the specified ranges of memory. Once the user has chosen his address range/ranges, he will press Start to accept the changes, and be sent back to the Search sub-menu.

    [Compare To x], where 'x' is a number specified by the user corresponding to a set of search results (the 3rd set of results being 3, and so on), will allow the user to determine which set of search results to perform comparative searches to (if the user selects 3, Different To Last will become Different to Search 3, Greater Than Last will become Greater Than Search 3, and so on). The default will be 'Last Dump'. Of course, searches that are run against values directly (Different To (value), etc) will not be affected.

    [Initial Dump] will, as the name implies, make an initial memory dump. If an address range (or a set of multiple address ranges) has been chosen, the initial dump will be a complete dump of the area (or areas) of memory specified; otherwise, the entire memory will be dumped. If [Initial Dump] is chosen after searches have already been run, the message "Are you sure? This will erase all previous searches!" will be displayed, with the choices "Yes" and "No", the default being "No". Obviously, if the user chooses "Yes", as the message implies, all previous searches and the initial dump will be erased, and a new initial dump will be taken.

    [Specific Value Search] will bring the user to a screen in which he will enter a value, or several values, by using the up/down buttons on the controller to change each digit, the left/right buttons to move back and forth between digits, and the Select button to move to the next value. The value (or values) he enters will be in decimal by default. If he presses R2, format will change to hexadecimal - this will be noted at the bottom of the screen when he's in the Specific Value Search menu. Once he's entered a number, or multiple numbers (up to four), he will press X on the controller (a note at the bottom of the screen will instruct him to do so), and the application will search through its last memory dump for any addresses with the value(s) he specified. He will then return to the game, and at some point re-enter the GUI, and if he desires, repeat the process to narrow down the results (ie, if he searched for "FFFF" the first time, the application would search through its last memory dump, and return only addresses whose values were FFFF; if he then searched for 10FB, the application would search within the results of this last search for addresses whose values have changed to 10FB. If he searched for FFFF, FOB4, and 102F, the application would search through its last memory dump for addresses with any of those values; if he then searched for FFEC, and AABD, the application would then search, within the results of this last search, for any addresses with these newly entered values).

    [Value Range Search] will bring the user to a screen in which he will enter a value range, or several ranges, by using the up/down buttons on the controller to change each digit, the left/right buttons to move back and forth between digits, and the Select button to move to the next value range. Each value range will consist of a starting value, a dash [-], and an ending value. Once the user has chosen his value range/ranges, he will press X on the controller to run the search. As with Specific Value Search, the values will be in decimal by default, but the user will be able to change this to hexadecimal by pressing R2.

    [Equal To Last] will perform another memory dump, and compare the last one with this new one, narrowing the search down to addresses whose values have not changed since the last dump.

    [Different To Last] will perform another memory dump, and compare the last one with this new one, narrowing the search down to addresses whose values have changed since the last dump.

    [Different To Last By (value)] will perform another memory dump, and compare the last one with this new one, narrowing the search down to addresses whose values have changed by a value specified by the user, since the last dump.

    [Different To Last By At Least (value)] will perform another memory dump, and compare the last one with this new one, narrowing the search down to addresses whose values have changed by at least as much as a value specified by the user, since the last dump.

    [Different To Last By At Most (value)] will perform another memory dump, and compare the last one with this new one, narrowing the search down to addresses whose values have changed by no more than as much as a value specified by the user, since the last dump.

    [Different To (value)] will bring the user to a screen in which he will enter a value, or several values, by using the up/down buttons on the controller to change each digit, the left/right buttons to move back and forth between digits, and the Select button to move to the next value. The value (or values) he enters will be in decimal by default. If he presses R2, format will change to hexadecimal - this will be noted at the bottom of the screen when he's in the Different To (value) menu. Once he's entered a number, or multiple numbers (up to four), he will press X on the controller (a note at the bottom of the screen will instruct him to do so), and the application will search through its last memory dump for any addresses with values other than the value(s) he specified. He will then return to the game, and at some point re-enter the GUI, and if he desires, repeat the process to narrow down the results (ie, if he searched for "FFFF" the first time, the application would search through its last memory dump, and return only addresses whose values were not FFFF; if he then searched for 10FB, the application would search within the results of this last search for addresses whose values have not changed to 10FB. If he searched for FFFF, FOB4, and 102F, the application would search through its last memory dump for addresses with values other than any of those; if he then searched for FFEC, and AABD, the application would then search, within the results of this last search, for any addresses with values other than these newly entered values).

    [Greater Than Last] will perform another memory dump, and compare the last one with this new one, narrowing the search down to addresses whose values have increased since the last dump.

    [Greater Than Last By (value)] will perform another memory dump, and compare the last one with this new one, narrowing the search down to addresses whose values have increased by a value specified by the user, since the last dump.

    [Greater Than Last By At Least (value)] will perform another memory dump, and compare the last one with this new one, narrowing the search down to addresses whose values have increased by at least as much as a value specified by the user, since the last dump.

    [Greater Than Last By At Most (value)] will perform another memory dump, and compare the last one with this new one, narrowing the search down to addresses whose values have increased by no more than as much as a value specified by the user, since the last dump.

    [Greater Than (value)] will bring the user to a screen in which he will enter a value, by using the up/down buttons on the controller to change each digit, and the left/right buttons to move back and forth between digits. The value he enters will be in decimal by default. If he presses R2, format will change to hexadecimal - this will be noted at the bottom of the screen when he's in the Greater Than (value) menu. Once he's entered a number, he will press X on the controller (a note at the bottom of the screen will instruct him to do so), and the application will search through its last memory dump for any addresses with values greater than the value he specified. He will then return to the game, and at some point re-enter the GUI, and if he desires, repeat the process to narrow down the results (ie, if he searched for "FFFF" the first time, the application would search through its last memory dump, and return only addresses whose values were greater than FFFF; if he then searched for 10FB, the application would search within the results of this last search for addresses whose values were greater than 10FB).

    [Less Than Last] will perform another memory dump, and compare the last one with this new one, narrowing the search down to addresses whose values have decreased since the last dump.

    [Less Than Last By (value)] will perform another memory dump, and compare the last one with this new one, narrowing the search down to addresses whose values have decreased by a value specified by the user, since the last dump.

    [Less Than Last By At Least (value)] will perform another memory dump, and compare the last one with this new one, narrowing the search down to addresses whose values have decreased by at least as much as a value specified by the user, since the last dump.

    [Less Than Last By At Most (value)] will perform another memory dump, and compare the last one with this new one, narrowing the search down to addresses whose values have decreased by no more than as much as a value specified by the user, since the last dump.

    [Less Than (value)] will bring the user to a screen in which he will enter a value, by using the up/down buttons on the controller to change each digit, and the left/right buttons to move back and forth between digits. The value he enters will be in decimal by default. If he presses R2, format will change to hexadecimal - this will be noted at the bottom of the screen when he's in the Greater Than (value) menu. Once he's entered a number, he will press X on the controller (a note at the bottom of the screen will instruct him to do so), and the application will search through its last memory dump for any addresses with values less than the value he specified. He will then return to the game, and at some point re-enter the GUI, and if he desires, repeat the process to narrow down the results (ie, if he searched for "FFFF" the first time, the application would search through its last memory dump, and return only addresses whose values were less than FFFF; if he then searched for 10FB, the application would search within the results of this last search for addresses whose values were less than 10FB).

    [Equal To Search x], where 'x' is the number of the set of results the user chooses to search within (the results of the 3rd search being 3, etc), will perform another memory dump, and compare the results of Search x with this new one, narrowing the search down to addresses whose values are the same as they were at Search x.

    [I Forgot...] will keep the current, narrowed search results, but act as if it was the initial memory dump. This will allow a user who forgot what he was doing to continue his search without losing his progress. After this function is performed, the user can return to the game, do whatever he likes, then return to the GUI and perform whatever search he likes, and the search will compare the [I Forgot...] dump with its next dump.

    [Step Backward] will display the message "Are you sure? The most recent search will be erased!", the default choice being "No". If the user selects "Yes", the most recent search will be erased, and the user will continue as if that search never occurred. The top right corner search counter will revert back to the last value as well.

    [View Results] will bring up a window containing the results of the most recent dump or search, in Address:Value format. If it's feasible, all results will be shown in this window, but if not, it can be restricted to only showing results once they've been narrowed down to less than one hundred, or as is reasonable. This is up to the programmer.

    Inside the [View Results] window, the user will be able to scroll up or down using the Up and Down buttons (which will highlight the address he has scrolled to), and press X to select an address. If an address is selected, the user will be prompted to enter a value, the default being the current value at that address. He will then press X to verify his choices, and the code will be colored bright red, indicating it is activated. From this point until he deactivates the code using the same method, the value he selected will be written to that address constantly. This function is included to allow the user to test codes.

    If the user accidentally causes the PS2 to crash or freeze, he will simply power it down, place the application disc back in, choose codes and such again, select [Start Game], swap in his game disc, start his game, and enter the GUI. Upon entering the GUI, a choice will appear, asking him if he wants to continue from his last memory dump (like an [I Forgot...] search), or start over with a new one. This will occur because the application will detect previous memory dumps on the USB flash drive. Therefore, this will occur most of the time, unless the user either erases the memory dump files using his PC, erases them via the application, or has never performed a search using this USB flash drive. [Yes] will be the highlighted, default selection, and if the user presses Down and selects [No], all previous memory dumps and searches will be erased from the USB flash drive. After the user selects one of these two choices, the in-game GUI main menu will be displayed, as usual:

    [Return To Game]
    [Search]
    [Snapshot]
    [Turn Codes Off] (if codes are off already, it will be called [Turn Codes On])


    [Turn Codes Off]/[Turn Codes On] will simply toggle whether codes chosen before starting the game are on or off. This will also affect any codes under [View Results] that are activated, until codes are turned back on.



    When the user first places the application disc into his PS2, and starts it up for the first time (a blank USB flash drive, or one without the expected directories, will signal the application that this is the first time it has been run), the application will create sub-directories on the USB flash drive, as such (Dir name - explanation):

    Codes - Editable text files containing all code data.

    Memdumps - Files containing dumps/snapshots.

    Capture - Screen captures, in .jpg format (if screen capture function is implemented)

    Options - Options files for application.
    I may be lazy, but I can...zzzZZZzzzZZZzzzZZZ...

  2. #2
    Join Date
    Jul 1999
    Posts
    7,105

    Default

    **************************************************
    Code Types
    **************************************************

    Note: These are tentative and incomplete. Please give your input, and contribute.


    By default, codes will be entered as 00, then a space, then the raw hex address, then a space, then the raw hex value, as such:

    00 Address Value

    An example would be 00 002A0FE8 00090078
    __________________________________________________ _________


    For special code types, 00 will be changed to something else.

    __________________________________________________ ___


    Full-Word (32-bit) refers to 8-digit values: 12345678 (xxxxxxxx)

    Half-Word (16 bit) refers to 4-digit values: 1234 (0000xxxx or xxxx0000)

    Byte (8-bit) refers to 2-digit values: 12 (000000xx, 0000xx00, 00xx0000, or xx000000)

    __________________________________________________ __________






    00 - Full-Word, Write Only

    Write value specified; affects all eight digits of a 32-bit address value.

    Example:

    00 00053468 00001018 (assign 00053468 the value 00001018)
    __________________________________________________ ___________






    01 - Half-Word, Write Only

    Write value specified; affects only the last 4 digits of a 32-bit address value.

    Example:

    01 00053468 00001018

    (assign the value 1018 to the second half-word at the address 00053468 (technically, assign the value to the 16-bit address 00053469), without affecting 00053468's first 16-bit half-word. Hence, if the value of 00053468 was initially FF320034, and we used this code, the value would become FF321018)
    __________________________________________________ _____________






    02 - Byte, Write Only

    Write value specified; affects only the last 2 digits of a 32-bit address value.

    Example:

    02 00053468 00000018

    (assign the value 18 to the fourth byte at the address 00053468 (technically, assign the value to the 8-bit address 0005346B), without affecting 00053468's first three 8-bit values. Hence, if the value of 00053468 was initially FF320034, and we used this code, the value would become FF320018)
    __________________________________________________ ___________________







    03 - Single Increment

    Increment (increase) value at address specified by value specified ONCE, then stop. This will generally be used with an If, Then code above it, as such:

    10 0004A6B4 00000008 (if value at 0004A6B4 is 00000008...)
    03 00053468 00000005 (Increase value at 00053468 by 5, then stop)

    For incrementation to occur again, the condition must be made untrue, then true again. For example, the above code would decrease the value at the address 00053468 by 5 (again, just once, not in constant write). The value at 00053468 would not be incremented again unless the value at 0004A6B4 was changed to something else, then back to 00000008 again.
    __________________________________________________ _______






    04 - Single Decrement

    Decrement (decrease) value at address specified by value specified ONCE, then stop. This will generally be used with an If, X code above it, as such:

    10 0004A6B4 00000008 (if value at 0004A6B4 is 00000008...)
    04 00053468 00000005 (decrease value at 00053468 by 5, then stop)

    For decrementation to occur again, the condition must be made untrue, then true again. For example, the above code would decrease the value at the address 00053468 by 5 (again, just once, not in constant write). The value at 00053468 would not be decremented again unless the value at 0004A6B4 was changed to something else, then back to 00000008 again.
    __________________________________________________ _______





    05 - Increment

    Increment (increase) value at address specified by value specified. This will generally be used with an If, Then code above it, as such:

    10 0004A6B4 00000008 (if value at 0004A6B4 is 00000008...)
    05 00053468 00000005 (Increase value at 00053468 by 5)

    Incrementation will continue to occur as long as condition continues to be satisfied.
    __________________________________________________ _______________






    06 - Decrement

    Decrement (decrease) value at address specified by value specified. This will generally be used with an If, X code above it, as such:

    10 0004A6B4 00000008 (if value at 0004A6B4 is 00000008...)
    06 00053468 00000005 (decrease value at 00053468 by 6)

    Decrementation will continue to occur as long as condition continues to be satisfied.
    __________________________________________________ _______________






    07 - Increment, Controlled

    Increment (increase) value at address specified by amount specified, at rate specified.


    07 ZZZZZZZZ xxxxyyyy

    ZZZZZZZZ = Address

    xxxx = How fast (how often) the value is incremented.

    0001 = once every 5 seconds. FFFF = insanely fast

    yyyy = How much the value is incremented by.

    Example:

    10 0004A6B4 00000008 (if 0004A6B4's value is 00000008...)
    07 0004AA28 00010001 (then increase address 0004AA28 by 00000001 every 5 seconds.)
    __________________________________________________ ___________













    08 - Decrement, Controlled

    Decrement (decrease) value at address specified by amount specified, at rate specified.


    08 zzzzzzzz xxxxyyyy

    ZZZZZZZZ = Address

    xxxx = How fast (how often) the value is decremented. 0001 = once every 5 seconds. FFFF = insanely fast

    yyyy = How much the value is decremented by.

    Example:

    10 0004A6B4 00000008 (if 0004A6B4's value is 00000008...)
    08 0004AA28 00010001 (then decrease address 0004AA28 by 00000001 every 5 seconds.
    __________________________________________________ __________________________







    10 - If, Then

    If the value at the address specified is the same as the value specified, perform the code below.

    Example:

    10 0004A6B4 00000008 (if 0004A6B4's value is 00000008...)
    00 00053468 00001018 (then assign 00053468 the value 00001018)

    __________________________________________________ ___




    11 - If Not, Then

    If the value at the address specified is not the same as the value specified, perform the code below.

    Example:

    11 0004A6B4 00000008 (if 0004A6B4's value is not 00000008...)
    00 00053468 00001018 (then assign 00053468 the value 00001018)

    __________________________________________________ ___________






    12 - If Less, Then

    If the value at the address specified is less than the value specified, perform the code below.

    Example:

    12 0004A6B4 00000008 (if 0004A6B4's value is less than 00000008...)
    00 00053468 00001018 (then assign 00053468 the value 00001018)
    __________________________________________________ __________________





    13 - If Greater, Then

    If the value at the address specified is greater than the value specified, perform the code below.

    Example:

    13 0004A6B4 00000008 (if 0004A6B4's value is greater than 00000008...)
    00 00053468 00001018 (then assign 00053468 the value 00001018)
    __________________________________________________ __________________




    14 - If Equal or Less, Then

    If he value at the address specified is equal to or less than the value specified, perform the code below.

    Example:

    14 0004A6B4 00000008 (if 0004A6B4's value is equal to or less than 00000008...)
    00 00053468 00001018 (then assign 00053468 the value 00001018)
    __________________________________________________ ___________






    15 - If Equal or Greater, Then

    If he value at the address specified is equal to or greater than the value specified, perform the code below.

    Example:

    15 0004A6B4 00000008 (if 0004A6B4's value is equal to or greater than 00000008...)
    00 00053468 00001018 (then assign 00053468 the value 00001018)
    __________________________________________________ ________________






    20 - If Value is Within Range, Then (32-bit)

    If value at address specified is between the top value specified and the bottom value specified (to include the bottom value and top value themselves), perform the code below.

    Example:

    20 0004A6B4 01234561 (if 0004A6B4's value is 01234561 or more...)
    20 0004A6B4 02289543 (and 02289543 or less...)
    00 00053468 02001018 (then assign 00053468 the value 02001018)
    __________________________________________________ _________________







    21 - If Value is Outside of Range, Then (32-bit)

    If value at address specified is below the top value specified or above the bottom value specified (hence, not to include the bottom value and top value themselves), perform the code below.

    Example:

    21 0004A6B4 10245123 (if 0004A6B4's value is 10245123 or less...)
    21 0004A6B4 32904758 (or 32904758 or more...)
    00 00053468 02001018 (then assign 00053468 the value 02001018)
    __________________________________________________ _________________







    22 - If Value is Within Range, Then (16-bit)

    If value at address specified is between the top value specified and the bottom value specified (to include the bottom value and top value themselves), perform the code below.

    Example:

    22 0004A6B4 00003280 (if 0004A6B4's value is 3280 or more...)
    22 0004A6B4 00004224 (and 4224 or less...)
    00 00053468 00001018 (then assign 00053468 the value 00001018)
    __________________________________________________ _________________






    23 - If Value is Outside of Range, Then (16-bit)

    If value at address specified is below the top value specified or above the bottom value specified (hence, not to include the bottom value and top value themselves), perform the code below.

    Example:

    23 0004A6B4 00003280 (if 0004A6B4's value is 3280 or less...)
    23 0004A6B4 00004224 (or 4224 or more...)
    00 00053468 02001018 (then assign 00053468 the value 02001018)
    __________________________________________________ _________________






    24 - If Value is Within Range, Then (8-bit)

    If value at address specified is between the top value specified and the bottom value specified (to include the bottom value and top value themselves), perform the code below.

    Example:

    24 0004A6B4 00000080 (if 0004A6B4's value is 80 or more...)
    24 0004A6B4 00000024 (and 24 or less...)
    00 00053468 00001018 (then assign 00053468 the value 00001018)
    __________________________________________________ _________________






    25 - If Value is Outside of Range, Then (8-bit)

    If value at address specified is below the top value specified or above the bottom value specified (hence, not to include the bottom value and top value themselves), perform the code below.

    Example:

    25 0004A6B4 00000080 (if 0004A6B4's value is 80 or less...)
    25 0004A6B4 00000024 (or 24 or more...)
    00 00053468 02001018 (then assign 00053468 the value 02001018)
    __________________________________________________ _________________





    30 - Activate All Below

    Activate all lines of code below this line. Will generally be used with an If, X code.

    Example 1:

    13 0004A6B4 00000008 (if 0004A6B4's value is greater than 00000008...)
    30 00000000 00000000 (then activate all lines below)
    00 00053468 00001018 (assign 00053468 the value 00001018)
    00 00053478 00001001 (and assign 00053478 the value 00001001)
    00 00053488 00058765 (and assign 00053488 the value 00058765)


    Example 2:

    21 0004A6B4 00000342 (if 0004A6B4's value is 00000342 or less...)
    21 0004A6B4 00000900 (or 00000900 or more...)
    30 00000000 00000000 (then activate all lines below)
    00 00053468 00001018 (assign 00053468 the value 00001018)
    00 00053478 00001001 (and assign 00053478 the value 00001001)
    00 00053488 00058765 (and assign 00053488 the value 00058765)
    __________________________________________________ ____________________






    40 - Condensation

    Replaces multiple lines of code with only two.


    40 0000XXYY ZZZZZZZZ

    XX = Number of times to repeat (number of addresses/lines of code affected)

    YY = Address offset

    ZZZZZZZZ = Value to increment value by




    Example 1:

    40 00000404 00000000 (4 addresses, each 04 apart, no incrementation of value)
    00 0004A6B4 02003506 (starting at address 0004A6B4, with value 02003506)

    ...is the equivalent of

    00 0004A6B4 02003506
    00 0004A6B8 02003506
    00 0004A6BC 02003506
    00 0004A6C0 02003506


    Example 2:

    40 00000508 00000002 (5 addresses, each 08 apart, increment by 2 each time)
    00 0004A6B4 02003506 (starting at address 0004A6B4, with value 02003506)

    ...is the equivalent of

    00 0004A6B4 02003506
    00 0004A6BC 02003508
    00 0004A6C4 0200350A
    00 0004A6CC 0200350C
    00 0004A6D4 0200350E
    I may be lazy, but I can...zzzZZZzzzZZZzzzZZZ...

  3. #3
    Join Date
    Jul 1999
    Posts
    7,105

    Default

    ****************************************
    MEMORY EDITOR
    ****************************************

    Note: The Memory Editor function of Artemis will be an endeavor embarked on after initial versions of Artemis have been released. I highly doubt anyone will begin working on the Memory Editor portion of the project straight-off, but if someone so desires, we'd be more than fascinated to see their work


    The memory editor will display the current PS2 memory, and will be an option in the application's in-game GUI, below [Search].

    Modifying a value will write that value to the address ONCE; not in constant write, unless constant write is activated, as detailed below. Left/Right/Up/Down will navigate through the memory. Obviously, no changes will take effect until the user returns to the game. Pressing the O button will increase a digit by one - hence, 4C will be increased to 5C by moving over to "4", and pressing O once. X button will decrease a digit by one. R1 will page down; L1 will page up (holding either of these will page up/down very quickly). R2 will bring the user to a menu, with the following options; the user will scroll up/down using the directional pad on the controller, and select an option using the X button:

    [Jump To Address]
    [Text Search]
    [Activate Constant Write] ([Deactivate Constant Write] if already activated)
    ---[Constant Write Codes]


    [Jump To Address] will prompt the user to type an address in and press X, and will immediately send the user to that address.

    [Text Search] will prompt the user to choose characters from a drop-down box (by moving to the character of their choice and pressing X), at the bottom of which will be a "Search" button (also selected by pressing X). The Text Search function will search for lower and upper case ASCII letters and common punctuation (it will not be case-sensitive).

    [Activate Constant Write]/[Deactivate Constant Write] will toggle whether or not value modifications a user performs in the Memory Editor will be written to the address(es) once, or constantly until deactivated.

    ---[Constant Write Codes] will only appear when constant write is activated. If the user selects this option, he will be taken to a list of currently active constant write codes (which he has chosen through the Memory Editor), which he will be able to toggle on and off individually (by scrolling to the code of his choice and pressing X) or delete (by scrolling to the code of his choice and pressing Square). Pressing the Select button will select all codes. If all codes are selected, and a user presses Square to delete them, he will be prompted "Are you sure?", with the options "Yes and "No"; "No" will be selected by default. If he selects "Yes", the codes will be deleted.

    The layout of the memory editor will be as such:

    002A0FE0 00 24 67 32 56 45 78 83 55 34 32 45 75 93 82 65
    002A0FF0 99 45 23 02 67 88 45 96 85 93 64 27 58 53 85 93
    002A1000 74 56 38 85 62 95 04 02 73 56 53 86 99 53 00 64
    002A1010 64 38 95 82 32 95 88 03 99 45 55 88 47 83 94 00


    In the above example, 002A0FE0's value is currently 32672400. 002A0FE2's value is 2400 (16-bit). 002A0FE3's value is 00 (8-bit).
    I may be lazy, but I can...zzzZZZzzzZZZzzzZZZ...

  4. #4
    Join Date
    Jul 1999
    Posts
    7,105

    Default

    ****************************************
    CONCEPTS
    ****************************************

    - Color-coded lines of code

    - Multiple and custom code sorting methods

    - Detailed text search options for the mem editor

    More to be added as they're thought of...
    I may be lazy, but I can...zzzZZZzzzZZZzzzZZZ...

  5. #5
    Join Date
    Sep 2006
    Location
    Germany
    Posts
    559

    Default

    As the concept and goal of the project is clear, we should now concentrate on the more technical details: software components, protocols, interfaces, etc.

    So the big question is: "How can we realize Project Artemis?"

    I may come up with a detailed description of my work so far. Others are welcome to contribute their ideas too, of course. This is hopefully going to be a long and fruitfull conversation...

  6. #6
    Join Date
    Jul 1999
    Posts
    7,105

    Default

    Yes. Quite a few people have responded to my correspondence that they've already done some work toward our goal, but never finished (and are willing to share some source). Still more (including the above) have said they're willing to lend their knowledge and expertise, and answer questions we may have. Let's hope they drop by

    I have a few things I'd like to play with myself.
    I may be lazy, but I can...zzzZZZzzzZZZzzzZZZ...

  7. #7
    Join Date
    Sep 2006
    Location
    Germany
    Posts
    559

    Default

    If that's the case I'm very excited.

  8. #8
    Join Date
    Oct 2006
    Posts
    5

    Default

    sounds like a great project and as to the memory viewer/editor cYs Driver knows alot about it as he coded one for socom along with cora. id love to help but im only good at hacking game codes and its been a while since ive done that

  9. #9
    Join Date
    Jul 1999
    Posts
    7,105

    Default

    Heh, it's no problem. Yeah, if Driver would resurface, it'd be nice to have his input.

    Hopefully you'll be able to hack PS2 games quite a bit more effectively soon
    I may be lazy, but I can...zzzZZZzzzZZZzzzZZZ...

  10. #10
    Join Date
    Aug 2005
    Posts
    1

    Default Neat

    Wow. Lots of detail. Really cool stuff.
    -ZoMBie343

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. Project Artemis
    By Lazy Bastard in forum Research & Development
    Replies: 418
    Last Post: 12-01-2011, 09:15:50 AM
  2. Project Artemis: Live PS2 Hacking System
    By Lazy Bastard in forum Last Generation & Retro Hacking
    Replies: 5
    Last Post: 08-08-2010, 05:41:23 PM
  3. Artemis Project - GUI
    By Berion in forum Research & Development
    Replies: 22
    Last Post: 10-25-2009, 10:22:20 AM
  4. Team CodeMajic join Project Artemis!
    By Lazy Bastard in forum Research & Development
    Replies: 50
    Last Post: 01-28-2009, 09:27:33 PM
  5. PS2 specifications...
    By Lazy Bastard in forum Last Generation & Retro Hacking
    Replies: 4
    Last Post: 03-27-2005, 09:50:13 AM
Collapse this box.

Visitors found this page by searching for:

Artemis Playstation 2 Memory Dump

memory editor function artemis ps2

cYs Cora Memory Viewer

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •