mirror of
https://github.com/pret/pokeyellow.git
synced 2024-11-27 12:20:21 +00:00
crlf to lf
This commit is contained in:
parent
d8dae96f35
commit
cee4d559f9
18
.gitattributes
vendored
Normal file
18
.gitattributes
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
# Auto detect text files and perform LF normalization
|
||||
* text eol=lf
|
||||
|
||||
# Explicitly declare text files you want to always be normalized and converted
|
||||
# to native line endings on checkout.
|
||||
*.asm text
|
||||
|
||||
# Denote all files that are truly binary and should not be modified.
|
||||
*.png binary
|
||||
*.2bpp binary
|
||||
*.1bpp binary
|
||||
*.rle binary
|
||||
*.tilecoll binary
|
||||
*.bst binary
|
||||
*.map binary
|
||||
*.wav binary
|
||||
*.blk binary
|
||||
*.pic binary
|
@ -1,441 +1,441 @@
|
||||
;\1 = event index
|
||||
;\2 = return result in carry instead of zero flag
|
||||
CheckEvent: MACRO
|
||||
event_byte = ((\1) / 8)
|
||||
ld a, [wEventFlags + event_byte]
|
||||
|
||||
IF _NARG > 1
|
||||
IF ((\1) % 8) == 7
|
||||
add a
|
||||
ELSE
|
||||
REPT ((\1) % 8) + 1
|
||||
rrca
|
||||
ENDR
|
||||
ENDC
|
||||
ELSE
|
||||
bit (\1) % 8, a
|
||||
ENDC
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
CheckEventReuseA: MACRO
|
||||
IF event_byte != ((\1) / 8)
|
||||
event_byte = ((\1) / 8)
|
||||
ld a, [wEventFlags + event_byte]
|
||||
ENDC
|
||||
|
||||
bit (\1) % 8, a
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
;\2 = event index of the last event used before the branch
|
||||
CheckEventAfterBranchReuseA: MACRO
|
||||
event_byte = ((\2) / 8)
|
||||
IF event_byte != ((\1) / 8)
|
||||
event_byte = ((\1) / 8)
|
||||
ld a, [wEventFlags + event_byte]
|
||||
ENDC
|
||||
|
||||
bit (\1) % 8, a
|
||||
ENDM
|
||||
|
||||
;\1 = reg
|
||||
;\2 = event index
|
||||
;\3 = event index this event is relative to (optional, this is needed when there is a fixed flag address)
|
||||
EventFlagBit: MACRO
|
||||
IF _NARG > 2
|
||||
ld \1, ((\3) % 8) + ((\2) - (\3))
|
||||
ELSE
|
||||
ld \1, (\2) % 8
|
||||
ENDC
|
||||
ENDM
|
||||
|
||||
;\1 = reg
|
||||
;\2 = event index
|
||||
EventFlagAddress: MACRO
|
||||
event_byte = ((\2) / 8)
|
||||
ld \1, wEventFlags + event_byte
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
CheckEventHL: MACRO
|
||||
event_byte = ((\1) / 8)
|
||||
ld hl, wEventFlags + event_byte
|
||||
bit (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
CheckEventReuseHL: MACRO
|
||||
IF event_byte != ((\1) / 8)
|
||||
event_byte = ((\1) / 8)
|
||||
ld hl, wEventFlags + event_byte
|
||||
ENDC
|
||||
|
||||
bit (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
; dangerous, only use when HL is guaranteed to be the desired value
|
||||
;\1 = event index
|
||||
CheckEventForceReuseHL: MACRO
|
||||
event_byte = ((\1) / 8)
|
||||
bit (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
;\2 = event index of the last event used before the branch
|
||||
CheckEventAfterBranchReuseHL: MACRO
|
||||
event_byte = ((\2) / 8)
|
||||
IF event_byte != ((\1) / 8)
|
||||
event_byte = ((\1) / 8)
|
||||
ld hl, wEventFlags + event_byte
|
||||
ENDC
|
||||
|
||||
bit (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
CheckAndSetEvent: MACRO
|
||||
event_byte = ((\1) / 8)
|
||||
ld hl, wEventFlags + event_byte
|
||||
bit (\1) % 8, [hl]
|
||||
set (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
CheckAndResetEvent: MACRO
|
||||
event_byte = ((\1) / 8)
|
||||
ld hl, wEventFlags + event_byte
|
||||
bit (\1) % 8, [hl]
|
||||
res (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
CheckAndSetEventA: MACRO
|
||||
ld a, [wEventFlags + ((\1) / 8)]
|
||||
bit (\1) % 8, a
|
||||
set (\1) % 8, a
|
||||
ld [wEventFlags + ((\1) / 8)], a
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
CheckAndResetEventA: MACRO
|
||||
ld a, [wEventFlags + ((\1) / 8)]
|
||||
bit (\1) % 8, a
|
||||
res (\1) % 8, a
|
||||
ld [wEventFlags + ((\1) / 8)], a
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
SetEvent: MACRO
|
||||
event_byte = ((\1) / 8)
|
||||
ld hl, wEventFlags + event_byte
|
||||
set (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
SetEventReuseHL: MACRO
|
||||
IF event_byte != ((\1) / 8)
|
||||
event_byte = ((\1) / 8)
|
||||
ld hl, wEventFlags + event_byte
|
||||
ENDC
|
||||
|
||||
set (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
;\2 = event index of the last event used before the branch
|
||||
SetEventAfterBranchReuseHL: MACRO
|
||||
event_byte = ((\2) / 8)
|
||||
IF event_byte != ((\1) / 8)
|
||||
event_byte = ((\1) / 8)
|
||||
ld hl, wEventFlags + event_byte
|
||||
ENDC
|
||||
|
||||
set (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
; dangerous, only use when HL is guaranteed to be the desired value
|
||||
;\1 = event index
|
||||
SetEventForceReuseHL: MACRO
|
||||
event_byte = ((\1) / 8)
|
||||
set (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
;\2 = event index
|
||||
;\3, \4, ... = additional (optional) event indices
|
||||
SetEvents: MACRO
|
||||
SetEvent \1
|
||||
rept (_NARG + -1)
|
||||
SetEventReuseHL \2
|
||||
shift
|
||||
endr
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
ResetEvent: MACRO
|
||||
event_byte = ((\1) / 8)
|
||||
ld hl, wEventFlags + event_byte
|
||||
res (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
ResetEventReuseHL: MACRO
|
||||
IF event_byte != ((\1) / 8)
|
||||
event_byte = ((\1) / 8)
|
||||
ld hl, wEventFlags + event_byte
|
||||
ENDC
|
||||
|
||||
res (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
;\2 = event index of the last event used before the branch
|
||||
ResetEventAfterBranchReuseHL: MACRO
|
||||
event_byte = ((\2) / 8)
|
||||
IF event_byte != ((\1) / 8)
|
||||
event_byte = ((\1) / 8)
|
||||
ld hl, wEventFlags + event_byte
|
||||
ENDC
|
||||
|
||||
res (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
; dangerous, only use when HL is guaranteed to be the desired value
|
||||
;\1 = event index
|
||||
ResetEventForceReuseHL: MACRO
|
||||
event_byte = ((\1) / 8)
|
||||
res (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
;\2 = event index
|
||||
;\3 = event index (optional)
|
||||
ResetEvents: MACRO
|
||||
ResetEvent \1
|
||||
rept (_NARG + -1)
|
||||
ResetEventReuseHL \2
|
||||
shift
|
||||
endr
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
;\2 = number of bytes away from the base address (optional, for matching the ROM)
|
||||
dbEventFlagBit: MACRO
|
||||
IF _NARG > 1
|
||||
db ((\1) % 8) + ((\2) * 8)
|
||||
ELSE
|
||||
db ((\1) % 8)
|
||||
ENDC
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
;\2 = number of bytes away from the base address (optional, for matching the ROM)
|
||||
dwEventFlagAddress: MACRO
|
||||
IF _NARG > 1
|
||||
dw wEventFlags + ((\1) / 8) - (\2)
|
||||
ELSE
|
||||
dw wEventFlags + ((\1) / 8)
|
||||
ENDC
|
||||
ENDM
|
||||
|
||||
;\1 = start
|
||||
;\2 = end
|
||||
SetEventRange: MACRO
|
||||
event_start_byte = ((\1) / 8)
|
||||
event_end_byte = ((\2) / 8)
|
||||
|
||||
IF event_end_byte < event_start_byte
|
||||
FAIL "Incorrect argument order in SetEventRange."
|
||||
ENDC
|
||||
|
||||
IF event_start_byte == event_end_byte
|
||||
ld a, [wEventFlags + event_start_byte]
|
||||
or (1 << (((\2) % 8) + 1)) - (1 << ((\1) % 8))
|
||||
ld [wEventFlags + event_start_byte], a
|
||||
ELSE
|
||||
event_fill_start = event_start_byte + 1
|
||||
event_fill_count = event_end_byte - event_start_byte - 1
|
||||
|
||||
IF ((\1) % 8) == 0
|
||||
event_fill_start = event_fill_start + -1
|
||||
event_fill_count = event_fill_count + 1
|
||||
ELSE
|
||||
ld a, [wEventFlags + event_start_byte]
|
||||
or $ff - ((1 << ((\1) % 8)) - 1)
|
||||
ld [wEventFlags + event_start_byte], a
|
||||
ENDC
|
||||
|
||||
IF ((\2) % 8) == 7
|
||||
event_fill_count = event_fill_count + 1
|
||||
ENDC
|
||||
|
||||
IF event_fill_count == 1
|
||||
ld hl, wEventFlags + event_fill_start
|
||||
ld [hl], $ff
|
||||
ENDC
|
||||
|
||||
IF event_fill_count > 1
|
||||
ld a, $ff
|
||||
ld hl, wEventFlags + event_fill_start
|
||||
|
||||
REPT event_fill_count + -1
|
||||
ld [hli], a
|
||||
ENDR
|
||||
|
||||
ld [hl], a
|
||||
ENDC
|
||||
|
||||
IF ((\2) % 8) == 0
|
||||
ld hl, wEventFlags + event_end_byte
|
||||
set 0, [hl]
|
||||
ELSE
|
||||
IF ((\2) % 8) != 7
|
||||
ld a, [wEventFlags + event_end_byte]
|
||||
or (1 << (((\2) % 8) + 1)) - 1
|
||||
ld [wEventFlags + event_end_byte], a
|
||||
ENDC
|
||||
ENDC
|
||||
ENDC
|
||||
ENDM
|
||||
|
||||
;\1 = start
|
||||
;\2 = end
|
||||
;\3 = assume a is 0 if present
|
||||
ResetEventRange: MACRO
|
||||
event_start_byte = ((\1) / 8)
|
||||
event_end_byte = ((\2) / 8)
|
||||
|
||||
IF event_end_byte < event_start_byte
|
||||
FAIL "Incorrect argument order in ResetEventRange."
|
||||
ENDC
|
||||
|
||||
IF event_start_byte == event_end_byte
|
||||
ld a, [wEventFlags + event_start_byte]
|
||||
and ~((1 << (((\2) % 8) + 1)) - (1 << ((\1) % 8))) & $ff
|
||||
ld [wEventFlags + event_start_byte], a
|
||||
ELSE
|
||||
event_fill_start = event_start_byte + 1
|
||||
event_fill_count = event_end_byte - event_start_byte - 1
|
||||
|
||||
IF ((\1) % 8) == 0
|
||||
event_fill_start = event_fill_start + -1
|
||||
event_fill_count = event_fill_count + 1
|
||||
ELSE
|
||||
ld a, [wEventFlags + event_start_byte]
|
||||
and ~($ff - ((1 << ((\1) % 8)) - 1)) & $ff
|
||||
ld [wEventFlags + event_start_byte], a
|
||||
ENDC
|
||||
|
||||
IF ((\2) % 8) == 7
|
||||
event_fill_count = event_fill_count + 1
|
||||
ENDC
|
||||
|
||||
IF event_fill_count == 1
|
||||
ld hl, wEventFlags + event_fill_start
|
||||
ld [hl], 0
|
||||
ENDC
|
||||
|
||||
IF event_fill_count > 1
|
||||
ld hl, wEventFlags + event_fill_start
|
||||
|
||||
; force xor a if we just to wrote to it above
|
||||
IF (_NARG < 3) || (((\1) % 8) != 0)
|
||||
xor a
|
||||
ENDC
|
||||
|
||||
REPT event_fill_count + -1
|
||||
ld [hli], a
|
||||
ENDR
|
||||
|
||||
ld [hl], a
|
||||
ENDC
|
||||
|
||||
IF ((\2) % 8) == 0
|
||||
ld hl, wEventFlags + event_end_byte
|
||||
res 0, [hl]
|
||||
ELSE
|
||||
IF ((\2) % 8) != 7
|
||||
ld a, [wEventFlags + event_end_byte]
|
||||
and ~((1 << (((\2) % 8) + 1)) - 1) & $ff
|
||||
ld [wEventFlags + event_end_byte], a
|
||||
ENDC
|
||||
ENDC
|
||||
ENDC
|
||||
ENDM
|
||||
|
||||
; returns whether both events are set in Z flag
|
||||
; This is counter-intuitive because the other event checks set the Z flag when
|
||||
; the event is not set, but this sets the Z flag when the event is set.
|
||||
;\1 = event index 1
|
||||
;\2 = event index 2
|
||||
;\3 = try to reuse a (optional)
|
||||
CheckBothEventsSet: MACRO
|
||||
IF ((\1) / 8) == ((\2) / 8)
|
||||
IF (_NARG < 3) || (((\1) / 8) != event_byte)
|
||||
event_byte = ((\1) / 8)
|
||||
ld a, [wEventFlags + ((\1) / 8)]
|
||||
ENDC
|
||||
and (1 << ((\1) % 8)) | (1 << ((\2) % 8))
|
||||
cp (1 << ((\1) % 8)) | (1 << ((\2) % 8))
|
||||
ELSE
|
||||
; This case doesn't happen in the original ROM.
|
||||
IF ((\1) % 8) == ((\2) % 8)
|
||||
push hl
|
||||
ld a, [wEventFlags + ((\1) / 8)]
|
||||
ld hl, wEventFlags + ((\2) / 8)
|
||||
and [hl]
|
||||
cpl
|
||||
bit ((\1) % 8), a
|
||||
pop hl
|
||||
ELSE
|
||||
push bc
|
||||
ld a, [wEventFlags + ((\1) / 8)]
|
||||
and (1 << ((\1) % 8))
|
||||
ld b, a
|
||||
ld a, [wEventFlags + ((\2) / 8)]
|
||||
and (1 << ((\2) % 8))
|
||||
or b
|
||||
cp (1 << ((\1) % 8)) | (1 << ((\2) % 8))
|
||||
pop bc
|
||||
ENDC
|
||||
ENDC
|
||||
ENDM
|
||||
|
||||
; returns the complement of whether either event is set in Z flag
|
||||
;\1 = event index 1
|
||||
;\2 = event index 2
|
||||
CheckEitherEventSet: MACRO
|
||||
IF ((\1) / 8) == ((\2) / 8)
|
||||
ld a, [wEventFlags + ((\1) / 8)]
|
||||
and (1 << ((\1) % 8)) | (1 << ((\2) % 8))
|
||||
ELSE
|
||||
; This case doesn't happen in the original ROM.
|
||||
IF ((\1) % 8) == ((\2) % 8)
|
||||
push hl
|
||||
ld a, [wEventFlags + ((\1) / 8)]
|
||||
ld hl, wEventFlags + ((\2) / 8)
|
||||
or [hl]
|
||||
bit ((\1) % 8), a
|
||||
pop hl
|
||||
ELSE
|
||||
push bc
|
||||
ld a, [wEventFlags + ((\1) / 8)]
|
||||
and (1 << ((\1) % 8))
|
||||
ld b, a
|
||||
ld a, [wEventFlags + ((\2) / 8)]
|
||||
and (1 << ((\2) % 8))
|
||||
or b
|
||||
pop bc
|
||||
ENDC
|
||||
ENDC
|
||||
ENDM
|
||||
|
||||
; for handling fixed event bits when events are inserted/removed
|
||||
;\1 = event index
|
||||
;\2 = fixed flag bit
|
||||
AdjustEventBit: MACRO
|
||||
IF ((\1) % 8) != (\2)
|
||||
add ((\1) % 8) - (\2)
|
||||
ENDC
|
||||
ENDM
|
||||
;\1 = event index
|
||||
;\2 = return result in carry instead of zero flag
|
||||
CheckEvent: MACRO
|
||||
event_byte = ((\1) / 8)
|
||||
ld a, [wEventFlags + event_byte]
|
||||
|
||||
IF _NARG > 1
|
||||
IF ((\1) % 8) == 7
|
||||
add a
|
||||
ELSE
|
||||
REPT ((\1) % 8) + 1
|
||||
rrca
|
||||
ENDR
|
||||
ENDC
|
||||
ELSE
|
||||
bit (\1) % 8, a
|
||||
ENDC
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
CheckEventReuseA: MACRO
|
||||
IF event_byte != ((\1) / 8)
|
||||
event_byte = ((\1) / 8)
|
||||
ld a, [wEventFlags + event_byte]
|
||||
ENDC
|
||||
|
||||
bit (\1) % 8, a
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
;\2 = event index of the last event used before the branch
|
||||
CheckEventAfterBranchReuseA: MACRO
|
||||
event_byte = ((\2) / 8)
|
||||
IF event_byte != ((\1) / 8)
|
||||
event_byte = ((\1) / 8)
|
||||
ld a, [wEventFlags + event_byte]
|
||||
ENDC
|
||||
|
||||
bit (\1) % 8, a
|
||||
ENDM
|
||||
|
||||
;\1 = reg
|
||||
;\2 = event index
|
||||
;\3 = event index this event is relative to (optional, this is needed when there is a fixed flag address)
|
||||
EventFlagBit: MACRO
|
||||
IF _NARG > 2
|
||||
ld \1, ((\3) % 8) + ((\2) - (\3))
|
||||
ELSE
|
||||
ld \1, (\2) % 8
|
||||
ENDC
|
||||
ENDM
|
||||
|
||||
;\1 = reg
|
||||
;\2 = event index
|
||||
EventFlagAddress: MACRO
|
||||
event_byte = ((\2) / 8)
|
||||
ld \1, wEventFlags + event_byte
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
CheckEventHL: MACRO
|
||||
event_byte = ((\1) / 8)
|
||||
ld hl, wEventFlags + event_byte
|
||||
bit (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
CheckEventReuseHL: MACRO
|
||||
IF event_byte != ((\1) / 8)
|
||||
event_byte = ((\1) / 8)
|
||||
ld hl, wEventFlags + event_byte
|
||||
ENDC
|
||||
|
||||
bit (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
; dangerous, only use when HL is guaranteed to be the desired value
|
||||
;\1 = event index
|
||||
CheckEventForceReuseHL: MACRO
|
||||
event_byte = ((\1) / 8)
|
||||
bit (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
;\2 = event index of the last event used before the branch
|
||||
CheckEventAfterBranchReuseHL: MACRO
|
||||
event_byte = ((\2) / 8)
|
||||
IF event_byte != ((\1) / 8)
|
||||
event_byte = ((\1) / 8)
|
||||
ld hl, wEventFlags + event_byte
|
||||
ENDC
|
||||
|
||||
bit (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
CheckAndSetEvent: MACRO
|
||||
event_byte = ((\1) / 8)
|
||||
ld hl, wEventFlags + event_byte
|
||||
bit (\1) % 8, [hl]
|
||||
set (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
CheckAndResetEvent: MACRO
|
||||
event_byte = ((\1) / 8)
|
||||
ld hl, wEventFlags + event_byte
|
||||
bit (\1) % 8, [hl]
|
||||
res (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
CheckAndSetEventA: MACRO
|
||||
ld a, [wEventFlags + ((\1) / 8)]
|
||||
bit (\1) % 8, a
|
||||
set (\1) % 8, a
|
||||
ld [wEventFlags + ((\1) / 8)], a
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
CheckAndResetEventA: MACRO
|
||||
ld a, [wEventFlags + ((\1) / 8)]
|
||||
bit (\1) % 8, a
|
||||
res (\1) % 8, a
|
||||
ld [wEventFlags + ((\1) / 8)], a
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
SetEvent: MACRO
|
||||
event_byte = ((\1) / 8)
|
||||
ld hl, wEventFlags + event_byte
|
||||
set (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
SetEventReuseHL: MACRO
|
||||
IF event_byte != ((\1) / 8)
|
||||
event_byte = ((\1) / 8)
|
||||
ld hl, wEventFlags + event_byte
|
||||
ENDC
|
||||
|
||||
set (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
;\2 = event index of the last event used before the branch
|
||||
SetEventAfterBranchReuseHL: MACRO
|
||||
event_byte = ((\2) / 8)
|
||||
IF event_byte != ((\1) / 8)
|
||||
event_byte = ((\1) / 8)
|
||||
ld hl, wEventFlags + event_byte
|
||||
ENDC
|
||||
|
||||
set (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
; dangerous, only use when HL is guaranteed to be the desired value
|
||||
;\1 = event index
|
||||
SetEventForceReuseHL: MACRO
|
||||
event_byte = ((\1) / 8)
|
||||
set (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
;\2 = event index
|
||||
;\3, \4, ... = additional (optional) event indices
|
||||
SetEvents: MACRO
|
||||
SetEvent \1
|
||||
rept (_NARG + -1)
|
||||
SetEventReuseHL \2
|
||||
shift
|
||||
endr
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
ResetEvent: MACRO
|
||||
event_byte = ((\1) / 8)
|
||||
ld hl, wEventFlags + event_byte
|
||||
res (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
ResetEventReuseHL: MACRO
|
||||
IF event_byte != ((\1) / 8)
|
||||
event_byte = ((\1) / 8)
|
||||
ld hl, wEventFlags + event_byte
|
||||
ENDC
|
||||
|
||||
res (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
;\2 = event index of the last event used before the branch
|
||||
ResetEventAfterBranchReuseHL: MACRO
|
||||
event_byte = ((\2) / 8)
|
||||
IF event_byte != ((\1) / 8)
|
||||
event_byte = ((\1) / 8)
|
||||
ld hl, wEventFlags + event_byte
|
||||
ENDC
|
||||
|
||||
res (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
; dangerous, only use when HL is guaranteed to be the desired value
|
||||
;\1 = event index
|
||||
ResetEventForceReuseHL: MACRO
|
||||
event_byte = ((\1) / 8)
|
||||
res (\1) % 8, [hl]
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
;\2 = event index
|
||||
;\3 = event index (optional)
|
||||
ResetEvents: MACRO
|
||||
ResetEvent \1
|
||||
rept (_NARG + -1)
|
||||
ResetEventReuseHL \2
|
||||
shift
|
||||
endr
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
;\2 = number of bytes away from the base address (optional, for matching the ROM)
|
||||
dbEventFlagBit: MACRO
|
||||
IF _NARG > 1
|
||||
db ((\1) % 8) + ((\2) * 8)
|
||||
ELSE
|
||||
db ((\1) % 8)
|
||||
ENDC
|
||||
ENDM
|
||||
|
||||
;\1 = event index
|
||||
;\2 = number of bytes away from the base address (optional, for matching the ROM)
|
||||
dwEventFlagAddress: MACRO
|
||||
IF _NARG > 1
|
||||
dw wEventFlags + ((\1) / 8) - (\2)
|
||||
ELSE
|
||||
dw wEventFlags + ((\1) / 8)
|
||||
ENDC
|
||||
ENDM
|
||||
|
||||
;\1 = start
|
||||
;\2 = end
|
||||
SetEventRange: MACRO
|
||||
event_start_byte = ((\1) / 8)
|
||||
event_end_byte = ((\2) / 8)
|
||||
|
||||
IF event_end_byte < event_start_byte
|
||||
FAIL "Incorrect argument order in SetEventRange."
|
||||
ENDC
|
||||
|
||||
IF event_start_byte == event_end_byte
|
||||
ld a, [wEventFlags + event_start_byte]
|
||||
or (1 << (((\2) % 8) + 1)) - (1 << ((\1) % 8))
|
||||
ld [wEventFlags + event_start_byte], a
|
||||
ELSE
|
||||
event_fill_start = event_start_byte + 1
|
||||
event_fill_count = event_end_byte - event_start_byte - 1
|
||||
|
||||
IF ((\1) % 8) == 0
|
||||
event_fill_start = event_fill_start + -1
|
||||
event_fill_count = event_fill_count + 1
|
||||
ELSE
|
||||
ld a, [wEventFlags + event_start_byte]
|
||||
or $ff - ((1 << ((\1) % 8)) - 1)
|
||||
ld [wEventFlags + event_start_byte], a
|
||||
ENDC
|
||||
|
||||
IF ((\2) % 8) == 7
|
||||
event_fill_count = event_fill_count + 1
|
||||
ENDC
|
||||
|
||||
IF event_fill_count == 1
|
||||
ld hl, wEventFlags + event_fill_start
|
||||
ld [hl], $ff
|
||||
ENDC
|
||||
|
||||
IF event_fill_count > 1
|
||||
ld a, $ff
|
||||
ld hl, wEventFlags + event_fill_start
|
||||
|
||||
REPT event_fill_count + -1
|
||||
ld [hli], a
|
||||
ENDR
|
||||
|
||||
ld [hl], a
|
||||
ENDC
|
||||
|
||||
IF ((\2) % 8) == 0
|
||||
ld hl, wEventFlags + event_end_byte
|
||||
set 0, [hl]
|
||||
ELSE
|
||||
IF ((\2) % 8) != 7
|
||||
ld a, [wEventFlags + event_end_byte]
|
||||
or (1 << (((\2) % 8) + 1)) - 1
|
||||
ld [wEventFlags + event_end_byte], a
|
||||
ENDC
|
||||
ENDC
|
||||
ENDC
|
||||
ENDM
|
||||
|
||||
;\1 = start
|
||||
;\2 = end
|
||||
;\3 = assume a is 0 if present
|
||||
ResetEventRange: MACRO
|
||||
event_start_byte = ((\1) / 8)
|
||||
event_end_byte = ((\2) / 8)
|
||||
|
||||
IF event_end_byte < event_start_byte
|
||||
FAIL "Incorrect argument order in ResetEventRange."
|
||||
ENDC
|
||||
|
||||
IF event_start_byte == event_end_byte
|
||||
ld a, [wEventFlags + event_start_byte]
|
||||
and ~((1 << (((\2) % 8) + 1)) - (1 << ((\1) % 8))) & $ff
|
||||
ld [wEventFlags + event_start_byte], a
|
||||
ELSE
|
||||
event_fill_start = event_start_byte + 1
|
||||
event_fill_count = event_end_byte - event_start_byte - 1
|
||||
|
||||
IF ((\1) % 8) == 0
|
||||
event_fill_start = event_fill_start + -1
|
||||
event_fill_count = event_fill_count + 1
|
||||
ELSE
|
||||
ld a, [wEventFlags + event_start_byte]
|
||||
and ~($ff - ((1 << ((\1) % 8)) - 1)) & $ff
|
||||
ld [wEventFlags + event_start_byte], a
|
||||
ENDC
|
||||
|
||||
IF ((\2) % 8) == 7
|
||||
event_fill_count = event_fill_count + 1
|
||||
ENDC
|
||||
|
||||
IF event_fill_count == 1
|
||||
ld hl, wEventFlags + event_fill_start
|
||||
ld [hl], 0
|
||||
ENDC
|
||||
|
||||
IF event_fill_count > 1
|
||||
ld hl, wEventFlags + event_fill_start
|
||||
|
||||
; force xor a if we just to wrote to it above
|
||||
IF (_NARG < 3) || (((\1) % 8) != 0)
|
||||
xor a
|
||||
ENDC
|
||||
|
||||
REPT event_fill_count + -1
|
||||
ld [hli], a
|
||||
ENDR
|
||||
|
||||
ld [hl], a
|
||||
ENDC
|
||||
|
||||
IF ((\2) % 8) == 0
|
||||
ld hl, wEventFlags + event_end_byte
|
||||
res 0, [hl]
|
||||
ELSE
|
||||
IF ((\2) % 8) != 7
|
||||
ld a, [wEventFlags + event_end_byte]
|
||||
and ~((1 << (((\2) % 8) + 1)) - 1) & $ff
|
||||
ld [wEventFlags + event_end_byte], a
|
||||
ENDC
|
||||
ENDC
|
||||
ENDC
|
||||
ENDM
|
||||
|
||||
; returns whether both events are set in Z flag
|
||||
; This is counter-intuitive because the other event checks set the Z flag when
|
||||
; the event is not set, but this sets the Z flag when the event is set.
|
||||
;\1 = event index 1
|
||||
;\2 = event index 2
|
||||
;\3 = try to reuse a (optional)
|
||||
CheckBothEventsSet: MACRO
|
||||
IF ((\1) / 8) == ((\2) / 8)
|
||||
IF (_NARG < 3) || (((\1) / 8) != event_byte)
|
||||
event_byte = ((\1) / 8)
|
||||
ld a, [wEventFlags + ((\1) / 8)]
|
||||
ENDC
|
||||
and (1 << ((\1) % 8)) | (1 << ((\2) % 8))
|
||||
cp (1 << ((\1) % 8)) | (1 << ((\2) % 8))
|
||||
ELSE
|
||||
; This case doesn't happen in the original ROM.
|
||||
IF ((\1) % 8) == ((\2) % 8)
|
||||
push hl
|
||||
ld a, [wEventFlags + ((\1) / 8)]
|
||||
ld hl, wEventFlags + ((\2) / 8)
|
||||
and [hl]
|
||||
cpl
|
||||
bit ((\1) % 8), a
|
||||
pop hl
|
||||
ELSE
|
||||
push bc
|
||||
ld a, [wEventFlags + ((\1) / 8)]
|
||||
and (1 << ((\1) % 8))
|
||||
ld b, a
|
||||
ld a, [wEventFlags + ((\2) / 8)]
|
||||
and (1 << ((\2) % 8))
|
||||
or b
|
||||
cp (1 << ((\1) % 8)) | (1 << ((\2) % 8))
|
||||
pop bc
|
||||
ENDC
|
||||
ENDC
|
||||
ENDM
|
||||
|
||||
; returns the complement of whether either event is set in Z flag
|
||||
;\1 = event index 1
|
||||
;\2 = event index 2
|
||||
CheckEitherEventSet: MACRO
|
||||
IF ((\1) / 8) == ((\2) / 8)
|
||||
ld a, [wEventFlags + ((\1) / 8)]
|
||||
and (1 << ((\1) % 8)) | (1 << ((\2) % 8))
|
||||
ELSE
|
||||
; This case doesn't happen in the original ROM.
|
||||
IF ((\1) % 8) == ((\2) % 8)
|
||||
push hl
|
||||
ld a, [wEventFlags + ((\1) / 8)]
|
||||
ld hl, wEventFlags + ((\2) / 8)
|
||||
or [hl]
|
||||
bit ((\1) % 8), a
|
||||
pop hl
|
||||
ELSE
|
||||
push bc
|
||||
ld a, [wEventFlags + ((\1) / 8)]
|
||||
and (1 << ((\1) % 8))
|
||||
ld b, a
|
||||
ld a, [wEventFlags + ((\2) / 8)]
|
||||
and (1 << ((\2) % 8))
|
||||
or b
|
||||
pop bc
|
||||
ENDC
|
||||
ENDC
|
||||
ENDM
|
||||
|
||||
; for handling fixed event bits when events are inserted/removed
|
||||
;\1 = event index
|
||||
;\2 = fixed flag bit
|
||||
AdjustEventBit: MACRO
|
||||
IF ((\1) % 8) != (\2)
|
||||
add ((\1) % 8) - (\2)
|
||||
ENDC
|
||||
ENDM
|
||||
|
Loading…
Reference in New Issue
Block a user