When using my porting program or anyone else's to port codes one has to pay attention to addresses as values or inside of assembly because these need to be ran through the application as well. It does not happen automatically if you just paste the entire code. I might implement the value thing but for now you'll have to pay attention to that.
The following code is a direct RAM write using a pointer address as its value:
04609F30 8130DEF0
The address of this code will be recognized as "has to be ported/ checked" but the value not since it's usually not an address that might need to be ported. The porting result of the application may look like this:
04609FA0 8130DEF0
However, the value has to be ported as well. It didn't happen. For this to work with the porting application we need to create a new code which uses the value as as address and a random new value like this:
0530DEF0 00000000
Now the application will port the new address and return the result for example like this:
0530DFF0 00000000
For the final ported code we replace the non-ported pointer value with the ported one:
04609FA0 8130DFF0
There you go, good job. Let's see about other typical codes that have "hidden" addresses which will prevent a successful port.
1) Pointer
48000000 81234580
DE000000 81008180
14000020 40000000
E0000000 80008000
2) Memory Copy
80000000 812A4990
8A000C0F 009A2C34
3) Assembly
Compiled:
C0000000 00000003
3D808123 618C8710
3D608120 918B1874
398C0005 4E800020
Decompiled:
lis r12, -32477
ori r12, r12, 34576
lis r11, -32480
stw r12, 6260 (r11)
addi r12, r12, 5
Addresses involved that need to be ran through the porter:
81238710
81201874
In general you'll have to watch out for suspicious values or assembly whose 2nd 16 bits look like the first 16 bits of an address like in the above example assembly code. You better decompile it and then check for addresses though. A program can't really detect those so you need this little common sense when porting certain tricky codes.
The following code is a direct RAM write using a pointer address as its value:
04609F30 8130DEF0
The address of this code will be recognized as "has to be ported/ checked" but the value not since it's usually not an address that might need to be ported. The porting result of the application may look like this:
04609FA0 8130DEF0
However, the value has to be ported as well. It didn't happen. For this to work with the porting application we need to create a new code which uses the value as as address and a random new value like this:
0530DEF0 00000000
Now the application will port the new address and return the result for example like this:
0530DFF0 00000000
For the final ported code we replace the non-ported pointer value with the ported one:
04609FA0 8130DFF0
There you go, good job. Let's see about other typical codes that have "hidden" addresses which will prevent a successful port.
1) Pointer
48000000 81234580
DE000000 81008180
14000020 40000000
E0000000 80008000
2) Memory Copy
80000000 812A4990
8A000C0F 009A2C34
3) Assembly
Compiled:
C0000000 00000003
3D808123 618C8710
3D608120 918B1874
398C0005 4E800020
Decompiled:
lis r12, -32477
ori r12, r12, 34576
lis r11, -32480
stw r12, 6260 (r11)
addi r12, r12, 5
Addresses involved that need to be ran through the porter:
81238710
81201874
In general you'll have to watch out for suspicious values or assembly whose 2nd 16 bits look like the first 16 bits of an address like in the above example assembly code. You better decompile it and then check for addresses though. A program can't really detect those so you need this little common sense when porting certain tricky codes.