Kernel 0.93+

This commit is contained in:
Rémy GIBERT 2019-08-01 16:59:15 +02:00
parent 007a976317
commit f23cf39a41
10 changed files with 160 additions and 133 deletions

Binary file not shown.

View File

@ -278,8 +278,8 @@ SYS.UnsetEnv .EQ $BE
* .EQ $C8
* .EQ $CA
SYS.LRIntF .EQ $CC
SYS.Float .EQ $CE
* .EQ $CC
* .EQ $CE
SYS.GetPWUID .EQ $D0
SYS.GetPWName .EQ $D2

View File

@ -127,32 +127,34 @@ FPU.DIV32 .EQ 8
FPU.IDIV32 .EQ 10
FPU.MOD32 .EQ 12
FPU.IMOD32 .EQ 14
FPU.CMP32 .EQ 16
FPU.ICMP32 .EQ 18
FPU.FSUB .EQ 16
FPU.FADD .EQ 18
FPU.FMULT .EQ 20
FPU.FDIV .EQ 22
FPU.PWR .EQ 24
FPU.FADD .EQ 20
FPU.FSUB .EQ 22
FPU.FMULT .EQ 24
FPU.FDIV .EQ 26
FPU.PWR .EQ 28
FPU.LOG .EQ 26
FPU.SQR .EQ 28
FPU.EXP .EQ 30
FPU.COS .EQ 32
FPU.SIN .EQ 34
FPU.TAN .EQ 36
FPU.ATAN .EQ 38
FPU.LOG .EQ 30
FPU.SQR .EQ 32
FPU.EXP .EQ 34
FPU.COS .EQ 36
FPU.SIN .EQ 38
FPU.TAN .EQ 40
FPU.ATAN .EQ 42
FPU.SETARG .EQ 40
FPU.SETFAC .EQ 42 PrintF
FPU.SETARG .EQ 44 fadd.....
FPU.SETFAC .EQ 46 log...., PrintF
FPU.GETFAC .EQ 44 Copy FAC to (FORPNT)
FPU.FCOMP .EQ 46
FPU.GETFAC .EQ 48 Copy FAC to (FORPNT)
FPU.FCOMP .EQ 50
FPU.LTOF .EQ 48 Float
FPU.QINT .EQ 50 lrintf
FPU.FIN .EQ 52
FPU.FOUT .EQ 54 PrintF
FPU.FIN .EQ 56 sscanf
FPU.FOUT .EQ 58 PrintF
*--------------------------------------
.MA FPU
ldx #FPU.]1

View File

@ -40,13 +40,14 @@ DRV.BLK.BlkNum .EQ $46
* $5E-$C8 RESERVED APPLESOFT Main/Aux (ROM Call, no need to switch back MainZP)
*--------------------------------------
*INDEX .EQ $5E ->$5F LOAD.FAC.FROM.YA
*DEST .EQ $60 ->$61 used in FCOMP
RESULT .EQ $62 ->$66 used in FMULT FDIV
TMP32.Sign .EQ RESULT
TMP32 .EQ RESULT+1
*--------------------------------------
ZPTMP .EQ $67 ->$84 29 bytes
*--------------------------------------
FORPNT .EQ $85 ->$86
FORPNT .EQ $85 ->$86 Used in GETFAC
FAC .EQ $9D ->$A1
FAC.SIGN .EQ $A2
* FAC.EXTENSION .EQ $AC

View File

@ -169,25 +169,33 @@ GP.AtkCall dec IRQ.InKernel
.1 .DA *
jsr GO.A2osX
inc IRQ.InKernel
GP.AtkCall.INC inc IRQ.InKernel
rts
*--------------------------------------
*/--------------------------------------
* # Add32,Sub32,Mul32,IMul32,Div32,IDiv32,Mod32,IMod32,Cmp32,ICmp32
* Return X+Y, X-Y, X*Y, X/Y, X mod Y....
* ## ASM
* **In:**
* `>PUSHF X (long)`
* `>PUSHF Y (long)`
* `>FPU add32`
* `...`
* ## RETURN VALUE
* On stack (long)
*\--------------------------------------
GP.FpuCall dec IRQ.InKernel
jsr .1
inc IRQ.InKernel
clc
rts
bra GP.AtkCall.INC
.1 cpx #FPU.IMOD32+1
bcc GP.RomCall.JmpX INT32
.1 cpx #FPU.FADD
bcc GP.RomCall.JmpX INT32, direct JMP
phx
jsr GP.SetFAC Get float from stack
plx
cpx #FPU.PWR+1
bcs .2
bcs GP.RomCallGetFacOnStack
*/--------------------------------------
* # FAdd,FSub,FMult,FDiv,FPwr
* Return X+Y, X-Y, X*Y, X/Y, X^Y
@ -229,9 +237,9 @@ GP.FpuCall dec IRQ.InKernel
* ## RETURN VALUE
* On stack (Float)
*\--------------------------------------
.2 jsr GP.ROMCALL
GP.RomCallGetFacOnStack
jsr GP.ROMCALL
GP.GETFAC.ON.STACK
lda pStack
ldy pStack+1
@ -255,6 +263,68 @@ GP.RomCall phx
rts
*--------------------------------------
GP.SetARG ldx #FPU.SETARG
.HS 2C BIT ABS
GP.SetFAC ldx #FPU.SETFAC
>LDYA pStack
bra GP.RomCall
*/--------------------------------------
* # float
* Return 'floated' long
* ## C
* `float f = (float)l;
* ## ASM
* **In:**
* `>PUSHL l` (long)
* `>FPU float`
* ## RETURN VALUE
* On stack (float)
*\--------------------------------------
GP.Float ldy #3
.1 lda (pStack),y
sta FAC+1,y Reverse Order
dey
bpl .1
dec pStack keep 5 bytes on stack
stz FAC.SIGN
lda #$80+32
sta FAC Positive + Exp=32
ldx #FPU.LTOF
bra GP.RomCallGetFacOnStack
*/--------------------------------------
* # lrintf
* Return float rounded into a long
* ## C
* `long int lrintf (float x);`
* ## ASM
* **In:**
* `>PUSHF x`
* `>FPU lrintf`
* ## RETURN VALUE
* On stack (long)
*\--------------------------------------
GP.lrintf jsr GP.SetFAC
inc pStack keep 4 bytes on stack
ldx #FPU.QINT
jsr GP.ROMCALL
ldy #3
.1 lda FAC+1,y
sta (pStack),y
dey
bpl .1
rts
*--------------------------------------
GP.RomCall.JmpX jmp (.1,x)
.1 .DA GP.ADD32
@ -265,6 +335,8 @@ GP.RomCall.JmpX jmp (.1,x)
.DA GP.IDIV32
.DA GP.UMOD32
.DA GP.IMOD32
.DA GP.UCMP32
.DA GP.ICMP32
* http://www.txbobsc.com/scsc/scdocumentor/E7A0.html
@ -281,12 +353,12 @@ GP.RomCall.JmpX jmp (.1,x)
.DA $EFF1 SIN
.DA $F03A TAN
.DA $F09E ATN
*--------------------------------------
.DA $E9E3 LOAD.ARG.FROM.YA
.DA $EAF9 LOAD.FAC.FROM.YA
.DA $EB27 SETFOR (GETFAC)
.DA $EBB2 FCOMP
.DA $EBB2 FCOMP (Y,A with FAC)
.DA $E82E NORMALIZE.FAC.2 (L->F)
.DA $EBF2 QINT (F->L)
@ -294,13 +366,6 @@ GP.RomCall.JmpX jmp (.1,x)
.DA $EC4A FIN AToF
.DA $ED36 FOUT.1 PrintF
*--------------------------------------
GP.SetARG ldx #FPU.SETARG
.HS 2C BIT ABS
GP.SetFAC ldx #FPU.SETFAC
>LDYA pStack
bra GP.ROMCALL
*--------------------------------------
GP.ADD32 clc
.HS B0 BCS
GP.SUB32 sec
@ -313,19 +378,15 @@ GP.SUB32 sec
ldx #3
plp
bcs .2
bcs .1
lda #$79 ADC Absolute,Y
.HS 2C BIT ABS
.1 lda #$F9 SBC Absolute,Y
.1 lda (pStack),y
adc ACC32,y
sta (pStack),y
iny
dex
bpl .1
rts
sta .3
.2 lda (pStack),y
sbc ACC32,y
.3 adc ACC32,y SELF MODIFIED
sta (pStack),y
iny
dex
@ -333,6 +394,30 @@ GP.SUB32 sec
GP.SUB32.RTS rts
*--------------------------------------
* Returns:
* ff X < Y
* 0 X = Y
* 1 X > Y
*--------------------------------------
GP.UCMP32
GP.ICMP32 jsr GP.SUB32
jsr GP.PopACC32 A = ACC32+3 (sign)
tay
bmi .2
.1 ora ACC32+2
ora ACC32+1
ora ACC32
beq .8
lda #1
rts
.2 lda #$ff
.8 rts
*--------------------------------------
GP.UMUL32 clc
.HS B0 BCS
GP.IMUL32 sec
@ -412,21 +497,17 @@ GP.PutNotARG32 lda #ARG32
rts
*--------------------------------------
GP.PopACC32 ldy #$ff
GP.PopACC32 ldy #0
.1 iny
lda (pStack),y
.1 lda (pStack)
inc pStack
sta ACC32,y
cpy #3
iny
cpy #4
bne .1
sta ACC32.Sign
tya
* sec Add 3+CS=4
adc pStack
sta pStack
rts
*--------------------------------------
GP.GetARG32 ldy #0
@ -439,7 +520,7 @@ GP.GetARG32 ldy #0
sta ARG32.Sign
rts
GP.GetARG32.RTS rts
*--------------------------------------
GP.MULDIVMOD.COMMON
php
@ -448,69 +529,12 @@ GP.MULDIVMOD.COMMON
jsr GP.GetARG32
plp
bcc .1
bcc GP.GetARG32.RTS
jsr MATH.ACC32ABS
jsr MATH.ARG32ABS
.1 rts
*/--------------------------------------
* # float
* Return 'floated' long
* ## C
* `float f = (float)12345678;
* ## ASM
* **In:**
* `>PUSHL X` (long)
* ## RETURN VALUE
* On stack (float)
*\--------------------------------------
K.Float ldy #3
.1 lda (pStack),y
sta FAC,y Reverse Order
dey
bpl .1
dec pStack keep 5 bytes on stack
stz FAC.SIGN
lda #$80+32
sta FAC Positive + Exp=32
ldx #FPU.LTOF
GP.RomCallPushFAC
jsr GP.ROMCALL
jmp GP.GETFAC.ON.STACK
*/--------------------------------------
* # 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 GP.SetFAC
inc pStack keep 4 bytes on stack
ldx #FPU.QINT
jsr GP.ROMCALL
ldy #3
.1 lda FAC+1,y
sta (pStack),y
dey
bpl .1
clc
rts
jmp MATH.ARG32ABS
*--------------------------------------
* MLI : From Kernel Aux LC to Main LC
*--------------------------------------
GP.MLICall stx .1
sta K.MLI.PARAMS
@ -620,11 +644,6 @@ CORE.Tick10t .BS 1
CORE.CPUStatCnt .DA #100
CORE.LastPSID .DA #0
*--------------------------------------
DevMgr.Stat .DA DevMgr.FreeMem
DevMgr.Free .DA DevMgr.FreeMem
.DA DevMgr.HiMem
DevMgr.DevIdx .DA #1
*--------------------------------------
IRQ.InKernel .BS 1
IRQ.InLib .BS 1
IRQ.SkipA2osX .BS 1
@ -635,8 +654,6 @@ IRQ.VBL.0n .BS 1
IRQ.Mode .BS 1
IRQ.Tick .BS 1
*--------------------------------------
IRQ.Vectors .BS K.IRQDEV.MAX*2
*--------------------------------------
*GO.Reset jsr GO.A2osX
* jmp CORE.Run
*--------------------------------------

View File

@ -2,7 +2,7 @@ NEW
AUTO 3,1
*--------------------------------------
* SYSCALL (AUXLC to AUXLC)
* Used by user & kernel for inter bank Calls
* Used by kernel for inter bank Calls from AUX
* In:
* X = SYSfnc.Index
* Y,A = free for Inline param

View File

@ -227,6 +227,8 @@ K.IrqH.DEV ldx #0
.8 clv clear V (no task switching)
rts
*--------------------------------------
IRQ.Vectors .BS K.IRQDEV.MAX*2
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.IRQ
LOAD USR/SRC/SYS/KERNEL.S

View File

@ -121,8 +121,8 @@ K.SYSCALL .DA 0 $00
.DA 0
.DA 0
.DA 0
.DA K.LRIntF
.DA K.Float
.DA 0
.DA 0
.DA K.GetPWUID $D0
.DA K.GetPWName

View File

@ -41,7 +41,7 @@ K.AToF >STYA TXTPTR Ptr to source string
jsr CHARGOT
ldx #FPU.FIN
jmp GP.RomCallPushFAC
jmp GP.RomCallGetFacOnStack
*/--------------------------------------
* # StrToL/StrToUL
* Convert String to 32 bits (unsigned) int

View File

@ -79,6 +79,11 @@ PWD.hDB .BS 1
PWD.DBPtr .BS 2
PWD.DBSize .BS 2
PWD.FILE .AZ "${ROOT}ETC/PASSWD"
*--------------------------------------
DevMgr.Stat .DA DevMgr.FreeMem
DevMgr.Free .DA DevMgr.FreeMem
.DA DevMgr.HiMem
DevMgr.DevIdx .DA #1
*--------------------------------------
.LIST ON
DevMgr.FreeMem .EQ *