NEW
PREFIX
AUTO 4,1
*/--------------------------------------
* # FAdd,FSub,FMult,FDiv,FPwr
* Return X+Y, X-Y, X*Y, X/Y, X^Y
* ## ASM
* **In:**
* `>PUSHF X (float)`
* `>PUSHF Y (float)`
* `>SYSCALL fadd`
* `>SYSCALL fsub`
* `>SYSCALL fmult`
* `>SYSCALL fdiv`
* `>SYSCALL fpwr`
* ## RETURN VALUE
*  On stack (float)
*\--------------------------------------
K.FAdd			ldx #ROM.FADD
				.HS 2C					BIT ABS
K.FSub			ldx #ROM.FSUB
				.HS 2C					BIT ABS
K.FMult			ldx #ROM.FMULT
				.HS 2C					BIT ABS
K.FDiv			ldx #ROM.FDIV
				.HS 2C					BIT ABS
K.FPwr			ldx #ROM.PWR

				phx
				jsr MATH.PullFAC
				jsr MATH.PullARG
				
				plx
				jmp GP.RomCallPushFAC
*/--------------------------------------
* # Log,Sqr,Exp,Cos,Sin,Tan,ATan
* Return Log(x), Sqr(x), E^X, Cos(x), Sin(X), Tan(x), ATan(x)
* ## C
* `float log ( float x);`
* `float sqr ( float x);`
* `float exp ( float x);`
* `float cos ( float x);`
* `float sin ( float x);`
* `float tan ( float x);`
* `float atan ( float x);`
* ## ASM
* **In:**
* `>PUSHF x (Float)`
* `>SYSCALL log`
* ## RETURN VALUE
*  On stack (Float)
*\--------------------------------------
K.Log			ldx #ROM.LOG
				.HS 2C					BIT ABS
K.Sqr			ldx #ROM.SQR
				.HS 2C					BIT ABS
K.Exp			ldx #ROM.EXP
				.HS 2C					BIT ABS
K.Cos			ldx #ROM.COS
				.HS 2C					BIT ABS
K.Sin			ldx #ROM.SIN
				.HS 2C					BIT ABS
K.Tan			ldx #ROM.TAN
				.HS 2C					BIT ABS
K.ATan			ldx #ROM.ATAN

				phx
				jsr MATH.PullFAC
				
				plx
				jmp GP.RomCallPushFAC
*/--------------------------------------
* # float
* Return 'floated' long
* ## C
* `float f = (float)12345678;
* ## ASM
* **In:**
*  `>PUSHL X` (long)
* ## RETURN VALUE
*  On stack (float)
*\--------------------------------------
K.Float			ldx #4

.1				>PULLB FAC,x			Reverse Order
				dex
				bne .1
				
				stz	FAC.SIGN
				lda #$A0
				sta FAC					Exp=32
				
				ldx #ROM.LTOF

				jmp GP.RomCallPushFAC
*/--------------------------------------
* # lrintf
* Return float rounded into a long
* ## C
* `long int lrintf (float x);`
* ## ASM
* **In:**
* `>PUSHF x`
* `>SYSCALL lrintf`
* ## RETURN VALUE
*  On stack (long)
*\--------------------------------------
K.lrintf		jsr MATH.PullFAC
				
				ldx #ROM.QINT
				jsr GP.ROMCALL	

				ldx #0
				
.1				>PUSHB FAC+1,x
				inx
				cpx #4
				bne .1

				clc
				rts				
*--------------------------------------
MATH.PullARG	ldx #ROM.SETARG
				.HS 2C					BIT ABS
MATH.PullFAC	ldx #ROM.SETFAC
				
				>LDYA pStack
				>STYA INDEX
				jsr GP.ROMCALL
				
				lda pStack
				clc
				adc #5
				sta pStack
				rts
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.MATH
LOAD USR/SRC/SYS/KERNEL.S
ASM
