Skip to content

Instantly share code, notes, and snippets.

@neuro-sys
Last active April 14, 2020 15:22
Show Gist options
  • Save neuro-sys/1a86f5fe2e77ff84547e9ed2f2c6f473 to your computer and use it in GitHub Desktop.
Save neuro-sys/1a86f5fe2e77ff84547e9ed2f2c6f473 to your computer and use it in GitHub Desktop.
org #8000
jp start
input dw 1234 ; 16 bit number as input
; IN HL 16-bit unsigned
; D 8-bit unsigned
; OUT HL is HL / D
; A remainder
; Corrupts B
divhld xor a
ld b, 16
divhld1 add hl, hl
rla
cp d
jp c, divhld2
sub d
inc l
divhld2 djnz divhld1
ret
; IN HL holds 16-bit number
; OUT HL additive persistence count
solve ld (solvek), hl ; k = input
xor a
ld (solvec), a ; c = 0
ld hl, 0
ld (solven), hl ; n = 0
; while k > 0
solve2 ld hl, (solvek)
ld d, 10
call divhld
ld (solvek), hl ; k = k / 10
ld c, a
ld b, 0
ld hl, (solven)
add hl, bc
ld (solven), hl ; n = n + k % 10
ld hl, (solvek)
ld a, l
or h
jr nz, solve2 ; if k != 0 repeat
ld hl, (solven)
ld (solvek), hl ; k = n
ld hl, 0
ld (solven), a ; n = 0
ld hl, solvec
inc (hl) ; c += 1
ld hl, (solvek)
ld d, 10
call divhld
ld a, l
or h
jr nz, solve2 ; if k / 10 != 0
ld hl, (solvec)
ret
solvek dw 0 ; 16-bit input
solven dw 0 ; 16-bit accumulator
solvec dw 0 ; counter
start ld hl, (input)
call solve
ld a, l
add '0'
call #bb5a
ret
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment