From de4a0a345f1d116680d1445628eb20d82a25bd5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Wed, 13 Jun 2018 17:18:08 +0200 Subject: [PATCH] Kernel 0.9.2 : MATH API rewrite --- INC/MACROS.I.txt | 18 +++++++++ SYS/KERNEL.S.MATH.txt | 85 +++++++++++++++++++---------------------- SYS/KERNEL.S.STDIO.txt | 9 +++-- SYS/KERNEL.S.STDLIB.txt | 7 +++- 4 files changed, 69 insertions(+), 50 deletions(-) diff --git a/INC/MACROS.I.txt b/INC/MACROS.I.txt index d466d9cd..f891c50f 100644 --- a/INC/MACROS.I.txt +++ b/INC/MACROS.I.txt @@ -224,6 +224,24 @@ AUTO 4,1 pla sta (pData),y .EM +*-------------------------------------- + .MA PUSHF.G + ldy #]1+5 +:1 dey + lda (pData),y + >PUSHA + cpy #]1 + bne :1 + .EM +*-------------------------------------- + .MA PULLF.G + ldy #]1 +:1 >PULLA + sta (pData),y + iny + cpy #]1+5 + bne :1 + .EM *-------------------------------------- * STACK PUSH/PULL *-------------------------------------- diff --git a/SYS/KERNEL.S.MATH.txt b/SYS/KERNEL.S.MATH.txt index e259f001..eeaddd43 100644 --- a/SYS/KERNEL.S.MATH.txt +++ b/SYS/KERNEL.S.MATH.txt @@ -5,9 +5,10 @@ AUTO 4,1 * # 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) +* PUSHF = X (Float) +* PUSHF = Y (Float) +* ## Out: +* On stack (Float) *\-------------------------------------- K.FAdd ldx #ROM.FADD .HS 2C BIT ABS @@ -27,8 +28,9 @@ K.FPwr ldx #ROM.PWR * # 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) +* PUSHF = X (Float) +* ## Out: +* On stack (Float) *\-------------------------------------- K.Log ldx #ROM.LOG .HS 2C BIT ABS @@ -49,22 +51,15 @@ K.ATan ldx #ROM.ATAN bra MATH.Go */-------------------------------------- * # Float -* Return return 'floated' long +* Return 'floated' long * ## In: -* PUSHW = X (*long) -* Y,A = Dest (*float) +* PUSHL = X (long) +* ## Out: +* On stack (Float) *\-------------------------------------- -K.Float >STYA FORPNT - >PULLW INDEX - - ldx #1 - ldy #3 - -.1 lda (INDEX),y - sta FAC,x - inx - dey - bpl .1 +K.Float >PULLW FAC+1 + >PULLW FAC+3 + stz FAC.SIGN lda #$A0 sta FAC Exp=32 @@ -73,44 +68,44 @@ K.Float >STYA FORPNT phx MATH.Go plx - lda SIGNFLG pPs !!!! - pha - jsr A2osX.ROMCALL - >ROMCALL GETFAC - pla - sta SIGNFLG + jsr GP.ROMCALL + + ldx #ROM.GETFAC + jsr GP.ROMCALL + clc rts */-------------------------------------- * # LRIntF * Return Float rounded into a long * ## In: -* PUSHW = X (*Float) -* Y,A = Dest (*long) +* PUSHF = X (Float) +* ## Out: +* On stack (long) *\-------------------------------------- -K.LRIntF >STYA FORPNT - jsr MATH.PullFAC - ldx #ROM.QINT - jsr A2osX.ROMCALL - - ldx #1 - ldy #3 +K.LRIntF jsr MATH.PullFAC -.1 lda FAC,x - sta (FORPNT),y - inx - dey - bpl .1 + ldx #ROM.QINT + jsr GP.ROMCALL + + >PUSHW FAC+1 + >PUSHW FAC+3 clc rts *-------------------------------------- -MATH.PullFAC >PULLW INDEX - >ROMCALL SETFAC - rts -*-------------------------------------- -MATH.PullARG >PULLW INDEX - >ROMCALL SETARG +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 diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index 0a2d6a6a..84ca98b2 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -434,10 +434,13 @@ PrintF.F clc clc adc #5 sta pStack - >ROMCALL SETFAC - + + ldx #ROM.SETFAC + jsr GP.ROMCALL + ldy #3 In order not to trash A2osX.SaveSM,A2osX.SaveSX - >ROMCALL FOUT + ldx #ROM.FOUT + jsr GP.ROMCALL ldy #0 diff --git a/SYS/KERNEL.S.STDLIB.txt b/SYS/KERNEL.S.STDLIB.txt index 487f26db..a3dbf7c8 100644 --- a/SYS/KERNEL.S.STDLIB.txt +++ b/SYS/KERNEL.S.STDLIB.txt @@ -31,8 +31,11 @@ K.AToF >PULLW FORPNT Ptr to dst buffer >PULLW TXTPTR Ptr to source string jsr CHARGOT - >ROMCALL FIN - >ROMCALL GETFAC + ldx #ROM.FIN + jsr GP.ROMCALL + + ldx #ROM.GETFAC + jsr GP.ROMCALL clc rts */--------------------------------------