diff options
Diffstat (limited to 'asm/var.s')
-rw-r--r-- | asm/var.s | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/asm/var.s b/asm/var.s new file mode 100644 index 000000000..366a5355f --- /dev/null +++ b/asm/var.s @@ -0,0 +1,104 @@ + .include "constants/gba_constants.s" + .include "constants/species_constants.s" + .include "asm/macros.s" + + .syntax unified + + .text + + thumb_func_start GetVarPointer +GetVarPointer: @ 8069210 + push {lr} + lsls r0, 16 + lsrs r1, r0, 16 + adds r2, r1, 0 + ldr r0, _08069224 + cmp r1, r0 + bhi _08069228 + movs r0, 0 + b _0806924A + .align 2, 0 +_08069224: .4byte 0x00003fff +_08069228: + lsls r0, r1, 16 + cmp r0, 0 + bge _08069244 + ldr r0, _0806923C + ldr r2, _08069240 + adds r1, r2 + lsls r1, 2 + adds r1, r0 + ldr r0, [r1] + b _0806924A + .align 2, 0 +_0806923C: .4byte gUnknown_0814B14C +_08069240: .4byte 0xffff8000 +_08069244: + lsls r0, r2, 1 + ldr r1, _08069250 + adds r0, r1 +_0806924A: + pop {r1} + bx r1 + .align 2, 0 +_08069250: .4byte 0x0201ea74 + thumb_func_end GetVarPointer + + thumb_func_start VarGet +VarGet: @ 8069254 + push {r4,lr} + lsls r0, 16 + lsrs r4, r0, 16 + adds r0, r4, 0 + bl GetVarPointer + cmp r0, 0 + beq _08069268 + ldrh r0, [r0] + b _0806926A +_08069268: + adds r0, r4, 0 +_0806926A: + pop {r4} + pop {r1} + bx r1 + thumb_func_end VarGet + + thumb_func_start VarSet +VarSet: @ 8069270 + push {r4,lr} + lsls r0, 16 + lsrs r0, 16 + lsls r1, 16 + lsrs r4, r1, 16 + bl GetVarPointer + cmp r0, 0 + beq _08069288 + strh r4, [r0] + movs r0, 0x1 + b _0806928A +_08069288: + movs r0, 0 +_0806928A: + pop {r4} + pop {r1} + bx r1 + thumb_func_end VarSet + + thumb_func_start VarGetFieldObjectGraphicsId +VarGetFieldObjectGraphicsId: @ 8069290 + push {lr} + lsls r0, 24 + lsrs r0, 8 + ldr r1, _080692A8 + adds r0, r1 + lsrs r0, 16 + bl VarGet + lsls r0, 24 + lsrs r0, 24 + pop {r1} + bx r1 + .align 2, 0 +_080692A8: .4byte 0x40100000 + thumb_func_end VarGetFieldObjectGraphicsId + + .align 2, 0 @ Don't pad with nop. |