Kernel 0.9.1 : Math API, bug fix, and F To Int conversion

This commit is contained in:
Rémy GIBERT 2017-10-30 17:11:07 +01:00
parent 94d9a4393e
commit 4cd04a6f2c
9 changed files with 84 additions and 15 deletions

View File

@ -183,6 +183,28 @@ Load a file in memory
+ PUSHW = GID
+ PUSHW = PATH
# FAdd,FSub,FMult,FDiv,FPwr
Return X+Y, X-Y, X*Y, X/Y, X^Y
## In:
+ PUSHW = X (*Float)
+ PUSHW = Y (*Float)
+ Y,A = Dest (*Float)
# Log,Sqr,Exp,Cos,Sin,Tan,ATan
Return Log(x), Sqr(x), E^X, Cos(x), Sin(X), Tan(x), ATan(x)
## In:
+ PUSHW = X (*Float)
+ Y,A = Dest (*Float)
# LRIntF
Return Float rounded into a long
## In:
+ PUSHW = X (*Float)
+ Y,A = Dest (*long)
# GetMem
## In:

Binary file not shown.

Binary file not shown.

View File

@ -191,7 +191,7 @@ SYS.FDiv .EQ $C6
SYS.FPwr .EQ $C8
* .EQ $CA
* .EQ $CC
SYS.LRIntF .EQ $CC
* .EQ $CE
SYS.Log .EQ $D0

View File

@ -41,9 +41,10 @@ ZPMEMMGR .EQ $8
*--------------------------------------
* $5E-$C8 RESERVED APPLESOFT Main/Aux (ROM Call, no need to switch back MainZP)
*--------------------------------------
SIGNFLG .EQ $16 COS,SIN,TAN
INDEX .EQ $5E ->$5F
FORPNT .EQ $85 ->$86
*FAC .EQ $9D ->$A1
FAC .EQ $9D ->$A1
*FAC.SIGN .EQ $A2
*FAC.EXTENSION .EQ $AC
TXTPTR .EQ $B8

View File

@ -112,13 +112,13 @@ GP.ROMCall phx
* http://www.txbobsc.com/scsc/scdocumentor/E7A0.html
.2 .DA $E7A7 FSUB
.DA $E7BE FADD
.2 .DA $E7AA FSUBT
.DA $E7C1 FADDT
.DA $E82E NORMALIZE.FAC.2 (L->F)
.DA $E941 LOG
.DA $E97F FMULT
.DA $E987 FMULTT.1
.DA $E9E7 LOAD.ARG.FROM.INDEX
.DA $EA66 FDIV
.DA $EA6B FDIVT+2
.DA $EAFD LOAD.FAC.FROM.INDEX
.DA $EB27 SETFOR GETFAC)

View File

@ -124,7 +124,7 @@ K.SYSCALL.JMP .DA 0 $00
.DA K.FDiv
.DA K.FPwr
.DA 0
.DA 0
.DA K.LRIntF
.DA 0
.DA K.Log $D0

View File

@ -50,12 +50,37 @@ K.ATan ldx #ROM.ATAN
jsr MATH.PullFAC
MATH.Go plx
lda SIGNFLG pPs !!!!
pha
jsr A2osX.ROMCALL
>ROMCALL GETFAC
pla
sta SIGNFLG
clc
rts
*--------------------------------------
*/--------------------------------------
* # LRIntF
* Return Float rounded into a long
* ## In:
* PUSHW = X (*Float)
* Y,A = Dest (*long)
*\--------------------------------------
K.LRIntF >STYA FORPNT
jsr MATH.PullFAC
ldx #ROM.QINT
jsr A2osX.ROMCALL
ldx #1
ldy #3
.1 lda FAC,x
sta (FORPNT),y
inx
dey
bpl .1
clc
rts
*--------------------------------------
MATH.PullFAC >PULLW INDEX
>ROMCALL SETFAC

View File

@ -39,6 +39,8 @@ L.CONST1 .DA CONST1
L.CONST2 .DA CONST2
L.MSG1 .DA MSG1
L.MSG2 .DA MSG2
L.MSG3 .DA MSG3
L.MSG4 .DA MSG4
.DA 0
*--------------------------------------
CS.INIT clc
@ -62,18 +64,34 @@ CS.RUN >PUSHEA.G ENDPTR
>PUSHW L.FLOAT2
>PUSHW L.FLOAT1
>LDYA L.MSG1
>LDYA L.MSG1
>SYSCALL PrintF.YA
*--------------------------------------
>PUSHEA.G MYFLOAT1
>PUSHEA.G MYFLOAT2
>LEA.G MYFLOAT3
>SYSCALL FSub
>SYSCALL FDiv
>PUSHEA.G MYFLOAT3
>LDYA L.MSG2
>LDYA L.MSG2
>SYSCALL PrintF.YA
*--------------------------------------
>PUSHEA.G MYFLOAT3
>LEA.G MYFLOAT3
>SYSCALL Cos
>PUSHEA.G MYFLOAT3
>LDYA L.MSG3
>SYSCALL PrintF.YA
*--------------------------------------
>PUSHW L.FLOAT1
>LEA.G MYLONG
>SYSCALL LRIntF
>PUSHEA.G MYLONG
>LDYA L.MSG4
>SYSCALL PrintF.YA
*--------------------------------------
lda #0
sec
rts
@ -92,8 +110,10 @@ FLOAT3 .HS 9E6E6B2800 1,000,000,000
FLOAT4 .HS 8100000000 1
FLOAT5 .HS 9080000000 -32768
CONST1 >CSTR "3.141592653"
CONST2 >CSTR "2"
MSG2 >CSTR "PI/2=%e\r\n"
CONST2 >CSTR "3"
MSG2 >CSTR "PI/3=%e\r\n"
MSG3 >CSTR "COS(PI/3)=%e\r\n"
MSG4 >CSTR "Long=%L\r\n"
*--------------------------------------
.DUMMY
.OR 0
@ -101,6 +121,7 @@ DS.START
MYFLOAT1 .BS 5
MYFLOAT2 .BS 5
MYFLOAT3 .BS 5
MYLONG .BS 4
ENDPTR .BS 2
DS.END
.ED