+ Reply to Thread
Page 1 of 8 12345678 LastLast
Results 1 to 10 of 77

Thread: (Artemis) Code Types

  1. #1
    Join Date
    Sep 2006
    Location
    Germany
    Posts
    549

    Default (Artemis) Code Types

    Hi everyone,

    I'm currently (re)implementing the code types for Artemis' cheat engine. As this project is a community effort, I'm asking you for feedback and suggestions on new code types.

    Here's the current list of supported types. As you'll notice, this is heavily inspired by CodeBreaker.

    Code:
    Code Types supported by Artemis
    written by misfire <misfire@xploderfreax.de>
    Last update: Jul 22 2009
    
    
    Overview:
    
    0 - 8-bit constant write
    1 - 16-bit constant write
    2 - 32-bit constant write
    3 - Increment / Decrement
    4 - 32-bit constant serial write
    5 - Copy bytes
    6 - Pointer write
    7 - Boolean operation
    8 - TODO
    9 - Hook code
    A - TODO
    B - TODO
    C - 32-bit do all following codes if equal to
    D - Do multi-lines if conditional
    E - should be converted to D code type for backwards compatibility
    F - TODO
    
    
    "8-bit constant write"
    
    0-aaaaaaa 000000vv
    
    a = address (25 bits)
    v = value (8 bits)
    
    Constantly writes the 8-bit value @v to address @a.
    The address can be odd or even.
    
    Example:
    002BAA31 00000063
    The 8-bit value 0x63 is repeatedly written to memory location 0x002BAA31.
    
    --------------------
    
    "16-bit constant write"
    
    1-aaaaaaa 0000vvvv
    
    a = address (25 bits)
    v = value (16 bits)
    
    Constantly writes the 16-bit value @v to address @a.
    The address must be aligned to 2.
    
    Example:
    107657B2 0000FFFF
    The 16-bit value 0xFFFF is repeatedly written to memory location 0x007657B2.
    
    --------------------
    
    "32-bit constant write"
    
    2-aaaaaaa vvvvvvvv
    
    a = address (25 bits)
    v = value (32 bits)
    
    Constantly writes the 32-bit value @v to address @a.
    The address must be aligned to 4.
    
    Example:
    20417A64 42C80000
    The 32-bit value 0x42C80000 is repeatedly written to memory location 0x00417A64.
    
    --------------------
    
    "Increment / Decrement"
    
    8-bit increment
    3-00000vv 0aaaaaaa
    
    8-bit decrement
    3-01000vv 0aaaaaaa
    
    16-bit increment
    3-020vvvv 0aaaaaaa
    
    16-bit decrement
    3-030vvvv 0aaaaaaa
    
    32-bit increment
    3-0400000 0aaaaaaa
    vvvvvvvv 00000000
    
    32-bit decrement
    3-0500000 0aaaaaaa
    vvvvvvvv 00000000
    
    a = address (25 bit)
    v = value (8/16/32 bit)
    
    It increments/decrements the current value at address @a by value @v.
    Only used with a joker code above it!
    
    Example:
    30000005 0012AC29
    This will add the 8-bit value 0x05 to the value at address 0x0012AC29.
    
    --------------------
    
    "32-bit constant serial write"
    
    4-aaaaaaa nnnnssss
    vvvvvvvv iiiiiiii
    
    a = start address (25 bits)
    n = number of times to write (16 bits)
    s = size of address step (divided by 4) (16 bits)
    v = start value (32 bits)
    i = size of value step (32 bits)
    
    Starting with address @a, this code type will write the 32-bit value @v to @n
    addresses. In each cycle, the address is incremented by @s * 4 and the value is
    incremented by @i.
    
    Example 1:
    402E8390 00040001
    FFFFFFFF 00000000
    - writes 0xFFFFFFFF to 0x002E8390
    - writes 0xFFFFFFFF to 0x002E8394
    - writes 0xFFFFFFFF to 0x002E8398
    - writes 0xFFFFFFFF to 0x002E839C
    
    Example 2:
    4099A20C 00060002
    00000000 00100000
    - writes 0x00000000 to 0x0099A20C
    - writes 0x00100000 to 0x0099A214
    - writes 0x00200000 to 0x0099A21C
    - writes 0x00300000 to 0x0099A224
    - writes 0x00400000 to 0x0099A22C
    - writes 0x00500000 to 0x0099A234
    
    --------------------
    
    "Copy bytes"
    
    5-sssssss nnnnnnnn
    0ddddddd 00000000
    
    s = address to copy from (25 bits)
    n = number of bytes to copy (32 bits)
    d = address to copy to (25 bits)
    
    Copies a block of @n bytes from source address @s to destination address @d.
    This is done repeatedly, so you need a D code in front of it to only copy stuff
    once.
    
    Example:
    50339328 00000008
    0036AED4 00000000
    Copy 8 bytes from memory location 0x00339328 to 0x0036AED4.
    
    --------------------
    
    "Pointer write"
    
    8-bit write
    6-aaaaaaa 000000vv
    00000000 iiiiiiii
    
    16-bit write
    6-aaaaaaa 0000vvvv
    00010000 iiiiiiii
    
    32-bit write
    6-aaaaaaa vvvvvvvv
    00020000 iiiiiiii
    
    a = address to load 32-bit base address from (25 bits)
    v = value to store at base + offset (8/16/32 bits)
    i = 32-bit offset to be added to base
    
    Loads 32-bit base address from address @a, adds offset @i to it, and constantly
    writes the value @v to the final address.
    Note that execution stops if base is equal to 0.
    
    Example:
    6018F6D4 000003E7
    00010000 00000156
    - loads base address from address 0x0018F6D4, say base is 0x001A0000
    - adds offset 0x00000156 to base to make final address 0x001A0156 where 16-bit
    value 0x03E7 will be written to
    
    --------------------
    
    "Boolean operation"
    
    8-bit OR
    7-aaaaaaa 000000vv
    
    16-bit OR
    7-aaaaaaa 0010vvvv
    
    8-bit AND
    7-aaaaaaa 002000vv
    
    16-bit AND
    7-aaaaaaa 0030vvvv
    
    8-bit XOR
    7-aaaaaaa 004000vv
    
    16-bit XOR
    7-aaaaaaa 0050vvvv
    
    a = address (25 bits)
    v = value (8/16 bits)
    
    Performs a bitwise logical operation between value @v and the value stored at
    address @a.
    
    Example:
    7048D402 005014A9
    0x14A9 is XORed to the 16-bit value at address 0x0048D402.
    
    --------------------
    
    "Hook code"
    
    9-aaaaaaa vvvvvvvv
    
    a = address (25 bits)
    v = value (32 bits)
    
    This code will "hook" the game and is essential for most of the other types to
    work. It hard-codes a jal to the cheat engine at address @a if the 32-bit value
    at @a is equal to value @v. The address @a needs to be inside a function which
    is called many times a second, e.g. scePadRead().
    To cheat on multi-ELF games, create a 9 code for each ELF.
    
    Example:
    902D51F8 0C0B95F6
    Insert hook if 32-bit value at address 0x002D51F8 is equal to 0x0C0B95F6.
    
    --------------------
    
    "32-bit do all following codes if equal to"
    
    C-aaaaaaa vvvvvvvv
    
    a = address (25 bits)
    v = value (32 bits)
    
    All following codes will be executed only if 32-bit value at address @a is equal
    to value @v. Can be used to exit the code sequence at any point. To act on all
    codes (like traditional "Auto Activation") put it at the top of the code list.
    
    Example:
    C0153880 03E00008
    If the 32-bit value 0x03E00008 is at address 0x00153880, then activate all
    following codes; otherwise, do nothing.
    
    --------------------
    
    "Do multi-lines if conditional"
    
    16-bit test
    D-aaaaaaa nnt0vvvv
    
    8-bit test
    D-aaaaaaa nnt100vv
    
    a = address (25 bits)
    n = number of lines to execute (8 bits)
    t = test condition (3 bits)
        0 equal      1 not equal
        2 less than  3 greater than
        4 NAND       5 AND
        6 NOR        7 OR
    v = value (8/16 bits)
    
    Compares value at address @a to value @v, and executes next @n code lines only
    if the test condition @t is true.
    
    Example:
    D00802CC 07002882
    200802CC 8C860000
    200802D0 10C00033
    200802D4 00050C02
    200802D8 00C13021
    200802DC 10000030
    200802E0 A4C50000
    100800BC 00000083
    Activate next 7 lines of code if 16-bit value at address 0x000802CC is equal to
    0x2882; otherwise, skip the 7 code lines.
    Last edited by misfire; 07-22-2009 at 01:58:41 PM.

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

    Default

    I'll look through the old tentative specs, and make some suggestions later today.
    I may be lazy, but I can...zzzZZZzzzZZZzzzZZZ...

  3. #3
    Join Date
    Sep 2006
    Location
    Germany
    Posts
    549

    Default

    Ok, here're the code types I'm planning to add:

    3 - Increment/Decrement
    6 - Pointer code
    8 - 16-bit do multi-lines on boot if equal to
    A - 32-bit write on boot

    Also, I think we can move the functionality of the C code to D and use it for other things (I've never seen the C code in use.)

  4. #4
    Join Date
    Sep 2008
    Location
    CMP's Backyard
    Posts
    328

    Default

    Pyriel have used the C type on Sega Genesis Collection for PS2
    Last edited by lee4; 07-21-2009 at 09:28:38 AM.

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

    Default

    Thanks for the information. He also used the 6 type a lot which is on the to-do list.

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

    Default

    These are just copied and pasted from the old code types spec sheet, so the actual code type number is not relevant.

    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.




    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.
    __________________________________________________ __________________________




    There should also be a 32-bit conditional of some sort...
    I may be lazy, but I can...zzzZZZzzzZZZzzzZZZ...

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

    Default

    Increment and decrement will be handled by code type 3 (8/16/32 bit).

  8. #8
    Join Date
    Jul 1999
    Posts
    7,089

    Default

    Ah.

    Specifically, I'm concerned with single and controlled increment/decrement (I'm not even sure how we could achieve a single increment/decrement, but it would be a great feature...but controlled increment/decrement should definitely be implemented).
    I may be lazy, but I can...zzzZZZzzzZZZzzzZZZ...

  9. #9
    Join Date
    Sep 2008
    Location
    CMP's Backyard
    Posts
    328

    Default

    Quote Originally Posted by misfire View Post
    Ok, here're the code types I'm planning to add:
    8 - 16-bit do multi-lines on boot if equal to
    A - 32-bit write on boot
    I personally never see 8, A and B type been use on Codebreaker.
    Quote Originally Posted by Lazy Bastard View Post
    Ah.

    Specifically, I'm concerned with single and controlled increment/decrement (I'm not even sure how we could achieve a single increment/decrement, but it would be a great feature...but controlled increment/decrement should definitely be implemented).
    The B type would be handy in this matter use as delay timer

  10. #10
    Join Date
    Sep 2006
    Location
    Germany
    Posts
    549

    Default

    CodeBreaker's code type B-0000000 vvvvvvvv puts a delay on all following codes for @v cycles.

    When you hook a game's scePadRead() with a 9 code, you really need the A code in order to patch the video mode, for instance. The 2 code would be called too late (i.e. when the GS is already initialized).

    I haven't seen the 8 code in use either.

+ Reply to Thread

Thread Information

Users Browsing this Thread

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

     

Similar Threads

  1. What do I need for Artemis?
    By bungholio in forum Research & Development
    Replies: 29
    Last Post: 10-04-2009, 11:08:04 PM
  2. NDS AR & CB Code Types?
    By helder in forum Current Generation Hacking
    Replies: 3
    Last Post: 05-19-2008, 06:27:32 PM
  3. [GBA] CodeBreaker Advance Code Types
    By GameMasterZer0 in forum School of Hacking
    Replies: 5
    Last Post: 12-30-2006, 09:48:54 PM
  4. Code Breaker Advance code types
    By DarkSerge in forum School of Hacking
    Replies: 3
    Last Post: 10-31-2006, 06:36:13 PM
  5. Need Pro action replay code types for SNES
    By luigi in forum Last Generation & Retro Hacking
    Replies: 3
    Last Post: 05-06-2005, 11:12:19 PM
Collapse this box.

Visitors found this page by searching for:

200802d8 00c13021

Game hacking classes value per type

CL-CheatsEngine_PUBLIC_v1.2.elf

4aaaaaaa 32bit asm

Posting Permissions

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