Tell what the following function is doing: Call_000_3ef2: Jump_000_3ef2: ld a, e ld [$c109], a ld a, d ld [$c10a], a ld c, [hl] inc hl ld b, [hl] inc hl push hl ld h, d ld l, e add hl, bc ld d, h ld e, l pop hl ld c, [hl] inc hl ld b, [hl] add hl, bc ld a, [hl-] ld [$c106], a push hl ld hl, $c106 scf rl [hl] jr c, jr_000_3f54 jr_000_3f16: call Call_000_3f85 jr_000_3f19: xor a call Call_000_3fc9 adc a call Call_000_3fc9 adc a call Call_000_3fc9 adc a call Call_000_3fc9 adc a call Call_000_3fc9 adc a call Call_000_3fc9 adc a call Call_000_3fc9 adc a call Call_000_3fc9 adc a dec de ld [de], a dec bc ld a, b or c jr nz, jr_000_3f19 ld a, [$c10a] cp d jr nz, jr_000_3f54 ld a, [$c109] cp e jr c, jr_000_3f54 jr jr_000_3f83 jr_000_3f4f: call Call_000_3fc9 jr nc, jr_000_3f16 jr_000_3f54: call Call_000_3f85 inc l ld [hl], c inc l ld [hl], b dec l dec l call Call_000_3f85 push hl inc bc inc bc inc bc push bc inc l ld c, [hl] inc l ld b, [hl] ld h, d ld l, e dec hl add hl, bc pop bc jr_000_3f6e: ld a, [hl-] dec de ld [de], a dec bc ld a, b or c jr nz, jr_000_3f6e pop hl ld a, [$c10a] cp d jr nz, jr_000_3f4f ld a, [$c109] cp e jr c, jr_000_3f4f jr_000_3f83: pop hl ret Call_000_3f85: xor a ld b, a ld c, a call Call_000_3fdf adc a call Call_000_3fdf adc a jr z, jr_000_3fbc dec a jr z, jr_000_3fb0 dec a jr z, jr_000_3fa4 ld a, $04 jr_000_3f9a: call Call_000_3fdf rl c rl b dec a jr nz, jr_000_3f9a jr_000_3fa4: ld a, $04 jr_000_3fa6: call Call_000_3fdf rl c rl b dec a jr nz, jr_000_3fa6 jr_000_3fb0: ld a, $04 jr_000_3fb2: call Call_000_3fdf rl c rl b dec a jr nz, jr_000_3fb2 jr_000_3fbc: ld a, $04 jr_000_3fbe: call Call_000_3fdf rl c rl b dec a jr nz, jr_000_3fbe ret Call_000_3fc9: sla [hl] ret nz di push af push hl add sp, $06 pop hl ld a, [hl-] ld [$c106], a push hl add sp, -$06 pop hl pop af rl [hl] ei ret Call_000_3fdf: sla [hl] ret nz di push af push hl add sp, $08 pop hl ld a, [hl-] ld [$c106], a push hl add sp, -$08 pop hl pop af rl [hl] ei ret add sp, -$08 pop hl pop af rl [hl] ei ret ld d, $fb ret