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 $C8
* .EQ $CA * .EQ $CA
SYS.LRIntF .EQ $CC * .EQ $CC
SYS.Float .EQ $CE * .EQ $CE
SYS.GetPWUID .EQ $D0 SYS.GetPWUID .EQ $D0
SYS.GetPWName .EQ $D2 SYS.GetPWName .EQ $D2

View File

@ -127,32 +127,34 @@ FPU.DIV32 .EQ 8
FPU.IDIV32 .EQ 10 FPU.IDIV32 .EQ 10
FPU.MOD32 .EQ 12 FPU.MOD32 .EQ 12
FPU.IMOD32 .EQ 14 FPU.IMOD32 .EQ 14
FPU.CMP32 .EQ 16
FPU.ICMP32 .EQ 18
FPU.FSUB .EQ 16 FPU.FADD .EQ 20
FPU.FADD .EQ 18 FPU.FSUB .EQ 22
FPU.FMULT .EQ 20 FPU.FMULT .EQ 24
FPU.FDIV .EQ 22 FPU.FDIV .EQ 26
FPU.PWR .EQ 24 FPU.PWR .EQ 28
FPU.LOG .EQ 26 FPU.LOG .EQ 30
FPU.SQR .EQ 28 FPU.SQR .EQ 32
FPU.EXP .EQ 30 FPU.EXP .EQ 34
FPU.COS .EQ 32 FPU.COS .EQ 36
FPU.SIN .EQ 34 FPU.SIN .EQ 38
FPU.TAN .EQ 36 FPU.TAN .EQ 40
FPU.ATAN .EQ 38 FPU.ATAN .EQ 42
FPU.SETARG .EQ 40 FPU.SETARG .EQ 44 fadd.....
FPU.SETFAC .EQ 42 PrintF FPU.SETFAC .EQ 46 log...., PrintF
FPU.GETFAC .EQ 44 Copy FAC to (FORPNT) FPU.GETFAC .EQ 48 Copy FAC to (FORPNT)
FPU.FCOMP .EQ 46 FPU.FCOMP .EQ 50
FPU.LTOF .EQ 48 Float FPU.LTOF .EQ 48 Float
FPU.QINT .EQ 50 lrintf FPU.QINT .EQ 50 lrintf
FPU.FIN .EQ 52 FPU.FIN .EQ 56 sscanf
FPU.FOUT .EQ 54 PrintF FPU.FOUT .EQ 58 PrintF
*-------------------------------------- *--------------------------------------
.MA FPU .MA FPU
ldx #FPU.]1 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) * $5E-$C8 RESERVED APPLESOFT Main/Aux (ROM Call, no need to switch back MainZP)
*-------------------------------------- *--------------------------------------
*INDEX .EQ $5E ->$5F LOAD.FAC.FROM.YA *INDEX .EQ $5E ->$5F LOAD.FAC.FROM.YA
*DEST .EQ $60 ->$61 used in FCOMP
RESULT .EQ $62 ->$66 used in FMULT FDIV RESULT .EQ $62 ->$66 used in FMULT FDIV
TMP32.Sign .EQ RESULT TMP32.Sign .EQ RESULT
TMP32 .EQ RESULT+1 TMP32 .EQ RESULT+1
*-------------------------------------- *--------------------------------------
ZPTMP .EQ $67 ->$84 29 bytes ZPTMP .EQ $67 ->$84 29 bytes
*-------------------------------------- *--------------------------------------
FORPNT .EQ $85 ->$86 FORPNT .EQ $85 ->$86 Used in GETFAC
FAC .EQ $9D ->$A1 FAC .EQ $9D ->$A1
FAC.SIGN .EQ $A2 FAC.SIGN .EQ $A2
* FAC.EXTENSION .EQ $AC * FAC.EXTENSION .EQ $AC

View File

