Kernel 0.9.2 : MATH API rewrite

This commit is contained in:
Rémy GIBERT 2018-06-13 17:18:08 +02:00
parent a48bb7cd87
commit de4a0a345f
4 changed files with 69 additions and 50 deletions

View File

@ -224,6 +224,24 @@ AUTO 4,1
pla pla
sta (pData),y sta (pData),y
.EM .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 * STACK PUSH/PULL
*-------------------------------------- *--------------------------------------

View File

@ -5,9 +5,10 @@ AUTO 4,1
* # FAdd,FSub,FMult,FDiv,FPwr * # FAdd,FSub,FMult,FDiv,FPwr
* Return X+Y, X-Y, X*Y, X/Y, X^Y * Return X+Y, X-Y, X*Y, X/Y, X^Y
* ## In: * ## In:
* PUSHW = X (*Float) * PUSHF = X (Float)
* PUSHW = Y (*Float) * PUSHF = Y (Float)
* Y,A = Dest (*Float) * ## Out:
* On stack (Float)
*\-------------------------------------- *\--------------------------------------
K.FAdd ldx #ROM.FADD K.FAdd ldx #ROM.FADD
.HS 2C BIT ABS .HS 2C BIT ABS
@ -27,8 +28,9 @@ K.FPwr ldx #ROM.PWR
* # Log,Sqr,Exp,Cos,Sin,Tan,ATan * # Log,Sqr,Exp,Cos,Sin,Tan,ATan
* Return Log(x), Sqr(x), E^X, Cos(x), Sin(X), Tan(x), ATan(x) * Return Log(x), Sqr(x), E^X, Cos(x), Sin(X), Tan(x), ATan(x)
* ## In: * ## In:
* PUSHW = X (*Float) * PUSHF = X (Float)
* Y,A = Dest (*Float) * ## Out:
* On stack (Float)
*\-------------------------------------- *\--------------------------------------
K.Log ldx #ROM.LOG K.Log ldx #ROM.LOG
.HS 2C BIT ABS .HS 2C BIT ABS
@ -49,22 +51,15 @@ K.ATan ldx #ROM.ATAN
bra MATH.Go bra MATH.Go
*/-------------------------------------- */--------------------------------------
* # Float * # Float
* Return return 'floated' long * Return 'floated' long
* ## In: * ## In:
* PUSHW = X (*long) * PUSHL = X (long)
* Y,A = Dest (*float) * ## Out:
* On stack (Float)
*\-------------------------------------- *\--------------------------------------
K.Float >STYA FORPNT K.Float >PULLW FAC+1
>PULLW INDEX >PULLW FAC+3
ldx #1
ldy #3
.1 lda (INDEX),y
sta FAC,x
inx
dey
bpl .1
stz FAC.SIGN stz FAC.SIGN
lda #$A0 lda #$A0
sta FAC Exp=32 sta FAC Exp=32
@ -73,44 +68,44 @@ K.Float >STYA FORPNT
phx phx
MATH.Go plx MATH.Go plx
lda SIGNFLG pPs !!!! jsr GP.ROMCALL
pha
jsr A2osX.ROMCALL ldx #ROM.GETFAC
>ROMCALL GETFAC jsr GP.ROMCALL
pla
sta SIGNFLG
clc clc
rts rts
*/-------------------------------------- */--------------------------------------
* # LRIntF * # LRIntF
* Return Float rounded into a long * Return Float rounded into a long
* ## In: * ## In:
* PUSHW = X (*Float) * PUSHF = X (Float)
* Y,A = Dest (*long) * ## Out:
* On stack (long)
*\-------------------------------------- *\--------------------------------------
K.LRIntF >STYA FORPNT K.LRIntF jsr MATH.PullFAC
jsr MATH.PullFAC
ldx #ROM.QINT ldx #ROM.QINT
jsr A2osX.ROMCALL jsr GP.ROMCALL
ldx #1 >PUSHW FAC+1
ldy #3 >PUSHW FAC+3
.1 lda FAC,x
sta (FORPNT),y
inx
dey
bpl .1
clc clc
rts rts
*-------------------------------------- *--------------------------------------
MATH.PullFAC >PULLW INDEX MATH.PullARG ldx #ROM.SETARG
>ROMCALL SETFAC .HS 2C BIT ABS
rts MATH.PullFAC ldx #ROM.SETFAC
*--------------------------------------
MATH.PullARG >PULLW INDEX >LDYA pStack
>ROMCALL SETARG >STYA INDEX
jsr GP.ROMCALL
lda pStack
clc
adc #5
sta pStack
rts rts
*-------------------------------------- *--------------------------------------
MAN MAN

View File

@ -434,10 +434,13 @@ PrintF.F clc
clc clc
adc #5 adc #5
sta pStack sta pStack
>ROMCALL SETFAC
ldx #ROM.SETFAC
jsr GP.ROMCALL
ldy #3 In order not to trash A2osX.SaveSM,A2osX.SaveSX ldy #3 In order not to trash A2osX.SaveSM,A2osX.SaveSX
>ROMCALL FOUT ldx #ROM.FOUT
jsr GP.ROMCALL
ldy #0 ldy #0

View File

@ -31,8 +31,11 @@ K.AToF >PULLW FORPNT Ptr to dst buffer
>PULLW TXTPTR Ptr to source string >PULLW TXTPTR Ptr to source string
jsr CHARGOT jsr CHARGOT
>ROMCALL FIN ldx #ROM.FIN
>ROMCALL GETFAC jsr GP.ROMCALL
ldx #ROM.GETFAC
jsr GP.ROMCALL
clc clc
rts rts
*/-------------------------------------- */--------------------------------------