#ifndef included_i16tof24
#define included_i16tof24
i16tof24:
;Inputs:
; HL holds a 16-bit signed integer, (-32768 to 32767)
;Outputs:
; Converts to an f24 float in AHL
; returns z flag set if zero, nz otherwise :)
bit 7,h
jr z,i16tof24_pos
xor a
sub l
ld l,a
sbc a,a
sub h
ld h,a
ld b,$BF+16
.db $11 ;start of `ld de,**`, eats the next two bytes
#ifndef included_u16tof24
#define included_u16tof24
u16tof24:
#else
.echo "Tip: i16tof24 already has a subroutine for u16tof24. Save space by including i16tof24.z80 first"
#endif
i16tof24_pos:
ld b,$3F+16 ;Initial exponent and sign
;Check if HL is 0, if so return AHL == 0x000000
ld a,h
or l
ret z
; HL is non-zero
; shift HL left until there is an overflow (the implicit bit)
; meanwhile, decrement B, the exponent each iteration
dec b
add hl,hl
jr nc,$-2
ld a,b
ret
#endif