diff options
author | mid-kid <esteve.varela@gmail.com> | 2018-03-25 18:24:14 +0200 |
---|---|---|
committer | mid-kid <esteve.varela@gmail.com> | 2018-03-25 18:24:14 +0200 |
commit | be76ee56a89e72c0b87a605321bb1670e86f8220 (patch) | |
tree | 277ffa2bc094e74b27ec5b72f748b93e58b3437f /engine/flagpredef.asm | |
parent | 0d9241889fc8a2f047b9fd6db25e55de1e721877 (diff) |
Organize the engine/ directory, director's cut
Cleaned up `engine/routines`, in favor of moving files into more
appropriate directories. predef-related routines are now in top-level
`engine`.
`rtc/delete_save_change_clock.asm` has been split into both
`menus/delete_save.asm` and `rtc/reset_password.asm`.
Made a new subdirectory:
* engine/math: Contains all generic math-related routines.
Diffstat (limited to 'engine/flagpredef.asm')
-rw-r--r-- | engine/flagpredef.asm | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/engine/flagpredef.asm b/engine/flagpredef.asm new file mode 100644 index 000000000..2a6d91ee1 --- /dev/null +++ b/engine/flagpredef.asm @@ -0,0 +1,70 @@ +SmallFarFlagAction: ; 4d7c1 +; Perform action b on bit 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 |