From: Lukas Krickl Date: Thu, 27 Mar 2025 12:59:23 +0000 (+0100) Subject: wip: state update routine X-Git-Url: https://git.krickl.dev/?a=commitdiff_plain;h=74f4bca0c8d6f67e8f2ca52025c24ddaf91bf900;p=gbrg%2F.git wip: state update routine --- diff --git a/src/state.s b/src/state.s index 136ebe9..0950bc0 100644 --- a/src/state.s +++ b/src/state.s @@ -27,15 +27,48 @@ st_update: call call_hl + pop hl ; hl = original actor ptr = dst + ; if routine returns ; a new ptr in bc ; set state to this pointer ; otherwise use state's next + ld a, b + or a, c + cp a, 0 + jr z, @set_next_state_default REL - pop de - ret + ; set returned state + push bc + pop de ; de = src + + ld bc, st_size + jp memset +@set_next_state_default: + + ; set default state + ; hl = actor ptr + push hl + + inc hl + inc hl + ; hl = st_next + ld a, [hl+] + ld d, a + ld a, [hl] + ld e, a ; de = next state ptr + + pop hl + + ld bc, st_size + jp memset + ; null state + ; do nothing and return st_null_fn: + xor a, a + ld b, a + ld c, a ret st_null: