From bbe3e21a54897d8ab3bec3fbbf02e908363dd28b Mon Sep 17 00:00:00 2001 From: zerico <71151164+ZERICO2005@users.noreply.github.com> Date: Tue, 21 Apr 2026 12:30:14 -0600 Subject: [PATCH] added CRT absolute value functions --- src/crt/babs.src | 13 +++++++++++++ src/crt/i48abs.src | 18 ++++++++++++++++++ src/crt/iabs.src | 16 ++++++++++++++++ src/crt/labs.src | 14 ++++++++++++++ src/crt/llabs.src | 14 ++++++++++++++ src/crt/sabs.src | 14 ++++++++++++++ 6 files changed, 89 insertions(+) create mode 100644 src/crt/babs.src create mode 100644 src/crt/i48abs.src create mode 100644 src/crt/iabs.src create mode 100644 src/crt/labs.src create mode 100644 src/crt/llabs.src create mode 100644 src/crt/sabs.src diff --git a/src/crt/babs.src b/src/crt/babs.src new file mode 100644 index 000000000..e7a446e23 --- /dev/null +++ b/src/crt/babs.src @@ -0,0 +1,13 @@ + .assume adl=1 + + .section .text + + .global __babs + .type __babs, @function + +__babs: + ; A = abs(A) + or a, a + ret p + neg + ret diff --git a/src/crt/i48abs.src b/src/crt/i48abs.src new file mode 100644 index 000000000..984448c5e --- /dev/null +++ b/src/crt/i48abs.src @@ -0,0 +1,18 @@ + .assume adl=1 + + .section .text + + .global __i48abs + .type __i48abs, @function + +__i48abs: + ; UDE:UHL = abs(UDE:UHL) + ex de, hl + add hl, de + or a, a + sbc hl, de + ex de, hl + ret p + jp __i48neg + + .extern __i48neg diff --git a/src/crt/iabs.src b/src/crt/iabs.src new file mode 100644 index 000000000..02cf2b396 --- /dev/null +++ b/src/crt/iabs.src @@ -0,0 +1,16 @@ + .assume adl=1 + + .section .text + + .global __iabs + .type __iabs, @function + +__iabs: + ; UHL = abs(UHL) + add hl, bc + or a, a + sbc hl, bc + ret p + jp __ineg + + .extern __ineg diff --git a/src/crt/labs.src b/src/crt/labs.src new file mode 100644 index 000000000..f4420595d --- /dev/null +++ b/src/crt/labs.src @@ -0,0 +1,14 @@ + .assume adl=1 + + .section .text + + .global __labs + .type __labs, @function + +__labs: + ; E:UHL = abs(E:UHL) + bit 7, e + ret z + jp __lneg + + .extern __lneg diff --git a/src/crt/llabs.src b/src/crt/llabs.src new file mode 100644 index 000000000..ac0aaa1f4 --- /dev/null +++ b/src/crt/llabs.src @@ -0,0 +1,14 @@ + .assume adl=1 + + .section .text + + .global __llabs + .type __llabs, @function + +__llabs: + ; BC:UDE:UHL = abs(BC:UDE:UHL) + bit 7, b + ret z + jp __llneg + + .extern __llneg diff --git a/src/crt/sabs.src b/src/crt/sabs.src new file mode 100644 index 000000000..ad71ba1f3 --- /dev/null +++ b/src/crt/sabs.src @@ -0,0 +1,14 @@ + .assume adl=1 + + .section .text + + .global __sabs + .type __sabs, @function + +__sabs: + ; HL = abs(HL) + bit 7, h + ret z + jp __sneg + + .extern __sneg