2021-03-06 22:21:52 -06:00
|
|
|
keep obj/fpextra
|
|
|
|
mcopy fpextra.macros
|
|
|
|
|
|
|
|
****************************************************************
|
|
|
|
*
|
|
|
|
* FPextra - extra floating-point routines
|
|
|
|
*
|
|
|
|
* This code provides routines dealing with floating-point
|
|
|
|
* numbers that are used only by ORCA/C, supplementing the
|
|
|
|
* ones in SysFloat.
|
|
|
|
*
|
|
|
|
****************************************************************
|
|
|
|
*
|
|
|
|
fpextra private dummy segment
|
|
|
|
end
|
|
|
|
|
|
|
|
****************************************************************
|
|
|
|
*
|
|
|
|
* ~SinglePrecision - limit fp value to single precision & range
|
|
|
|
*
|
|
|
|
* Inputs:
|
|
|
|
* extended-format real on stack
|
|
|
|
*
|
|
|
|
****************************************************************
|
|
|
|
*
|
|
|
|
~SinglePrecision start
|
|
|
|
tsc
|
|
|
|
clc
|
2022-06-25 18:27:20 -05:00
|
|
|
adc #4
|
|
|
|
ldy #0
|
2021-03-06 22:21:52 -06:00
|
|
|
phy
|
|
|
|
pha
|
|
|
|
phy
|
|
|
|
pha
|
|
|
|
phy
|
|
|
|
pha
|
|
|
|
phy
|
|
|
|
pha
|
|
|
|
FX2S
|
|
|
|
FS2X
|
|
|
|
rtl
|
|
|
|
end
|
|
|
|
|
|
|
|
****************************************************************
|
|
|
|
*
|
|
|
|
* ~DoublePrecision - limit fp value to double precision & range
|
|
|
|
*
|
|
|
|
* Inputs:
|
|
|
|
* extended-format real on stack
|
|
|
|
*
|
|
|
|
****************************************************************
|
|
|
|
*
|
|
|
|
~DoublePrecision start
|
|
|
|
tsc
|
|
|
|
clc
|
2022-06-25 18:27:20 -05:00
|
|
|
adc #4
|
|
|
|
ldy #0
|
2021-03-06 22:21:52 -06:00
|
|
|
phy
|
|
|
|
pha
|
|
|
|
phy
|
|
|
|
pha
|
|
|
|
phy
|
|
|
|
pha
|
|
|
|
phy
|
|
|
|
pha
|
|
|
|
FX2D
|
|
|
|
FD2X
|
|
|
|
rtl
|
|
|
|
end
|
|
|
|
|
|
|
|
****************************************************************
|
|
|
|
*
|
|
|
|
* ~CompPrecision - limit fp value to comp precision & range
|
|
|
|
*
|
|
|
|
* Inputs:
|
|
|
|
* extended-format real on stack
|
|
|
|
*
|
2021-11-27 22:16:54 -06:00
|
|
|
* Note: This avoids calling FX2C on negative numbers,
|
|
|
|
* because it is buggy for certain values.
|
|
|
|
*
|
2021-03-06 22:21:52 -06:00
|
|
|
****************************************************************
|
|
|
|
*
|
|
|
|
~CompPrecision start
|
2021-11-30 20:19:57 -06:00
|
|
|
tsc round to integer
|
|
|
|
clc
|
2022-06-25 18:27:20 -05:00
|
|
|
adc #4
|
|
|
|
pea 0
|
2021-11-30 20:19:57 -06:00
|
|
|
pha
|
|
|
|
FRINTX
|
2022-06-25 18:27:20 -05:00
|
|
|
lda 4+8,s
|
2021-11-27 22:16:54 -06:00
|
|
|
pha save original sign
|
2022-06-25 18:27:20 -05:00
|
|
|
asl a force sign to positive
|
|
|
|
lsr a
|
|
|
|
sta 6+8,s
|
2021-11-27 22:16:54 -06:00
|
|
|
tsc limit precision
|
2021-03-06 22:21:52 -06:00
|
|
|
clc
|
2022-06-25 18:27:20 -05:00
|
|
|
adc #6
|
|
|
|
ldy #0
|
2021-03-06 22:21:52 -06:00
|
|
|
phy
|
|
|
|
pha
|
|
|
|
phy
|
|
|
|
pha
|
|
|
|
phy
|
|
|
|
pha
|
|
|
|
phy
|
|
|
|
pha
|
|
|
|
FX2C
|
|
|
|
FC2X
|
2021-11-27 22:16:54 -06:00
|
|
|
pla restore original sign
|
2022-06-25 18:27:20 -05:00
|
|
|
bpl ret
|
|
|
|
lda 4+8,s
|
|
|
|
ora #$8000
|
|
|
|
sta 4+8,s
|
2021-11-27 22:16:54 -06:00
|
|
|
ret rtl
|
2021-03-06 22:21:52 -06:00
|
|
|
end
|
|
|
|
|