From 8824bb5c249b645f5d9aa0d2747535180a8f9753 Mon Sep 17 00:00:00 2001 From: Lukas Krickl Date: Mon, 2 Feb 2026 17:36:42 +0100 Subject: [PATCH] math: Added carry flag for m16 --- src/attributes.s | 7 +++++++ src/defs.s | 4 ++++ src/math.s | 19 +++++++++++++++++++ src/wram.s | 2 ++ 4 files changed, 32 insertions(+) diff --git a/src/attributes.s b/src/attributes.s index f70e9d3..ed325fb 100644 --- a/src/attributes.s +++ b/src/attributes.s @@ -152,6 +152,13 @@ act_attr_take_weapon_damage: pop de call act_attr_write_hp + + BREAK + ; if m16_flags carry is set + ; -> die + ld a, [m16_flags] + and a, M16_CARRY + ret z ; no carry? call act_die ret diff --git a/src/defs.s b/src/defs.s index 9e8e307..7584686 100644 --- a/src/defs.s +++ b/src/defs.s @@ -316,3 +316,7 @@ .de os_data, (OS_WIDTH * OS_HEIGHT) .de os_size, 0 + + ; 16 bit math flags +.se 1 +.de M16_CARRY, 1 diff --git a/src/math.s b/src/math.s index c83aed8..caec838 100644 --- a/src/math.s +++ b/src/math.s @@ -53,7 +53,11 @@ ; m16_a/m16_b ; returns: ; m16_a: m16_a + m16_b + ; m16_flags m16_add: + xor a, a + ld [m16_flags], a + ld a, [m16_b] ld b, a ld a, [m16_a] @@ -69,6 +73,11 @@ m16_add: ; high + carry stored adc a, b ld [m16_a+1], a + ret nc ; no carry? good to exit + + ; when carry is set -> set flag + ld a, M16_CARRY + ld [m16_flags], a ret @@ -77,7 +86,11 @@ m16_add: ; m16_a/m16_b ; returns: ; m16_a: m16_a - m16_b + ; m16_flags m16_sub: + xor a, a + ld [m16_flags], a + ld a, [m16_b] ld b, a ld a, [m16_a] @@ -93,4 +106,10 @@ m16_sub: ; high + carry stored sbc a, b ld [m16_a+1], a + ret nc + + ; when carry is set -> set flag + ld a, M16_CARRY + ld [m16_flags], a + ret diff --git a/src/wram.s b/src/wram.s index b30b9a1..9099c76 100644 --- a/src/wram.s +++ b/src/wram.s @@ -146,6 +146,8 @@ col_x: .adv 1 ; store in LE m16_a: .adv 2 m16_b: .adv 2 + ; flags for 16 bit math +m16_flags: .adv 1 ticks: .adv 1 -- 2.30.2