_PoY

[Plat Research] Great Marsh RNG ?

Apr 13th, 2018
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.13 KB | None | 0 0
  1. Platinum - 0x0201D30C routine (Great Marsh) study
  2. --------------------------
  3. ARM7 code :
  4.  
  5. 0201:D30C LDR R1, [PC, #4] | Load the value PC+4 into R1
  6. 0201:D30E MUL R1, R0 | R1 = R1*R0
  7. 0201:D310 ADD R0, R1, #1 | R0 = R1 + 1
  8. 0201:D312 BX LR | Branch to adress in LR and LR[0] indicates the operating mode (ARM or Thumb)
  9. 0201:D314 LDRH R5, [R4, #A] | Load register from memory (halfword)
  10. 0201:D316 LDR R7, [R0, #40] | Load register from memory
  11. 0201:D318 PUSH {R4-R5} | Push in stack
  12. 0201:D31A LDR R1, [PC, #30] | Load register from memory
  13. 0201:D31C MOV R4, #27 | Move register or constant
  14. 0201:D31E STR R0, [R1, #8] | Store register to memory
  15. 0201:D320 LDR R1, [PC, #2C] | Load register from memory
  16. 0201:D322 MOV R0, #1 | Move register or constant
  17. 0201:D324 STR R0, [R1, #0] | Store register to memory
  18. 0201:D326 LDR R1, [PC, #2C] | Load register from memory
  19. 0201:D328 LDR R3, [PC, #2C] | Load register from memory
  20. 0201:D32A LSL R4, R4, #4 | Logical shift left
  21. 0201:D32C SUB R2, R1, #4 | Subtract
  22. 0201:D32E LDR R5, [R2, #0] | Load register from memory
  23. 0201:D330 LSR R2, R5, #1E | Logical shift right
  24. 0201:D332 EOR R2, R5 | Exclusive OR
  25. 0201:D334 ADD R5, R2, #0 | Add
  26. 0201:D336 MUL R5, R3 | Multiply
  27. 0201:D338 ADD R2, R0, R5 | Add
  28. 0201:D33A ADD R0, R0, #1 | Add
  29. 0201:D33C STMIA R1!, {R2} | Store multiple, increment after
  30. 0201:D33E CMP R0, R4 | Compare
  31. 0201:D340 BLT #0201D32C | Branch lower than
  32. 0201:D342 LDR R1, [PC, #C] | Load register from memory
  33. 0201:D344 STR R0, [R1, #0] | Store register to memory
  34. 0201:D346 POP {R4-R5} | Pop from stack
  35. 0201:D348 BX LR
  36.  
  37. Registers (before) :
  38. R0 = 00000E0B R4 = 00000000 R8 = 0000FFFF R12 = 038008CF
  39. R1 = 03806BF0 R5 = 00000070 R9 = 00000002 SP = 0380F944
  40. R2 = 027FFC3C R6 = 00000002 R10 = 00000000 LR = 037F8434
  41. R3 = 04000004 R7 = 0380F954 R11 = 00000000 PC = 037F8484
  42.  
  43.  
  44. Registers (after) :
  45. R0 = 00000E0C R4 = 00000000 R8 = 0000FFFF R12 = 038008CF
  46. R1 = 03806BF0 R5 = 00000070 R9 = 00000002 SP = 0380F944
  47. R2 = 027FFC3C R6 = 00000002 R10 = 00000000 LR = 037F8434
  48. R3 = 04000004 R7 = 0380F954 R11 = 00000000 PC = 037F8484
Add Comment
Please, Sign In to add comment