@ -169,25 +169,33 @@ GP.AtkCall dec IRQ.InKernel
.1 .DA * .1 .DA *
jsr GO.A2osX jsr GO.A2osX
inc IRQ.InKernel GP.AtkCall.INC inc IRQ.InKernel
rts 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 GP.FpuCall dec IRQ.InKernel
jsr .1 jsr .1
inc IRQ.InKernel bra GP.AtkCall.INC
clc
rts
.1 cpx #FPU.IMOD32+1 .1 cpx #FPU.FADD
bcc GP.RomCall.JmpX INT32 bcc GP.RomCall.JmpX INT32, direct JMP
phx phx
jsr GP.SetFAC Get float from stack jsr GP.SetFAC Get float from stack
plx plx
cpx #FPU.PWR+1 cpx #FPU.PWR+1
bcs .2 bcs GP.RomCallGetFacOnStack
*/-------------------------------------- */--------------------------------------
* # 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
@ -229,9 +237,9 @@ GP.FpuCall dec IRQ.InKernel
* ## RETURN VALUE * ## RETURN VALUE
* On stack (Float) * On stack (Float)
*\-------------------------------------- *\--------------------------------------
.2 jsr GP.ROMCALL GP.RomCallGetFacOnStack
jsr GP.ROMCALL
GP.GETFAC.ON.STACK
lda pStack lda pStack
ldy pStack+1 ldy pStack+1
@ -255,6 +263,68 @@ GP.RomCall phx
rts 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) GP.RomCall.JmpX jmp (.1,x)
.1 .DA GP.ADD32 .1 .DA GP.ADD32
@ -265,6 +335,8 @@ GP.RomCall.JmpX jmp (.1,x)
.DA GP.IDIV32 .DA GP.IDIV32
.DA GP.UMOD32 .DA GP.UMOD32
.DA GP.IMOD32 .DA GP.IMOD32
.DA GP.UCMP32
.DA GP.ICMP32
* http://www.txbobsc.com/scsc/scdocumentor/E7A0.html * http://www.txbobsc.com/scsc/scdocumentor/E7A0.html
@ -281,12 +353,12 @@ GP.RomCall.JmpX jmp (.1,x)
.DA $EFF1 SIN .DA $EFF1 SIN
.DA $F03A TAN .DA $F03A TAN
.DA $F09E ATN .DA $F09E ATN
*--------------------------------------
.DA $E9E3 LOAD.ARG.FROM.YA .DA $E9E3 LOAD.ARG.FROM.YA
.DA $EAF9 LOAD.FAC.FROM.YA .DA $EAF9 LOAD.FAC.FROM.YA
.DA $EB27 SETFOR (GETFAC) .DA $EB27 SETFOR (GETFAC)
.DA $EBB2 FCOMP .DA $EBB2 FCOMP (Y,A with FAC)
.DA $E82E NORMALIZE.FAC.2 (L->F) .DA $E82E NORMALIZE.FAC.2 (L->F)
.DA $EBF2 QINT (F->L) .DA $EBF2 QINT (F->L)
@ -294,13 +366,6 @@ GP.RomCall.JmpX jmp (.1,x)
.DA $EC4A FIN AToF .DA $EC4A FIN AToF
.DA $ED36 FOUT.1 PrintF .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 GP.ADD32 clc
.HS B0 BCS .HS B0 BCS
GP.SUB32 sec GP.SUB32 sec
@ -313,19 +378,15 @@ GP.SUB32 sec
ldx #3 ldx #3
plp plp
bcs .2 bcs .1
lda #$79 ADC Absolute,Y
.HS 2C BIT ABS
.1 lda #$F9 SBC Absolute,Y
.1 lda (pStack),y sta .3
adc ACC32,y
sta (pStack),y
iny
dex
bpl .1
rts
.2 lda (pStack),y .2 lda (pStack),y
sbc ACC32,y .3 adc ACC32,y SELF MODIFIED
sta (pStack),y sta (pStack),y
iny iny
dex dex
@ -333,6 +394,30 @@ GP.SUB32 sec
GP.SUB32.RTS rts 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 GP.UMUL32 clc
.HS B0 BCS .HS B0 BCS
GP.IMUL32 sec GP.IMUL32 sec
@ -412,21 +497,17 @@ GP.PutNotARG32 lda #ARG32
rts rts
*-------------------------------------- *--------------------------------------
GP.PopACC32 ldy #$ff GP.PopACC32 ldy #0
.1 iny .1 lda (pStack)
lda (pStack),y inc pStack
sta ACC32,y sta ACC32,y
cpy #3 iny
cpy #4
bne .1 bne .1
sta ACC32.Sign sta ACC32.Sign
tya
* sec Add 3+CS=4
adc pStack
sta pStack
rts rts
*-------------------------------------- *--------------------------------------
GP.GetARG32 ldy #0 GP.GetARG32 ldy #0
@ -439,7 +520,7 @@ GP.GetARG32 ldy #0
sta ARG32.Sign sta ARG32.Sign
rts GP.GetARG32.RTS rts
*-------------------------------------- *--------------------------------------
GP.MULDIVMOD.COMMON GP.MULDIVMOD.COMMON
php php
@ -448,69 +529,12 @@ GP.MULDIVMOD.COMMON
jsr GP.GetARG32 jsr GP.GetARG32
plp plp
bcc .1 bcc GP.GetARG32.RTS
jsr MATH.ACC32ABS jsr MATH.ACC32ABS
jsr MATH.ARG32ABS jmp MATH.ARG32ABS
*--------------------------------------
.1 rts * MLI : From Kernel Aux LC to Main LC
*/--------------------------------------
* # 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
*-------------------------------------- *--------------------------------------
GP.MLICall stx .1 GP.MLICall stx .1
sta K.MLI.PARAMS sta K.MLI.PARAMS
@ -620,11 +644,6 @@ CORE.Tick10t .BS 1
CORE.CPUStatCnt .DA #100 CORE.CPUStatCnt .DA #100
CORE.LastPSID .DA #0 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.InKernel .BS 1
IRQ.InLib .BS 1 IRQ.InLib .BS 1
IRQ.SkipA2osX .BS 1 IRQ.SkipA2osX .BS 1
@ -635,8 +654,6 @@ IRQ.VBL.0n .BS 1
IRQ.Mode .BS 1 IRQ.Mode .BS 1
IRQ.Tick .BS 1 IRQ.Tick .BS 1
*-------------------------------------- *--------------------------------------
IRQ.Vectors .BS K.IRQDEV.MAX*2
*--------------------------------------
*GO.Reset jsr GO.A2osX *GO.Reset jsr GO.A2osX
* jmp CORE.Run * jmp CORE.Run
*-------------------------------------- *--------------------------------------

View File

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

View File

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

View File

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

View File

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

View File

@ -79,6 +79,11 @@ PWD.hDB .BS 1
PWD.DBPtr .BS 2 PWD.DBPtr .BS 2
PWD.DBSize .BS 2 PWD.DBSize .BS 2
PWD.FILE .AZ "${ROOT}ETC/PASSWD" 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 .LIST ON
DevMgr.FreeMem .EQ * DevMgr.FreeMem .EQ *