summaryrefslogtreecommitdiff
path: root/asm/flag.s
blob: 24b70f5e1d27968661299f2c0b54e24b2ffbc03b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
	.include "asm/macros.inc"
	.include "constants/constants.inc"

	.syntax unified

	.text

	thumb_func_start GetFlagPointer
@ u8 *GetFlagPointer(u16 flagId)
GetFlagPointer: @ 809D6EC
	push {lr}
	lsls r1, r0, 16
	lsrs r2, r1, 16
	adds r3, r2, 0
	cmp r2, 0
	bne _0809D6FC
	movs r0, 0
	b _0809D72E
_0809D6FC:
	ldr r0, =0x00003fff
	cmp r2, r0
	bhi _0809D71C
	ldr r0, =gUnknown_03005D8C
	lsrs r1, 19
	ldr r2, =0x00001270
	adds r1, r2
	ldr r0, [r0]
	b _0809D72C
	.pool
_0809D71C:
	ldr r1, =0xffffc000
	adds r0, r3, r1
	cmp r0, 0
	bge _0809D728
	ldr r2, =0xffffc007
	adds r0, r3, r2
_0809D728:
	asrs r0, 3
	ldr r1, =gUnknown_020375FC
_0809D72C:
	adds r0, r1
_0809D72E:
	pop {r1}
	bx r1
	.pool
	thumb_func_end GetFlagPointer

	thumb_func_start FlagSet
@ bool8 FlagSet(u16 flagId)
FlagSet: @ 809D740
	push {r4,lr}
	lsls r0, 16
	lsrs r4, r0, 16
	adds r0, r4, 0
	bl GetFlagPointer
	adds r2, r0, 0
	cmp r2, 0
	beq _0809D760
	movs r0, 0x7
	ands r0, r4
	movs r1, 0x1
	lsls r1, r0
	ldrb r0, [r2]
	orrs r1, r0
	strb r1, [r2]
_0809D760:
	movs r0, 0
	pop {r4}
	pop {r1}
	bx r1
	thumb_func_end FlagSet

	thumb_func_start FlagReset
@ bool8 FlagReset(u16 flagId)
FlagReset: @ 809D768
	push {r4,lr}
	lsls r0, 16
	lsrs r4, r0, 16
	adds r0, r4, 0
	bl GetFlagPointer
	adds r2, r0, 0
	cmp r2, 0
	beq _0809D788
	movs r0, 0x7
	ands r0, r4
	movs r1, 0x1
	lsls r1, r0
	ldrb r0, [r2]
	bics r0, r1
	strb r0, [r2]
_0809D788:
	movs r0, 0
	pop {r4}
	pop {r1}
	bx r1
	thumb_func_end FlagReset

	thumb_func_start FlagGet
@ bool8 FlagGet(u16 flagId)
FlagGet: @ 809D790
	push {r4,lr}
	lsls r0, 16
	lsrs r4, r0, 16
	adds r0, r4, 0
	bl GetFlagPointer
	cmp r0, 0
	beq _0809D7B4
	ldrb r0, [r0]
	movs r1, 0x7
	ands r1, r4
	asrs r0, r1
	movs r1, 0x1
	ands r0, r1
	cmp r0, 0
	beq _0809D7B4
	movs r0, 0x1
	b _0809D7B6
_0809D7B4:
	movs r0, 0
_0809D7B6:
	pop {r4}
	pop {r1}
	bx r1
	thumb_func_end FlagGet

	.align 2, 0 @ Don't pad with nop.