From 74f4bca0c8d6f67e8f2ca52025c24ddaf91bf900 Mon Sep 17 00:00:00 2001 From: Lukas Krickl Date: Thu, 27 Mar 2025 13:59:23 +0100 Subject: [PATCH] wip: state update routine --- src/state.s | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) 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: -- 2.30.2