diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index 4c4077e3..d04973ac 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -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: diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index cd0a0a95..90991719 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index ce264875..8842566c 100644 Binary files a/.Floppies/A2OSX.SRC.po and b/.Floppies/A2OSX.SRC.po differ diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index ba93fc0d..e47d0f5c 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -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 diff --git a/INC/KERNEL.I.txt b/INC/KERNEL.I.txt index 75fe2e6d..26107b8c 100644 --- a/INC/KERNEL.I.txt +++ b/INC/KERNEL.I.txt @@ -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 diff --git a/SYS/KERNEL.S.GP.txt b/SYS/KERNEL.S.GP.txt index 6281f68b..5f125d2d 100644 --- a/SYS/KERNEL.S.GP.txt +++ b/SYS/KERNEL.S.GP.txt @@ -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) diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index 50a2f1ee..5d2b88be 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -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 diff --git a/SYS/KERNEL.S.MATH.txt b/SYS/KERNEL.S.MATH.txt index 88307c2a..54e1467d 100644 --- a/SYS/KERNEL.S.MATH.txt +++ b/SYS/KERNEL.S.MATH.txt @@ -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 diff --git a/TEST.S.txt b/TEST.S.txt index c4ff84c4..4862b810 100644 --- a/TEST.S.txt +++ b/TEST.S.txt @@ -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