shithub: pokecrystal

Download patch

ref: 7281681bcdc7eb851b7bfdefe76f3e4be507ea32
parent: cce3534cef6818c87710257eab08580189a27809
author: Bryan Bishop <[email protected]>
date: Wed May 30 20:50:43 EDT 2012

copy in PrintBCDNumber from pokered

--- a/main.asm
+++ b/main.asm
@@ -365,7 +365,59 @@
 	ret
 ; 0x3376
 
-INCBIN "baserom.gbc",$3376,$38f2 - $3376
+INCBIN "baserom.gbc",$3376,$38bb - $3376
+
+PrintBCDNumber: ; 38bb
+; function to print a BCD (Binary-coded decimal) number
+; de = address of BCD number
+; hl = destination address
+; c = flags and length
+; bit 7: if set, do not print leading zeroes
+;        if unset, print leading zeroes
+; bit 6: if set, left-align the string (do not pad empty digits with spaces)
+;        if unset, right-align the string
+; bit 5: if set, print currency symbol at the beginning of the string
+;        if unset, do not print the currency symbol
+; bits 0-4: length of BCD number in bytes
+; Note that bits 5 and 7 are modified during execution. The above reflects
+; their meaning at the beginning of the functions's execution.
+    ld b, c ; save flags in b
+    res 7, c
+    res 6, c
+    res 5, c ; c now holds the length
+    bit 5, b
+    jr z, .loop\@
+    bit 7, b
+    jr nz, .loop\@
+    ld [hl], "¥"
+    inc hl
+.loop\@
+    ld a, [de]
+    swap a
+    call PrintBCDDigit ; print upper digit
+    ld a, [de]
+    call PrintBCDDigit ; print lower digit
+    inc de
+    dec c
+    jr nz, .loop\@
+    bit 7, b ; were any non-zero digits printed?
+    jr z, .done\@ ; if so, we are done
+.numberEqualsZero\@ ; if every digit of the BCD number is zero
+    bit 6, b ; left or right alignment?
+    jr nz, .skipRightAlignmentAdjustment\@
+    dec hl ; if the string is right-aligned, it needs to be moved back one space
+.skipRightAlignmentAdjustment\@
+    bit 5, b
+    jr z, .skipCurrencySymbol\@
+    ld [hl], "¥" ; currency symbol
+    inc hl
+.skipCurrencySymbol\@
+    ld [hl], "0"
+    call PrintLetterDelay
+    inc hl
+.done\@
+    ret
+; 0x38f2
 
 PrintBCDDigit: ; 38f2
     and a, %00001111