From f78cb404aa995f7b1bc000ef41078fa3e8814807 Mon Sep 17 00:00:00 2001 From: zerico <71151164+ZERICO2005@users.noreply.github.com> Date: Thu, 26 Feb 2026 15:30:38 -0700 Subject: [PATCH 1/2] size optimized bss_zeroize --- src/crt/crt0.S | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/src/crt/crt0.S b/src/crt/crt0.S index 12b4c7ce1..0f04a9319 100644 --- a/src/crt/crt0.S +++ b/src/crt/crt0.S @@ -174,23 +174,16 @@ ___libload_libs_ret: di .L.bss_zeroize: - ld hl, ___bss_len - ld bc, 0 + ld bc, ___bss_len + 1 + ld hl, ___bss_low - 1 xor a, a - sbc hl, bc - jr z, .L.bss_done - ld de, ___bss_low - push de - ld (de), a - dec hl - sbc hl, bc - pop hl - jr z, .L.bss_done - ld bc, ___bss_len - dec bc - inc de - ldir -.L.bss_done: + db $E6 ; and a, $77 (clears carry) + ; jr .L.bss_start +.L.bss_loop: ; 7F + 1R + 1W + 1 + ld (hl), a +; .L.bss_start: + cpi + jp pe, .L.bss_loop res 1, (iy + 0x0D) ; no text buffer res 3, (iy + 0x4A) ; use first shadow buffer From 93e80674940ebcc6bfe1ba377ae3a3791d780235 Mon Sep 17 00:00:00 2001 From: zerico <71151164+ZERICO2005@users.noreply.github.com> Date: Thu, 26 Feb 2026 15:51:32 -0700 Subject: [PATCH 2/2] use ti.boot.memclear to zeroize bss --- src/crt/crt0.S | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/crt/crt0.S b/src/crt/crt0.S index 0f04a9319..3a7112997 100644 --- a/src/crt/crt0.S +++ b/src/crt/crt0.S @@ -37,6 +37,7 @@ .equ ti.PopRealO1, 0x0205DC .equ ti.MovFrOP1, 0x02032C .equ ti.ClrLCDFull, 0x020808 + .equ ti.boot.memclear, 0x0000B0 .section .header,"ax",@progbits @@ -173,17 +174,15 @@ ___libload_libs_ret: call ti.usb_DisableTimer di -.L.bss_zeroize: - ld bc, ___bss_len + 1 - ld hl, ___bss_low - 1 - xor a, a - db $E6 ; and a, $77 (clears carry) - ; jr .L.bss_start -.L.bss_loop: ; 7F + 1R + 1W + 1 - ld (hl), a -; .L.bss_start: - cpi - jp pe, .L.bss_loop + ; zeroize bss + ld hl, ___bss_low + ld bc, ___bss_len + push bc + push hl + ; void memclear(void *dst, size_t size) + call ti.boot.memclear + pop hl + pop hl res 1, (iy + 0x0D) ; no text buffer res 3, (iy + 0x4A) ; use first shadow buffer