説明なし

jump_behavior.S 1.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. .text
  2. .align 2
  3. .thumb
  4. .global jump_behavior
  5. jump_behavior:
  6. lsl r0, r3, #0x10
  7. asr r0, r0, #0x10
  8. lsl r1, r1, #0x10
  9. asr r1, r1, #0x10
  10. cmp r4, #0
  11. bne check_up
  12. @Looking down
  13. add r3, r1, #1
  14. push {r0-r2}
  15. mov r1, r3
  16. bl check_block_role
  17. mov r3, r0
  18. pop {r0-r2}
  19. cmp r3, #0x3D
  20. beq return_false
  21. b check_for_jump_bytes
  22. check_up:
  23. cmp r4, #1
  24. bne check_left
  25. @Looking Up
  26. sub r3, r1, #1
  27. push {r0-r2}
  28. mov r1, r3
  29. bl check_block_role
  30. mov r3, r0
  31. pop {r0-r2}
  32. cmp r3, #0x3D
  33. beq return_false
  34. b check_for_jump_bytes
  35. check_left:
  36. cmp r4, #2
  37. bne right
  38. @Looking left
  39. sub r3, r0, #1
  40. push {r0-r2}
  41. mov r0, r3
  42. bl check_block_role
  43. mov r3, r0
  44. pop {r0-r2}
  45. cmp r3, #0x3D
  46. beq return_false
  47. b check_for_jump_bytes
  48. right:
  49. @Looking right
  50. add r3, r0, #1
  51. push {r0-r2}
  52. mov r0, r3
  53. bl check_block_role
  54. mov r3, r0
  55. pop {r0-r2}
  56. cmp r3, #0x3D
  57. beq return_false
  58. b check_for_jump_bytes
  59. return_false:
  60. mov r0, #0
  61. pop {r4}
  62. pop {r1}
  63. bx r1
  64. check_for_jump_bytes:
  65. bl check_block_role
  66. lsl r0, r0, #0x18
  67. lsr r0, r0, #0x18
  68. cmp r0, #0x3C
  69. bne normal_return
  70. ldr r0, =0x08068148|1 @"return true"
  71. bx r0
  72. normal_return:
  73. ldr r3, =0x08068126|1 @"check others"
  74. bx r3
  75. check_block_role:
  76. ldr r3, block_role_at
  77. bx r3
  78. .align 2
  79. block_role_at:
  80. .word 0x08058F78|1