123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- .align 2
- .thumb
-
-
- /*cc left in first block
- 70 +70+70+108 = 258 in people block
- 8*70 + 820 = BA0 from box block
- grand total of EC4 wasted space (9/10 of block wasted)
- saved c000 to c0cc at first block (0x0)
- saved c0cc to c324 at fifth block (0x4)
- saved c324 to cec4 at 14th block (0xd)*/
-
-
- /*at 080D9EDC, in the save routine, place a branch to this (in r0)*/
- /*in pre-patched Fire Red, d9ef0*/
- .global load_hijack
- load_hijack: ldr r1, [r4]
- mov r3, #0xff
- lsl r3, r3, #0x4
- add r3, r3, r1
- ldrh r0, [r3, #0x4]
- cmp r0, #0x0
- beq first_cc_load
- cmp r0, #0x4
- beq middle_load
- cmp r0, #0xd
- beq last_load
-
-
- load_ender: cmp r5, #0xd
- ble next_loop_iter
- mov r0, #0x1
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
-
- first_cc_load: mov r1, #0xcc
- ldr r2, c0c8_addr
- b load_loop
-
- middle_load: mov r1, #0x96
- lsl r1, r1, #0x2
- ldr r2, c320_addr
- b load_loop
-
- last_load:
- mov r1, #0xba
- lsl r1, r1, #0x4
- ldr r2, cec0_addr
-
- load_loop: sub r3, #0x4
- ldr r0, [r3]
- str r0, [r2]
- sub r2, #0x4
- sub r1, #0x4
- cmp r1, #0x0
- bne load_loop
- b load_ender
-
- .align 2
-
- c0c8_addr: .word 0x0203c0c8
- c320_addr: .word 0x0203c320
- cec0_addr: .word 0x0203cec0
-
- next_loop_iter:
- ldr r0, game_load_ret_addr
- bx r0
-
- game_load_ret_addr: .word 0x080D9E71
- /*d9e85 for pre-patched*/
-
-
- .word 0xffffffff
- /*for the Save routine, we hijack before the save on Flash routine
- that is located at 080d991e. Change there for bx r7, and at 80D995C
- place pointer to this*/
- /*in pre-patched version is d9932 and d9970*/
- .global store_hijack
- store_hijack: mov r7, #0xff
- lsl r7, r7, #0x4
- add r7, r1, r7
- strh r0, [r7,#0x6]
- ldrh r6, [r7, #0x4]
- cmp r6, #0x0
- beq first_store
- cmp r6, #0x4
- beq middle_store
- cmp r6, #0xd
- beq last_store
-
- .hword 0x0000
- store_ender: ldr r0, game_store_ret_addr
- bx r0
- game_store_ret_addr: .word 0x080D9923
- /*in pre-patched return is d9937*/
-
-
- first_store: mov r3, #0xcc
- ldr r2, c0c8_addr_2
- b store_loop
-
- middle_store: mov r3, #0x96
- lsl r3, r3, #0x2
- ldr r2, c320_addr_2
- b store_loop
-
- last_store: mov r3, #0xba
- lsl r3, r3, #0x4
- ldr r2, cec0_addr_2
-
- store_loop: sub r7, #0x4
- ldr r0, [r2]
- str r0, [r7]
- sub r2, #0x4
- sub r3, #0x4
- cmp r3, #0x0
- bne store_loop
- b store_ender
-
- c0c8_addr_2: .word 0x0203c0c8
- c320_addr_2: .word 0x0203c320
- cec0_addr_2: .word 0x0203cec0
|