mirror of https://github.com/pret/pokecrystal.git
71 lines
792 B
NASM
71 lines
792 B
NASM
|
FlagPredef: ; 4d7c1
|
||
|
; Perform action b on flag c in flag array hl.
|
||
|
; If checking a flag, check flag array d:hl unless d is 0.
|
||
|
|
||
|
; For longer flag arrays, see FlagAction.
|
||
|
|
||
|
push hl
|
||
|
push bc
|
||
|
|
||
|
; Divide by 8 to get the byte we want.
|
||
|
push bc
|
||
|
srl c
|
||
|
srl c
|
||
|
srl c
|
||
|
ld b, 0
|
||
|
add hl, bc
|
||
|
pop bc
|
||
|
|
||
|
; Which bit we want from the byte
|
||
|
ld a, c
|
||
|
and 7
|
||
|
ld c, a
|
||
|
|
||
|
; Shift left until we can mask the bit
|
||
|
ld a, 1
|
||
|
jr z, .shifted
|
||
|
.shift
|
||
|
add a
|
||
|
dec c
|
||
|
jr nz, .shift
|
||
|
.shifted
|
||
|
ld c, a
|
||
|
|
||
|
; What are we doing to this flag?
|
||
|
dec b
|
||
|
jr z, .set ; 1
|
||
|
dec b
|
||
|
jr z, .check ; 2
|
||
|
|
||
|
.reset
|
||
|
ld a, c
|
||
|
cpl
|
||
|
and [hl]
|
||
|
ld [hl], a
|
||
|
jr .done
|
||
|
|
||
|
.set
|
||
|
ld a, [hl]
|
||
|
or c
|
||
|
ld [hl], a
|
||
|
jr .done
|
||
|
|
||
|
.check
|
||
|
ld a, d
|
||
|
cp 0
|
||
|
jr nz, .farcheck
|
||
|
|
||
|
ld a, [hl]
|
||
|
and c
|
||
|
jr .done
|
||
|
|
||
|
.farcheck
|
||
|
call GetFarByte
|
||
|
and c
|
||
|
|
||
|
.done
|
||
|
pop bc
|
||
|
pop hl
|
||
|
ld c, a
|
||
|
ret
|