?login_element?
?pathlinks? – Rev 1485
Blame |
Last modification |
View Log
| Download
#ifndef included_f32tou16
#define included_f32tou16
f32tou16:
;Inputs: HL points to an f32 float
;Outputs: HL is the unsigned 16-bit integer part of the input (rounded down)
;Special cases:
; NaN ==> 0
; greater than 65535 ==> 65535
; less than 0 ==> 0
push de
push bc
push af
ld c,(hl)
inc hl
ld e,(hl)
inc hl
ld a,(hl)
rlca
scf
rra
ld d,a
inc hl
ld a,(hl)
adc a,a
ccf
jr nc,f32tou16_return_carry
or a
jr z,f32tou16_return_carry
inc a
jr z,f32tou16_infnan
add a,256-143
jr c,f32tou16_return_carry
add a,15
jr nc,f32tou16_return_carry
ld b,a
inc b
ex de,hl
xor a
ld e,a
add hl,hl
rl e
rla
djnz $-4
ld l,e
ld h,a
.db $01 ; start of `ld bc,**` to skip the next two bytes
f32tou16_return_carry:
sbc hl,hl
f32tou16_return:
pop af
pop bc
pop de
ret
f32tou16_infnan:
ld a,d
add a,a
or e
or c
sub 1
jr f32tou16_return_carry
#endif