?login_element?
?pathlinks? – Rev 1485
Blame |
Last modification |
View Log
| Download
#ifndef included_xtof32
#define included_xtof32
#include "pushpop.z80"
xtof32:
;Inputs:
; HL points to the input extended-precision float
; BC points to where to output the result
;Outputs:
; The extended-precision float is converted to an f32 at BC.
;Destroys:
; None
;
call pushpop
xtof32_nopush:
; We don't need the first 5 bytes
inc hl
inc hl
inc hl
inc hl
inc hl
ld d,b
ld e,c
ldi
ldi
ld c,(hl)
inc hl
ld b,(hl)
inc hl
ld a,(hl)
;AB is the exponent and sign
add a,a
or b
jr z,xtof32_special
ld a,c
ld (de),a
inc de
ld c,(hl)
res 7,c
ld a,b
sub 129
ld (de),a
ld a,c
sbc a,63
jr c,xtof32_zero
jr nz,xtof32_inf
ld a,(de)
inc a
jr z,xtof32_inf
ld a,(hl)
add a,a ; get the sign
ld a,(de)
rra
ld (de),a
dec de
ld a,(de)
rla
rrca
ld (de),a
ret
xtof32_zero:
xor a
ld (de),a
dec de
ld (de),a
ret
xtof32_inf:
ex de,hl
ld a,(de)
or %01111111
ld (hl),a
dec hl
ld (hl),%10000000
dec hl
ld (hl),0
dec hl
ld (hl),0
ret
xtof32_special:
inc de
ld a,c
add a,a
jr c,xtof32_inf
jp p,xtof32_zero
xtof32_nan:
;significand needs to be non-zero to encode NaN
ld a,(hl)
or %01111111
ld (de),a
add a,a
dec de
ld (de),a
ret
#endif