strings: Added decimal printing
authorLukas Krickl <lukas@krickl.dev>
Sat, 23 Aug 2025 05:43:53 +0000 (07:43 +0200)
committerLukas Krickl <lukas@krickl.dev>
Sat, 23 Aug 2025 05:43:53 +0000 (07:43 +0200)
src/strings.s

index edb2302f9a5f9d02986284e94d7ddb6fb1f1c43c..d43a9615fbe3385e22d82f3f7c125aaaf083c4dc 100644 (file)
@@ -81,12 +81,58 @@ puts:
   jr puts REL
 @done:
   ret
-       
+
+       ; counts how many times
+       ; a number fits into n
+       ; inputs:
+       ;               a: a number
+       ;               $1: factor 
+       ;       returns:
+       ;               b: count
+#macro putn_count
+.beginscope
+       ld b, 0
+@again:
+               cp a, $1
+               jr z, @done REL
+               jr c, @done REL
+               sub a, $1       
+               inc b
+       jr @again REL
+@done:
+.endscope
+#endmacro
+
        ; prints a number in decimal
        ; input:
        ;        de: tile location
        ;               a: the value
 putn:
+       putn_count 100
+       ; print 100s if > 0
+       push af
+       ld a, b
+       cp a, 0
+       jr z, @skip_100s REL
+               add a, FONT_OFFSET+1
+               ld [de], a      
+               inc de
+@skip_100s:
+       pop af
+
+       putn_count 10
+       ; print 10s if > 0
+       push af
+       ld a, b
+       cp a, 0
+       jr z, @skip_10s REL
+               add a, FONT_OFFSET+1
+               ld [de], a
+               inc de
+@skip_10s:
+       pop af
+       
+       ; print remainder
        add a, FONT_OFFSET+1
        ld [de], a
        ret