The PokéCommunity Forums

The PokéCommunity Forums (https://www.pokecommunity.com/index.php)
-   Binary Hack Tutorials (https://www.pokecommunity.com/forumdisplay.php?f=66)
-   -   HackMew's Knowledge (https://www.pokecommunity.com/showthread.php?t=117917)

NintendoBoyDX April 10th, 2012 10:39 PM

Quote:

Originally Posted by YouListeningROMs (Post 7125232)
With ASM, how would you do modulo?

There are a couple of ways in fr. There is software interrupt 0x6, which is a bios function call that does division and modulo. There is routine 081E4018 developed by gamefreak, that does division and modulo as well.

R0 = dividend
R1 = divisor

returning
R0 = quotient
R1 = modulo answer

081E4684 is another routine made by gamefreak that does modulo only.

A few other math routines:
081E460C: another division routine
081E3B9C: square root, calls swi 0x8

I've stumbled across a few others that I dont remember..

YouListeningROMs April 11th, 2012 3:57 AM

Quote:

Originally Posted by NintendoBoyDX (Post 7125655)
There are a couple of ways in fr. There is software interrupt 0x6, which is a bios function call that does division and modulo. There is routine 081E4018 developed by gamefreak, that does division and modulo as well.

R0 = dividend
R1 = divisor

returning
R0 = quotient
R1 = modulo answer

081E4684 is another routine made by gamefreak that does modulo only.

A few other math routines:
081E460C: another division routine
081E3B9C: square root, calls swi 0x8

I've stumbled across a few others that I dont remember..

Thank you for your assistance.

truekidmoney November 13th, 2012 8:07 AM

Hey guys i have a question how do i get the results lesson1.bin this:
03 B5 03 48 00 68 03 49 80 89 08 80 03 BD C0 46
0C 50 00 03 D0 70 03 02
into my rom?

Logan November 13th, 2012 8:13 AM

Use a Hex Editor and insert the bytes into free space ending with a 0, 4, 8 or C.

CallarinCreator November 30th, 2012 7:55 AM

kan u post something on xse? it aint wantin to work for me. it will work. but it shuts down after like a second.

Deokishisu November 30th, 2012 9:27 AM

Quote:

Originally Posted by CallarinCreator (Post 7426374)
kan u post something on xse? it aint wantin to work for me. it will work. but it shuts down after like a second.

O poor English, struck down in its prime.

Anyway, this is because of the auto update feature. Since Hackmew's site is down, it tries to update, fails, and closes. To fix it, go into your .ini file and change it so that the AutoUpdateCheck equals zero.

So that line should look like this:
AutoUpdateCheck=0

GoGoJJTech January 30th, 2013 4:52 PM

These are extremely helpful ( and long ) well great job hackmew

Chaos Rush February 3rd, 2013 12:37 AM

I decided to take a crack at HackMew's ASM challenge, and I succeeded!
http://i50.tinypic.com/efews8.png http://i45.tinypic.com/16ld1g2.png

This is what I modified the routine to:
Code:

.text
.align 2
.thumb
.thumb_func
.global lesson1

main:
        push {r0-r1, lr}
        ldr r0, .PLAYER_DATA
        ldr r0, [r0]
        ldr r1, .VAR
        ldrh r0, [r0, #0xC]
        strh r0, [r1]
        ldr r0, .PLAYER_DATA
        ldr r0, [r0]
        ldr r1, .NEXT
        ldrh r0, [r0, #0xA]
        strh r0, [r1]
        pop {r0-r1, pc}

.align 2
.PLAYER_DATA:
        .word 0x0300500C
.VAR:
        .word 0x020270B6 + (0x800D * 2)
.NEXT:
        .word 0x020270B8 + (0x8000 * 2)


And the XSE script:
Code:

#dynamic 0x800000
#org @main
callasm YourASMoffset
buffernumber 0x0 LASTRESULT
buffernumber 0x1 0x8000
msgbox @msg MSG_FACE
end

#org @msg
= Your Trainer ID is [buffer2].\nYour Secret ID is [buffer1].


Going to do my best to get ASM down...

Blah February 3rd, 2013 6:46 AM

Quote:

Originally Posted by Chaos Rush (Post 7521704)
I decided to take a crack at HackMew's ASM challenge, and I succeeded!
http://i50.tinypic.com/efews8.png http://i45.tinypic.com/16ld1g2.png

Spoiler:
This is what I modified the routine to:
Code:

.text
.align 2
.thumb
.thumb_func
.global lesson1

main:
        push {r0-r1, lr}
        ldr r0, .PLAYER_DATA
        ldr r0, [r0]
        ldr r1, .VAR
        ldrh r0, [r0, #0xC]
        strh r0, [r1]
        ldr r0, .PLAYER_DATA
        ldr r0, [r0]
        ldr r1, .NEXT
        ldrh r0, [r0, #0xA]
        strh r0, [r1]
        pop {r0-r1, pc}

.align 2
.PLAYER_DATA:
        .word 0x0300500C
.VAR:
        .word 0x020270B6 + (0x800D * 2)
.NEXT:
        .word 0x020270B8 + (0x8000 * 2)


And the XSE script:
Code:

#dynamic 0x800000
#org @main
callasm YourASMoffset
buffernumber 0x0 LASTRESULT
buffernumber 0x1 0x8000
msgbox @msg MSG_FACE
end

#org @msg
= Your Trainer ID is [buffer2].\nYour Secret ID is [buffer1].




Going to do my best to get ASM down...

Spoiler tags, pls!
Also, you don't need to load player data twice.
It should till work without doing this the second time:
ldr r0, .PLAYER_DATA
ldr r0, [r0]

EDIT: I lied, the way you did it, you did need to load it twice (or subtract :D).

karatekid552 February 9th, 2013 8:22 PM

Almost all of the reference links for the ASM tutorial are broken. I have found a few of them, would it be alright for me to post them here? Or should I pm them to DrFuji/giradalkia to add to the end of the tut?

Edit: only two are broken.... Wow, I remember that being a lot more last time....

Edit2: I guess since no one has objected it is fine for me to post the links here:


Assembly Wikipedia: (So easy to find it really wasn't broken, but whatever) http://en.wikipedia.org/wiki/Assembly_language

ARM7DTMI Technical Manuel: http://infocenter.arm.com/help/topic/com.arm.doc.ddi0210c/DDI0210B.pdf

Tonic: Whirlwind Tour of ARM Assembly: http://www.coranac.com/tonc/text/asm.htm


Hope these help anyone who wants to learn ASM.

Kurapika May 17th, 2013 10:12 AM

Since I see people asking questions here, I have a problem using ldr with cmp. I am making a code that compares two words, one located in the RAM and the other located in the ROM. so what I do:
Spoiler:
ldr r1, .word1 ldr r1, [r1] ldr r2, .word2 ldr r2, [r2] cmp r1, r2 beq YayTheyEqualz ...
The problem is, the jump never occurs even when the words are equal... So I tried this:
Spoiler:
ldr r1, .word1 ldrh r1, [r1] ldr r2, .word2 ldrh r2, [r2] cmp r1, r2 beq SecondHalf ... SecondHalf: ldr r1, .word1 ldr r1, [r1, #0x2] ldr r2, .word2 ldrh r2, [r2, #0x2] cmp r1, r2 beq YayTheyEqualz ...
And this 2nd code works correctly but takes more space and it is more complicated. So, I'm wondering if ldr and/or cmr commands have some particular behaviour that makes the first code not working??? Or am I just doing something wrong?

karatekid552 May 17th, 2013 3:30 PM

Quote:

Originally Posted by Kurapika (Post 7665480)
Since I see people asking questions here, I have a problem using ldr with cmp. I am making a code that compares two words, one located in the RAM and the other located in the ROM. so what I do:
Spoiler:
ldr r1, .word1 ldr r1, [r1] ldr r2, .word2 ldr r2, [r2] cmp r1, r2 beq YayTheyEqualz ...
The problem is, the jump never occurs even when the words are equal... So I tried this:
Spoiler:
ldr r1, .word1 ldrh r1, [r1] ldr r2, .word2 ldrh r2, [r2] cmp r1, r2 beq SecondHalf ... SecondHalf: ldr r1, .word1 ldr r1, [r1, #0x2] ldr r2, .word2 ldrh r2, [r2, #0x2] cmp r1, r2 beq YayTheyEqualz ...
And this 2nd code works correctly but takes more space and it is more complicated. So, I'm wondering if ldr and/or cmr commands have some particular behaviour that makes the first code not working??? Or am I just doing something wrong?

Would you mind giving us all of the ASM in the regular format? It is really tough the read this way.

Kurapika May 17th, 2013 4:31 PM

code 1: code 2: The first one doesn't jump to TheyAreEqualz even when it should, the second code works perfectly for me. (Sorry, for some reason, line skips are removed from my posts ;_; I think it's just my ****** Internet -.-')

karatekid552 May 17th, 2013 6:00 PM

Quote:

Originally Posted by Kurapika (Post 7665919)
code 1: code 2: The first one doesn't jump to TheyAreEqualz even when it should, the second code works perfectly for me. (Sorry, for some reason, line skips are removed from my posts ;_; I think it's just my ****** Internet -.-')

From looking at your code, both routines are loading different things. Parts are loading words and others are loading half-words and neither lines up with the other routine. That is probably where your problem lies. A word is 4 bytes and a half-word is 2 bytes. Take that as you wish.

Kurapika October 4th, 2013 8:38 AM

Spoiler:
.word 0x020270B6 + (0x800D * 2)
Assigns the word (32 bits) 0x020270B6 + (0x800D * 2) = 0x020370D0 to .VAR. If you're wondering about the "weird" format, I made that to make it easier changing the variable used. Note however this would work only for temporary variables, 0x800D onwards. For the previous temporary variables, just increase the main address by 2 (in the example above, you would change it to .word 0x020270B8 + (0x8000 * 2), if you were to use variable 0x8000).

But does this way work for any other variables other than the 0x8000 family?

karatekid552 October 4th, 2013 9:22 AM

Quote:

Originally Posted by Kurapika (Post 7863313)
Spoiler:
.word 0x020270B6 + (0x800D * 2)
Assigns the word (32 bits) 0x020270B6 + (0x800D * 2) = 0x020370D0 to .VAR. If you're wondering about the "weird" format, I made that to make it easier changing the variable used. Note however this would work only for temporary variables, 0x800D onwards. For the previous temporary variables, just increase the main address by 2 (in the example above, you would change it to .word 0x020270B8 + (0x8000 * 2), if you were to use variable 0x8000).

But does this way work for any other variables other than the 0x8000 family?

The others are DMA protected. Check my battle bg changer to see how to check vars of others. There is an in-game decrypter function.

Kurapika October 4th, 2013 9:57 AM

Oh damn! :(
I'll check your tutorial, thank you bro!

Lance32497 December 2nd, 2014 8:03 AM

I got the error 'thumb' not recognized as an internal blah blah

Blah December 2nd, 2014 1:47 PM

Quote:

Originally Posted by Lance32497 (Post 8517209)
I got the error 'thumb' not recognized as an internal blah blah

You need to navigate in the command prompt to the directory containing "thumb.bat" and the rest of those files. From what it looks, you're trying to run it from a directory which doesn't have it.

I would move all the files into 1 folder and do:
cd path\To\File
thumb source.asm compiled.bin


Next time:
http://www.pokecommunity.com/showthread.php?t=339708

FamiliaWerneck June 11th, 2015 6:31 AM

So I have tried using the palette editing tutorial together with APE.
I did change the palettes of the National Pokédex, but I failed as for the right ones.
The broken images in OP could really be of help here.
Instead of changing that "green" frame of the National Pokédex for the brown one from the Regional Pokédex, I changed the background of the Pokédex to red and brown (and I didn't even use red while editting palettes...)
I opened the palettes, just like HackMew's tutorial said to, and I changed every green color for brown colors (only colors that were already in the palette) and this happened.
Help?

xRyanp92x December 26th, 2016 3:15 PM

2 Attachment(s)
whenever i try to assemble the asm it doesnt work i just keep getting this... idk why it wont work anyone have any ideas?



Edit: ok nvm i figured it out :D


Shitik December 28th, 2016 5:43 PM

It helped me a lot. Thanks, HackMew (if you're even still around)!

lol 78 June 22nd, 2018 9:11 AM

hey please help me I can't seem to do the command prompt thingy


All times are GMT -8. The time now is 8:46 AM.


Like our Facebook Page Follow us on Twitter © 2002 - 2018 The PokéCommunity™, pokecommunity.com.
Pokémon characters and images belong to The Pokémon Company International and Nintendo. This website is in no way affiliated with or endorsed by Nintendo, Creatures, GAMEFREAK, The Pokémon Company or The Pokémon Company International. We just love Pokémon.
All forum styles, their images (unless noted otherwise) and site designs are © 2002 - 2016 The PokéCommunity / PokéCommunity.com.
PokéCommunity™ is a trademark of The PokéCommunity. All rights reserved. Sponsor advertisements do not imply our endorsement of that product or service. User generated content remains the property of its creator.

Acknowledgements
Use of PokéCommunity Assets
vB Optimise by DragonByte Technologies Ltd © 2023.