summaryrefslogtreecommitdiff
path: root/common/flag.asm
diff options
context:
space:
mode:
Diffstat (limited to 'common/flag.asm')
-rw-r--r--common/flag.asm113
1 files changed, 113 insertions, 0 deletions
diff --git a/common/flag.asm b/common/flag.asm
new file mode 100644
index 000000000..e99248a3e
--- /dev/null
+++ b/common/flag.asm
@@ -0,0 +1,113 @@
+Function2e50: ; 2e50
+ xor a
+ ld hl, EventFlags
+ ld [hli], a
+ ret
+; 2e56
+
+Function2e56: ; 2e56
+ xor a
+ ld hl, BikeFlags
+ ld [hli], a
+ ld [hl], a
+ ret
+; 2e5d
+
+Function2e5d: ; 2e5d
+ ld a, [$d19a]
+ cp $2
+ jr z, .asm_2e69
+ cp $1
+ jr z, .asm_2e69
+ ret
+
+.asm_2e69
+ ld hl, StatusFlags
+ res 2, [hl]
+ ret
+; 2e6f
+
+
+EventFlagAction: ; 0x2e6f
+ ld hl, EventFlags
+ call FlagAction
+ ret
+
+FlagAction: ; 0x2e76
+; Perform action b on bit de in flag array hl.
+
+; inputs:
+; b: function
+; 0 clear bit
+; 1 set bit
+; 2 check bit
+; de: bit number
+; hl: index within bit table
+
+ ; get index within the byte
+ ld a, e
+ and 7
+
+ ; shift de right by three bits (get the index within memory)
+ srl d
+ rr e
+ srl d
+ rr e
+ srl d
+ rr e
+ add hl, de
+
+ ; implement a decoder
+ ld c, 1
+ rrca
+ jr nc, .one
+ rlc c
+.one
+ rrca
+ jr nc, .two
+ rlc c
+ rlc c
+.two
+ rrca
+ jr nc, .three
+ swap c
+.three
+
+ ; check b's value: 0, 1, 2
+ ld a, b
+ cp 1
+ jr c, .clearbit ; 0
+ jr z, .setbit ; 1
+
+ ; check bit
+ ld a, [hl]
+ and c
+ ld c, a
+ ret
+
+.setbit
+ ; set bit
+ ld a, [hl]
+ or c
+ ld [hl], a
+ ret
+
+.clearbit
+ ; clear bit
+ ld a, c
+ cpl
+ and [hl]
+ ld [hl], a
+ ret
+; 0x2ead
+
+
+Function2ead: ; 2ead
+ ld de, ENGINE_POKEDEX
+ ld b, CHECK_FLAG
+ callba EngineFlagAction
+ ld a, c
+ and a
+ ret
+; 2ebb
+