Skip to content

Instantly share code, notes, and snippets.

@formicant
Last active August 17, 2025 09:34
Show Gist options
  • Select an option

  • Save formicant/f4226fbbb39588ddf7ea1fb65e2df11c to your computer and use it in GitHub Desktop.

Select an option

Save formicant/f4226fbbb39588ddf7ea1fb65e2df11c to your computer and use it in GitHub Desktop.
Z80 word to BCD
; Converts a two-byte value to BCD
; Works in const time, no jumps
; params: `hl` - word value
; return: `ahl` - 5 digits in BCD
; spoils: `f`, `c`
; time: 454, length: 112
wordToBcd:
IFUSED
; double dabble algorithm
xor a
DUP 3
sla h
adc a
EDUP
DUP 3
sla h
adc a : daa
EDUP
sla h
DUP 2
adc a : daa
rl h
EDUP
sla l
adc a : daa
rl h
sla l
adc a : daa : ld c, a
ld a, h : adc a : daa : ld h, a
DUP 2
sla l
ld a, c : adc a : daa : ld c, a
ld a, h : adc a : daa : ld h, a
EDUP
sla l
DUP 4
ld a, c : adc a : daa : ld c, a
ld a, h : adc a : daa : ld h, a
rl l
EDUP
ld a, l : ld l, c
ret
ENDIF
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment