Kernel 0.93

This commit is contained in:
Rémy GIBERT 2019-07-10 17:39:02 +02:00
parent 1de28dea4b
commit 475bbddc25
20 changed files with 779 additions and 1249 deletions

Binary file not shown.

View File

@ -688,7 +688,7 @@ EXP.OP.MATH .AZ "+"
.AZ "/"
.AZ "MOD"
.HS 00
EXP.OP.MATH.FPU .DA #0,#2,#6,#10,#14
EXP.OP.MATH.FPU .DA #FPU.ADD32,#FPU.SUB32,#FPU.IMUL32,#FPU.IDIV32,#FPU.IMOD32
EXP.OP.LOGIC .AZ "AND"
.AZ "OR"
.HS 00

View File

@ -269,24 +269,24 @@ SYS.SetEnv .EQ $BA
SYS.GetEnv .EQ $BC
SYS.UnsetEnv .EQ $BE
*--------------------------------------
SYS.FAdd .EQ $C0
SYS.FSub .EQ $C2
SYS.FMult .EQ $C4
SYS.FDiv .EQ $C6
*SYS.FAdd .EQ $C0
*SYS.FSub .EQ $C2
*SYS.FMult .EQ $C4
*SYS.FDiv .EQ $C6
SYS.FPwr .EQ $C8
*SYS.FPwr .EQ $C8
* .EQ $CA
SYS.LRIntF .EQ $CC
SYS.Float .EQ $CE
SYS.Log .EQ $D0
SYS.Sqr .EQ $D2
SYS.Exp .EQ $D4
SYS.Cos .EQ $D6
*SYS.Log .EQ $D0
*SYS.Sqr .EQ $D2
*SYS.Exp .EQ $D4
*SYS.Cos .EQ $D6
SYS.Sin .EQ $D8
SYS.Tan .EQ $DA
SYS.ATan .EQ $DC
*SYS.Sin .EQ $D8
*SYS.Tan .EQ $DA
*SYS.ATan .EQ $DC
* .EQ $DF
*--------------------------------------
SYS.GetMem .EQ $E0

View File

@ -117,45 +117,45 @@ NEW
jsr GP.MLICall
.EM
*--------------------------------------
* FPU
* FPU Entry Point
*--------------------------------------
.MA ADD32
ldx #0
jsr A2osX.FpuCall
.EM
FPU.ADD32 .EQ 0
FPU.SUB32 .EQ 2
FPU.MUL32 .EQ 4
FPU.IMUL32 .EQ 6
FPU.DIV32 .EQ 8
FPU.IDIV32 .EQ 10
FPU.MOD32 .EQ 12
FPU.IMOD32 .EQ 14
FPU.FSUB .EQ 16
FPU.FADD .EQ 18
FPU.FMULT .EQ 20
FPU.FDIV .EQ 22
FPU.PWR .EQ 24
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.SETARG .EQ 40
FPU.SETFAC .EQ 42
FPU.GETFAC .EQ 44 Copy FAC to (FORPNT)
FPU.FCOMP .EQ 46
FPU.LTOF .EQ 48
FPU.QINT .EQ 50
FPU.FIN .EQ 52
FPU.FOUT .EQ 54
*--------------------------------------
.MA SUB32
ldx #2
jsr A2osX.FpuCall
.EM
*--------------------------------------
.MA MUL32
ldx #4
jsr A2osX.FpuCall
.EM
*--------------------------------------
.MA IMUL32
ldx #6
jsr A2osX.FpuCall
.EM
*--------------------------------------
.MA DIV32
ldx #8
jsr A2osX.FpuCall
.EM
*--------------------------------------
.MA IDIV32
ldx #10
jsr A2osX.FpuCall
.EM
*--------------------------------------
.MA MOD32
ldx #12
jsr A2osX.FpuCall
.EM
*--------------------------------------
.MA IMOD32
ldx #14
.MA FPU
ldx #FPU.]1
jsr A2osX.FpuCall
.EM
*--------------------------------------

View File

@ -1,212 +0,0 @@
NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
* Uses: 12 ZP
* M32.ACC .BS 4
* M32.ARG .BS 4
* M32.TMP .BS 4
*--------------------------------------
M32.Add ldx #4
ldy #0
clc ARG+ACC->ACC
.1 lda M32.ARG,y
adc M32.ACC,y
sta M32.ACC,y
iny
dex
bne .1
clc
rts if CS, Overflow
*---------------------------------------
M32.Sub ldx #4
ldy #0
sec ARG-ACC->ACC
.1 lda M32.ARG,y
sbc M32.ACC,y
sta M32.ACC,y
iny
dex
bne .1
clc
rts
bcs .8 if CC, Overflow
sec
rts
.8 clc
rts
*--------------------------------------
M32.Mul ldx #3 ARG*ACC->ACC
.1 lda M32.ACC,x
sta M32.TMP,x
stz M32.ACC,x
dex
bpl .1
ldx #32
.2 lsr M32.TMP+3
ror M32.TMP+2
ror M32.TMP+1
ror M32.TMP
bcc .3
clc
lda M32.ARG
adc M32.ACC
sta M32.ACC
lda M32.ARG+1
adc M32.ACC+1
sta M32.ACC+1
lda M32.ARG+2
adc M32.ACC+2
sta M32.ACC+2
lda M32.ARG+3
adc M32.ACC+3
sta M32.ACC+3
.3 asl M32.ARG
rol M32.ARG+1
rol M32.ARG+2
rol M32.ARG+3
dex
bne .2
clc
rts
*--------------------------------------
M32.Mod sec
.HS 90 BCC
*--------------------------------------
M32.Div clc
php
stz M32.TMP ARG/ACC->ACC
stz M32.TMP+1
stz M32.TMP+2
stz M32.TMP+3
ldx #32
.1 asl M32.ARG
rol M32.ARG+1
rol M32.ARG+2
rol M32.ARG+3
rol M32.TMP
rol M32.TMP+1
rol M32.TMP+2
rol M32.TMP+3
sec
lda M32.TMP
sbc M32.ACC
pha
lda M32.TMP+1
sbc M32.ACC+1
pha
lda M32.TMP+2
sbc M32.ACC+2
pha
lda M32.TMP+3
sbc M32.ACC+3
bcs .2
pla
pla
pla
dex
bne .1
bra .3
.2 sta M32.TMP+3
pla
sta M32.TMP+2
pla
sta M32.TMP+1
pla
sta M32.TMP
inc M32.ARG bit0 always 0 because of .1 asl
dex
bne .1
.3 plp
ldx #3
ldy #M32.ARG+3
bcc .4
ldy #M32.TMP+3
clc
.4 lda $0,y
sta M32.ACC,x
dey
dex
bpl .4
rts
*--------------------------------------
M32.ACC2ARG ldx #3 ACC->ARG
.1 lda M32.ACC,x
sta M32.ARG,x
dex
bpl .1
rts
*--------------------------------------
M32.Cmp ldx #4
ldy #0
sec
.1 lda M32.ARG,y
sbc M32.ACC,y
sta M32.ACC,y
iny
dex
bne .1
bcc .5 CC if ACC < ARG
lda M32.ACC
ora M32.ACC+1
ora M32.ACC+2
ora M32.ACC+3 Z if ACC = ARG
bne .4
lda #%010 010 ACC = ARG
rts
.4 lda #%100 100 ACC > ARG
rts
.5 lda #%001 001 ACC < ARG
rts
*--------------------------------------
MAN
SAVE USR/SRC/SHARED/X.M32.S
LOAD USR/SRC/BIN/SH.S
ASM

View File

@ -1,216 +0,0 @@
NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
* Uses: 12 ZP
* M32.ACC .BS 4
* M32.ARG .BS 4
* M32.TMP .BS 4
*--------------------------------------
* TODO : Make it SIGNED 32 bits, with OVERVLOW detection
* http://6502.org/source/integers/32muldiv.htm
* http://nparker.llx.com/a2/mult.html
*--------------------------------------
M32.Add ldx #4
ldy #0
clc ARG+ACC->ACC
.1 lda M32.ARG,y
adc M32.ACC,y
sta M32.ACC,y
iny
dex
bne .1
clc
rts if CS, Overflow
*---------------------------------------
M32.Sub ldx #4
ldy #0
sec ARG-ACC->ACC
.1 lda M32.ARG,y
sbc M32.ACC,y
sta M32.ACC,y
iny
dex
bne .1
clc
rts
bcs .8 if CC, Overflow
sec
rts
.8 clc
rts
*--------------------------------------
M32.Mul ldx #3 ARG*ACC->ACC
.1 lda M32.ACC,x
sta M32.TMP,x
stz M32.ACC,x
dex
bpl .1
ldx #32
.2 lsr M32.TMP+3
ror M32.TMP+2
ror M32.TMP+1
ror M32.TMP
bcc .3
clc
lda M32.ARG
adc M32.ACC
sta M32.ACC
lda M32.ARG+1
adc M32.ACC+1
sta M32.ACC+1
lda M32.ARG+2
adc M32.ACC+2
sta M32.ACC+2
lda M32.ARG+3
adc M32.ACC+3
sta M32.ACC+3
.3 asl M32.ARG
rol M32.ARG+1
rol M32.ARG+2
rol M32.ARG+3
dex
bne .2
clc
rts
*--------------------------------------
M32.Mod sec
.HS 90 BCC
*--------------------------------------
M32.Div clc
php
stz M32.TMP ARG/ACC->ACC
stz M32.TMP+1
stz M32.TMP+2
stz M32.TMP+3
ldx #32
.1 asl M32.ARG
rol M32.ARG+1
rol M32.ARG+2
rol M32.ARG+3
rol M32.TMP
rol M32.TMP+1
rol M32.TMP+2
rol M32.TMP+3
sec
lda M32.TMP
sbc M32.ACC
pha
lda M32.TMP+1
sbc M32.ACC+1
pha
lda M32.TMP+2
sbc M32.ACC+2
pha
lda M32.TMP+3
sbc M32.ACC+3
bcs .2
pla
pla
pla
dex
bne .1
bra .3
.2 sta M32.TMP+3
pla
sta M32.TMP+2
pla
sta M32.TMP+1
pla
sta M32.TMP
inc M32.ARG bit0 always 0 because of .1 asl
dex
bne .1
.3 plp
ldx #3
ldy #M32.ARG+3
bcc .4
ldy #M32.TMP+3
clc
.4 lda $0,y
sta M32.ACC,x
dey
dex
bpl .4
rts
*--------------------------------------
M32.ACC2ARG ldx #3 ACC->ARG
.1 lda M32.ACC,x
sta M32.ARG,x
dex
bpl .1
rts
*--------------------------------------
M32.Cmp ldx #4
ldy #0
sec
.1 lda M32.ARG,y
sbc M32.ACC,y
sta M32.ACC,y
iny
dex
bne .1
bcc .5 CC if ACC < ARG
lda M32.ACC
ora M32.ACC+1
ora M32.ACC+2
ora M32.ACC+3 Z if ACC = ARG
bne .4
lda #%010 010 ACC = ARG
rts
.4 lda #%100 100 ACC > ARG
rts
.5 lda #%001 001 ACC < ARG
rts
*--------------------------------------
MAN
SAVE USR/SRC/SHARED/X.M32S.S
LOAD USR/SRC/BIN/SH.S
ASM

View File

@ -64,31 +64,6 @@ ARG32 .EQ ARG+1
* CHARGOT .EQ $B7
TXTPTR .EQ $B8
*--------------------------------------
* ROM Entry Point
*--------------------------------------
ROM.FSUB .EQ 0
ROM.FADD .EQ 2
ROM.LTOF .EQ 4
ROM.LOG .EQ 6
ROM.FMULT .EQ 8
ROM.SETARG .EQ 10
ROM.FDIV .EQ 12
ROM.SETFAC .EQ 14
ROM.GETFAC .EQ 16 Copy FAC to (FORPNT)
ROM.FCOMP .EQ 18
ROM.QINT .EQ 20
ROM.FIN .EQ 22
ROM.FOUT .EQ 24
ROM.SQR .EQ 26
ROM.PWR .EQ 28
ROM.EXP .EQ 30
ROM.COS .EQ 32
ROM.SIN .EQ 34
ROM.TAN .EQ 36
ROM.ATAN .EQ 38
*--------------------------------------
* Memory Map
*--------------------------------------
A2osX.SaveSM .EQ $100 Aux

View File

@ -598,7 +598,7 @@ ENV.SysVarsCPID ldy #S.PS.CPID
lda (pPS),y
ENV.SysVarsNum jsr NUM.A2STR10NP
ENV.SysVarsNum jsr MATH.A2STR10NP
ldy #0

View File

@ -179,76 +179,100 @@ GP.FpuCall dec IRQ.InKernel
clc
rts
.1 jmp (.2,x)
.1 cpx #16 < FADD ?
bcc GP.RomCall.JmpX INT32
.2 .DA FPU.ADD32
.DA FPU.SUB32
.DA FPU.MUL32
.DA FPU.IMUL32
.DA FPU.DIV32
.DA FPU.IDIV32
.DA FPU.MOD32
.DA FPU.IMOD32
*--------------------------------------
GP.RomCallPushFAC
jsr GP.ROMCALL
lda pStack
sec
sbc #5
sta pStack
sta FORPNT Ptr to dst buffer
lda pStack+1
sta FORPNT+1
ldx #ROM.GETFAC
*--------------------------------------
GP.RomCall dec IRQ.InKernel
phx
jsr GP.SetFAC Get float from stack
plx
cpx #26 > FPWR ?
bcs .2
*--------------------------------------
* FADD -> FPWR : 2 * float
*--------------------------------------
lda pStack
clc
adc #5
sta pStack
phx
jsr GP.SetARG
plx
*--------------------------------------
* LOG -> ATAN : 1 * float
*--------------------------------------
.2 jsr GP.ROMCALL
GP.GETFAC.ON.STACK
lda pStack
ldy pStack+1
sta FORPNT Ptr to dst buffer
sty FORPNT+1
ldx #FPU.GETFAC
*--------------------------------------
GP.RomCall phx
ldx $D000
stx .8+1
bit RROMBNK1
plx
jsr .1
jsr GP.RomCall.JmpX
.8 ldx #$ff
bit $C000,x
bit $C000,x
inc IRQ.InKernel
clc
rts
.1 jmp (.2,x)
GP.RomCall.JmpX jmp (.1,x)
.1 .DA MATH.ADD32
.DA MATH.SUB32
.DA MATH.UMUL32
.DA MATH.IMUL32
.DA MATH.UDIV32
.DA MATH.IDIV32
.DA MATH.UMOD32
.DA MATH.IMOD32
* http://www.txbobsc.com/scsc/scdocumentor/E7A0.html
.2 .DA $E7AA FSUBT
.DA $E7C1 FADDT
.DA $E82E NORMALIZE.FAC.2 (L->F)
.DA $E941 LOG
.DA $E7AA FSUBT
.DA $E987 FMULTT.1
.DA $E9E3 LOAD.ARG.FROM.YA
.DA $EA6B FDIVT+2
.DA $EAF9 LOAD.FAC.FROM.YA
.DA $EB27 SETFOR (GETFAC)
.DA $EBB2 FCOMP
.DA $EBF2 QINT (F->L)
.DA $EC4A FIN StrToF
.DA $ED36 FOUT.1 PrintF
.DA $EE8D SQR
.DA $EE97 FPWRT
.DA $EF09 EXP
.DA $E941 LOG
.DA $EE8D SQR
.DA $EF09 EXP
.DA $EFEA COS
.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 $E82E NORMALIZE.FAC.2 (L->F)
.DA $EBF2 QINT (F->L)
.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.MLICall stx .1
sta K.MLI.PARAMS
@ -358,20 +382,15 @@ 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.Mode .BS 1
IRQ.SkipA2osX .BS 1
IRQ.Tick .BS 1
IRQ.InKernel .BS 1
IRQ.InLib .BS 1
IRQ.SkipA2osX .BS 1
IRQ.IntNum .BS 1
IRQ.VBL.n0 .BS 1
IRQ.VBL.0n .BS 1
IRQ.Vectors .BS K.IRQDEV.MAX*2
IRQ.Mode .BS 1
IRQ.Tick .BS 1
*--------------------------------------
*GO.Reset jsr GO.A2osX
* jmp CORE.Run

View File

@ -234,6 +234,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

@ -115,22 +115,22 @@ K.SYSCALL .DA K.GetMemStat $00
.DA K.GetEnv
.DA K.UnsetEnv
.DA K.FAdd $C0
.DA K.FSub
.DA K.FMult
.DA K.FDiv
.DA K.FPwr
.DA 0 $C0
.DA 0
.DA 0
.DA 0
.DA 0
.DA 0
.DA K.LRIntF
.DA K.Float
.DA K.Log $D0
.DA K.Sqr
.DA K.Exp
.DA K.Cos
.DA K.Sin
.DA K.Tan
.DA K.ATan
.DA 0 $D0
.DA 0
.DA 0
.DA 0
.DA 0
.DA 0
.DA 0
.DA 0
*--------------------------------------
* $E000

View File

@ -7,30 +7,14 @@ NEW
* **In:**
* `>PUSHF X (float)`
* `>PUSHF Y (float)`
* `>SYSCALL fadd`
* `>SYSCALL fsub`
* `>SYSCALL fmult`
* `>SYSCALL fdiv`
* `>SYSCALL fpwr`
* `>FPU fadd`
* `>FPU fsub`
* `>FPU fmult`
* `>FPU fdiv`
* `>FPU fpwr`
* ## RETURN VALUE
* On stack (float)
*\--------------------------------------
K.FAdd ldx #ROM.FADD
.HS 2C BIT ABS
K.FSub ldx #ROM.FSUB
.HS 2C BIT ABS
K.FMult ldx #ROM.FMULT
.HS 2C BIT ABS
K.FDiv ldx #ROM.FDIV
.HS 2C BIT ABS
K.FPwr ldx #ROM.PWR
phx
jsr MATH.PullFAC
jsr MATH.PullARG
plx
jmp GP.RomCallPushFAC
*/--------------------------------------
* # Log,Sqr,Exp,Cos,Sin,Tan,ATan
* Return Log(x), Sqr(x), E^X, Cos(x), Sin(X), Tan(x), ATan(x)
@ -45,29 +29,10 @@ K.FPwr ldx #ROM.PWR
* ## ASM
* **In:**
* `>PUSHF x (Float)`
* `>SYSCALL log`
* `>FPU log`
* ## RETURN VALUE
* On stack (Float)
*\--------------------------------------
K.Log ldx #ROM.LOG
.HS 2C BIT ABS
K.Sqr ldx #ROM.SQR
.HS 2C BIT ABS
K.Exp ldx #ROM.EXP
.HS 2C BIT ABS
K.Cos ldx #ROM.COS
.HS 2C BIT ABS
K.Sin ldx #ROM.SIN
.HS 2C BIT ABS
K.Tan ldx #ROM.TAN
.HS 2C BIT ABS
K.ATan ldx #ROM.ATAN
phx
jsr MATH.PullFAC
plx
jmp GP.RomCallPushFAC
*/--------------------------------------
* # float
* Return 'floated' long
@ -89,9 +54,17 @@ K.Float ldx #4
lda #$A0
sta FAC Exp=32
ldx #ROM.LTOF
ldx #FPU.LTOF
*--------------------------------------
MATH.RomCallPushFAC
jsr GP.ROMCALL
lda pStack
sec
sbc #5
sta pStack
jmp GP.RomCallPushFAC
jmp GP.GETFAC.ON.STACK
*/--------------------------------------
* # lrintf
* Return float rounded into a long
@ -104,9 +77,17 @@ K.Float ldx #4
* ## RETURN VALUE
* On stack (long)
*\--------------------------------------
K.lrintf jsr MATH.PullFAC
K.lrintf ldx #FPU.SETFAC
ldx #ROM.QINT
>LDYA pStack
jsr GP.ROMCALL
lda pStack
clc
adc #5
sta pStack
ldx #FPU.QINT
jsr GP.ROMCALL
ldx #0
@ -119,17 +100,574 @@ K.lrintf jsr MATH.PullFAC
clc
rts
*--------------------------------------
MATH.PullARG ldx #ROM.SETARG
.HS 2C BIT ABS
MATH.PullFAC ldx #ROM.SETFAC
* http://6502.org/source/integers/32muldiv.htm
* http://nparker.llx.com/a2/mult.html
*--------------------------------------
* >PUSHL ARG
* >PUSHL ACC
* >FPU ADD32
* >PULLL (ARG+ACC)
*--------------------------------------
MATH.ADD32 clc
.HS B0 BCS
MATH.SUB32 sec
>LDYA pStack
jsr GP.ROMCALL
php
lda pStack
clc
adc #5
jsr MATH.PopACC32
ldy #0
ldx #3
plp
bcs .2
.1 lda (pStack),y
adc ACC32,y
sta (pStack),y
iny
dex
bpl .1
rts
.2 lda (pStack),y
sbc ACC32,y
sta (pStack),y
iny
dex
bpl .2
MATH.SUB32.RTS rts
*--------------------------------------
* >PUSHL ARG
* >PUSHL ACC
* >(I)MUL32
* >PULLL (ARG*ACC)
*--------------------------------------
MATH.UMUL32 clc
.HS B0 BCS
MATH.IMUL32 sec
php
jsr MATH.MULDIVMOD.COMMON
jsr MATH.MUL32
plp
bcc MATH.SUB32.RTS
MATH.RETURN.ITMP
lda ACC32.Sign
eor ARG32.Sign
bpl MATH.PutTMP32
bra MATH.PutNotTMP32
*--------------------------------------
* >PUSHL ARG
* >PUSHL ACC
* >(I)DIV32
* >PULLL (ARG / ACC)
*--------------------------------------
* >PUSHL ARG
* >PUSHL ACC
* >(I)MOD32
* >PULLL (ARG mod ACC)
*--------------------------------------
MATH.UDIV32 clc
.HS B0 BCS
MATH.IDIV32 sec
clv
bra MATH.DIVMOD
MATH.UMOD32 clc
.HS B0 BCS
MATH.IMOD32 sec
bit MATH.SUB32.RTS $60
MATH.DIVMOD php
jsr MATH.MULDIVMOD.COMMON
jsr MATH.DIVMOD32
plp
bcc .3
bvs MATH.RETURN.ITMP IMOD
lda ACC32.Sign IDIV
eor ARG32.Sign
bmi MATH.PutARG32
bra MATH.PutNotARG32
.3 bvs MATH.PutARG32 DIV
*--------------------------------------
MATH.PutTMP32 ldy #0 MOD
ldx #3
.1 lda TMP32,y
sta (pStack),y
iny
dex
bpl .1
rts
*--------------------------------------
MATH.PutNotTMP32
ldy #0
ldx #3
sec
.1 lda TMP32,y two's complement of X bytes
eor #$ff
adc #0
sta (pStack),y
iny
dex
bpl .1
rts
*--------------------------------------
MATH.PutARG32 ldy #0
ldx #3
.1 lda ARG32,y
sta (pStack),y
iny
dex
bpl .1
rts
*--------------------------------------
MATH.PutNotARG32
ldy #0
ldx #3
sec
.1 lda ARG32,y two's complement of X bytes
eor #$ff
adc #0
sta (pStack),y
iny
dex
bpl .1
rts
*--------------------------------------
MATH.PopACC32 ldy #$ff
.1 iny
lda (pStack),y
sta ACC32,y
cpy #3
bne .1
sta ACC32.Sign
tya
* sec
adc pStack
sta pStack
rts
*--------------------------------------
MATH.GetARG32 ldy #$ff
.1 iny
lda (pStack),y
sta ARG32,y
cpy #3
bne .1
sta ARG32.Sign
rts
*--------------------------------------
MATH.MULDIVMOD.COMMON
php
jsr MATH.PopACC32
jsr MATH.GetARG32
plp
bcc .1
jsr MATH.ACC32ABS
jsr MATH.ARG32ABS
.1 rts
*--------------------------------------
* ARG32*ACC32->TMP32
*--------------------------------------
MATH.MUL32 jsr MATH.TMP32ZERO
ldx #32
.2 lsr ARG32+3
ror ARG32+2
ror ARG32+1
ror ARG32
bcc .3
clc
lda TMP32
adc ACC32
sta TMP32
lda TMP32+1
adc ACC32+1
sta TMP32+1
lda TMP32+2
adc ACC32+2
sta TMP32+2
lda TMP32+3
adc ACC32+3
sta TMP32+3
.3 jsr MATH.ACC32.T2
dex
bne .2
clc
rts
*--------------------------------------
* ARG32 = ARG32 div ACC32
* TMP32 = ARG32 mod ACC32
*--------------------------------------
MATH.DIVMOD32 jsr MATH.TMP32ZERO
ldx #32
.1 asl ARG32
rol ARG32+1
rol ARG32+2
rol ARG32+3
rol TMP32
rol TMP32+1
rol TMP32+2
rol TMP32+3
sec
lda TMP32
sbc ACC32
pha
lda TMP32+1
sbc ACC32+1
pha
lda TMP32+2
sbc ACC32+2
pha
lda TMP32+3
sbc ACC32+3
bcs .2
pla
pla
pla
dex
bne .1
rts
.2 sta TMP32+3
pla
sta TMP32+2
pla
sta TMP32+1
pla
sta TMP32
inc ARG32 bit0 always 0 because of .1 asl
dex
bne .1
rts
*--------------------------------------
MATH.A2STR10NP ldx #3 3 didgit max
ldy #0 Disable Padding
MATH.A2STR10 jsr MATH.A2ACC32
clc unsigned
*--------------------------------------
* CS = signed long
* CC = unsigned long
* X = Pad Len
* Y = Pad Char
*--------------------------------------
MATH.ACC322STR10
stx .5+1 Pad Len
sty .81+1 Pad Char
stz A2osX.NumStrLen
bcc .1
clc
lda ACC32+3
bpl .1
jsr MATH.ACC32NEG
sec
.1 ror ACC32.Sign Save sign
ldx #4
.2 stz RESULT,x Clear all 5 bytes
dex
bpl .2
sed switch to BCD mode
ldx #32 let's roll 32 bits
.3 asl ACC32
rol ACC32+1
rol ACC32+2
rol ACC32+3
ldy #4
.4 lda RESULT,y
adc RESULT,y
sta RESULT,y
dey
bpl .4
dex
bne .3
cld
ldx .5+1 no padding
beq .6
lda #10 starts at 10-padlen
sec
.5 sbc #$ff SELF MODIFIED
tax
.6 txa
lsr
tay
lda RESULT,y
bcs .7
lsr
lsr
lsr
lsr
.7 and #$0F
ora #$30
cmp #'0'
beq .80
ldy #'0' next 0s always printed
sty .81+1
bra .82
.80 cpx #9 last char, print always
beq .82
.81 lda #$ff SELF MODIFIED Get Padding char
beq .87
.82 bit ACC32.Sign "-" to print ?
bpl .86
pha
lda #'-'
jsr .88
stz ACC32.Sign
pla
.86 jsr .88
.87 inx
cpx #10
bne .6
lda #0
.88 ldy A2osX.NumStrLen
inc A2osX.NumStrLen
sta A2osX.NumStrBuf,y
rts
*--------------------------------------
* Convert Hex int at ZPPtr2 to ACC32
*--------------------------------------
MATH.Hex2ACC32 lda (ZPPtr2)
beq .9
jsr MEM.IsHexDigit
bcs .9
jsr MATH.A2ACC32
ldy #0
.1 iny
lda (ZPPtr2),y
beq .8
jsr MEM.IsHexDigit
bcs .8
pha
ldx #4
.2 jsr MATH.ACC32.T2
dex
bne .2
pla
ora ACC32
sta ACC32
bra .1
.8 clc
rts
.9 sec
rts
*--------------------------------------
* Convert Decimal int at ZPPtr2 to ACC32
*--------------------------------------
MATH.Dec2ACC32 jsr MATH.ACC32ZERO
clc
lda (ZPPtr2)
eor #'-'
bne .10
jsr MEM.NextCharPtr2 skip '-'
sec
.10 ror .80+1 set pos/neg flag
ldy #$ff
.1 iny
lda (ZPPtr2),y
beq .8
jsr MEM.IsDigit
bcs .8
phy Save Y, pointing to next char
jsr MATH.ACC32.T10
ply
bcs .9
lda (ZPPtr2),y
and #$0F
* clc
adc ACC32
sta ACC32
bcc .1
inc ACC32+1
bne .1
inc ACC32+2
bne .1
inc ACC32+3
bne .1 if 0, overflow!!!
.9 lda #E.INUM
sec
rts
.8 tya no digit parsed...error
beq .9
.80 lda #$FF SELF MODIFIED
bpl .88
jsr MATH.ACC32NEG
.88 clc
rts
*--------------------------------------
MATH.ACC32.T10 ldx #3
.1 lda ACC32,x save ACC32 for 4+1
pha
dex
bpl .1
jsr MATH.ACC32.T2 ACC32 * 2 -> ACC32
jsr MATH.ACC32.T2 ACC32 * 4 -> ACC32
ldx #0
ldy #4
* clc
.2 pla ACC32 * 4 + ACC32 -> ACC32
adc ACC32,x
sta ACC32,x
inx
dey
bne .2
MATH.ACC32.T2 asl ACC32
rol ACC32+1
rol ACC32+2
rol ACC32+3
rts
*--------------------------------------
MATH.A2ACC32 sta ACC32
.HS 2C BIT ABS
MATH.ACC32ZERO stz ACC32
stz ACC32+1
stz ACC32+2
stz ACC32+3
rts
*--------------------------------------
MATH.TMP32ZERO stz TMP32
stz TMP32+1
stz TMP32+2
stz TMP32+3
rts
*--------------------------------------
MATH.ARG32ABS lda ARG32.Sign
bmi MATH.ARG32NEG
rts
*--------------------------------------
MATH.ACC32ABS lda ACC32.Sign
bpl MATH.ACC32NEG.RTS
*--------------------------------------
MATH.ACC32NEG ldy #ACC32
.HS 2C BIT ABS
MATH.ARG32NEG ldy #ARG32
ldx #3
sec
.1 lda $0,y two's complement of X bytes
eor #$ff
adc #0
sta $0,y
iny
dex
bpl .1
MATH.ACC32NEG.RTS
rts
*--------------------------------------
MAN

View File

@ -1,573 +0,0 @@
NEW
AUTO 3,1
*--------------------------------------
* http://6502.org/source/integers/32muldiv.htm
* http://nparker.llx.com/a2/mult.html
*--------------------------------------
* >PUSHL ARG
* >PUSHL ACC
* >ADC32
* >PULLL (ARG+ACC)
*--------------------------------------
FPU.ADD32 clc
.HS B0 BCS
FPU.SUB32 sec
php
jsr NUM.PopACC32
ldy #0
ldx #3
plp
bcs .2
.1 lda (pStack),y
adc ACC32,y
sta (pStack),y
iny
dex
bpl .1
rts
.2 lda (pStack),y
sbc ACC32,y
sta (pStack),y
iny
dex
bpl .2
FPU.SUB32.RTS rts
*--------------------------------------
* >PUSHL ARG
* >PUSHL ACC
* >(I)MUL32
* >PULLL (ARG*ACC)
*--------------------------------------
FPU.MUL32 clc
.HS B0 BCS
FPU.IMUL32 sec
php
jsr NUM.MULDIVMOD.COMMON
jsr NUM.MUL32
plp
bcc FPU.SUB32.RTS
FPU.RETURN.ITMP lda ACC32.Sign
eor ARG32.Sign
bpl NUM.PutTMP32
bra NUM.PutNotTMP32
*--------------------------------------
* >PUSHL ARG
* >PUSHL ACC
* >(I)DIV32
* >PULLL (ARG / ACC)
*--------------------------------------
* >PUSHL ARG
* >PUSHL ACC
* >(I)MOD32
* >PULLL (ARG mod ACC)
*--------------------------------------
FPU.DIV32 clc
.HS B0 BCS
FPU.IDIV32 sec
clv
bra FPU.DIVMOD
FPU.MOD32 clc
.HS B0 BCS
FPU.IMOD32 sec
bit FPU.SUB32.RTS $60
FPU.DIVMOD php
jsr NUM.MULDIVMOD.COMMON
jsr NUM.DIVMOD32
plp
bcc .3
bvs FPU.RETURN.ITMP IMOD
lda ACC32.Sign IDIV
eor ARG32.Sign
bmi NUM.PutARG32
bra NUM.PutNotARG32
.3 bvs NUM.PutARG32 DIV
*--------------------------------------
NUM.PutTMP32 ldy #0 MOD
ldx #3
.1 lda TMP32,y
sta (pStack),y
iny
dex
bpl .1
rts
*--------------------------------------
NUM.PutNotTMP32 ldy #0
ldx #3
sec
.1 lda TMP32,y two's complement of X bytes
eor #$ff
adc #0
sta (pStack),y
iny
dex
bpl .1
rts
*--------------------------------------
NUM.PutARG32 ldy #0
ldx #3
.1 lda ARG32,y
sta (pStack),y
iny
dex
bpl .1
rts
*--------------------------------------
NUM.PutNotARG32 ldy #0
ldx #3
sec
.1 lda ARG32,y two's complement of X bytes
eor #$ff
adc #0
sta (pStack),y
iny
dex
bpl .1
rts
*--------------------------------------
NUM.PopACC32 ldy #$ff
.1 iny
lda (pStack),y
sta ACC32,y
cpy #3
bne .1
sta ACC32.Sign
tya
* sec
adc pStack
sta pStack
rts
*--------------------------------------
NUM.GetARG32 ldy #$ff
.1 iny
lda (pStack),y
sta ARG32,y
cpy #3
bne .1
sta ARG32.Sign
rts
*--------------------------------------
NUM.MULDIVMOD.COMMON
php
jsr NUM.PopACC32
jsr NUM.GetARG32
plp
bcc .1
jsr NUM.ACC32ABS
jsr NUM.ARG32ABS
.1 rts
*--------------------------------------
* ARG32*ACC32->TMP32
*--------------------------------------
NUM.MUL32 jsr NUM.TMP32ZERO
ldx #32
.2 lsr ARG32+3
ror ARG32+2
ror ARG32+1
ror ARG32
bcc .3
clc
lda TMP32
adc ACC32
sta TMP32
lda TMP32+1
adc ACC32+1
sta TMP32+1
lda TMP32+2
adc ACC32+2
sta TMP32+2
lda TMP32+3
adc ACC32+3
sta TMP32+3
.3 jsr NUM.ACC32.T2
dex
bne .2
clc
rts
*--------------------------------------
* ARG32 = ARG32 div ACC32
* TMP32 = ARG32 mod ACC32
*--------------------------------------
NUM.DIVMOD32 jsr NUM.TMP32ZERO
ldx #32
.1 asl ARG32
rol ARG32+1
rol ARG32+2
rol ARG32+3
rol TMP32
rol TMP32+1
rol TMP32+2
rol TMP32+3
sec
lda TMP32
sbc ACC32
pha
lda TMP32+1
sbc ACC32+1
pha
lda TMP32+2
sbc ACC32+2
pha
lda TMP32+3
sbc ACC32+3
bcs .2
pla
pla
pla
dex
bne .1
rts
.2 sta TMP32+3
pla
sta TMP32+2
pla
sta TMP32+1
pla
sta TMP32
inc ARG32 bit0 always 0 because of .1 asl
dex
bne .1
rts
*--------------------------------------
NUM.A2STR10NP ldx #3 3 didgit max
ldy #0 Disable Padding
NUM.A2STR10 jsr NUM.A2ACC32
clc unsigned
*--------------------------------------
* CS = signed long
* CC = unsigned long
* X = Pad Len
* Y = Pad Char
*--------------------------------------
NUM.ACC322STR10 stx .5+1 Pad Len
sty .81+1 Pad Char
stz A2osX.NumStrLen
bcc .1
clc
lda ACC32+3
bpl .1
jsr NUM.ACC32NEG
sec
.1 ror ACC32.Sign Save sign
ldx #4
.2 stz RESULT,x Clear all 5 bytes
dex
bpl .2
sed switch to BCD mode
ldx #32 let's roll 32 bits
.3 asl ACC32
rol ACC32+1
rol ACC32+2
rol ACC32+3
ldy #4
.4 lda RESULT,y
adc RESULT,y
sta RESULT,y
dey
bpl .4
dex
bne .3
cld
ldx .5+1 no padding
beq .6
lda #10 starts at 10-padlen
sec
.5 sbc #$ff SELF MODIFIED
tax
.6 txa
lsr
tay
lda RESULT,y
bcs .7
lsr
lsr
lsr
lsr
.7 and #$0F
ora #$30
cmp #'0'
beq .80
ldy #'0' next 0s always printed
sty .81+1
bra .82
.80 cpx #9 last char, print always
beq .82
.81 lda #$ff SELF MODIFIED Get Padding char
beq .87
.82 bit ACC32.Sign "-" to print ?
bpl .86
pha
lda #'-'
jsr .88
stz ACC32.Sign
pla
.86 jsr .88
.87 inx
cpx #10
bne .6
lda #0
.88 ldy A2osX.NumStrLen
inc A2osX.NumStrLen
sta A2osX.NumStrBuf,y
rts
*--------------------------------------
* Convert Hex int at ZPPtr2 to ACC32
*--------------------------------------
NUM.Hex2ACC32 lda (ZPPtr2)
beq .9
jsr MEM.IsHexDigit
bcs .9
jsr NUM.A2ACC32
ldy #0
.1 iny
lda (ZPPtr2),y
beq .8
jsr MEM.IsHexDigit
bcs .8
pha
ldx #4
.2 jsr NUM.ACC32.T2
dex
bne .2
pla
ora ACC32
sta ACC32
bra .1
.8 clc
rts
.9 sec
rts
*--------------------------------------
* Convert Decimal int at ZPPtr2 to ACC32
*--------------------------------------
NUM.Dec2ACC32 jsr NUM.ACC32ZERO
clc
lda (ZPPtr2)
eor #'-'
bne .10
jsr MEM.NextCharPtr2 skip '-'
sec
.10 ror .80+1 set pos/neg flag
ldy #$ff
.1 iny
lda (ZPPtr2),y
beq .8
jsr MEM.IsDigit
bcs .8
phy Save Y, pointing to next char
jsr NUM.ACC32.T10
ply
bcs .9
lda (ZPPtr2),y
and #$0F
* clc
adc ACC32
sta ACC32
bcc .1
inc ACC32+1
bne .1
inc ACC32+2
bne .1
inc ACC32+3
bne .1 if 0, overflow!!!
.9 lda #E.INUM
sec
rts
.8 tya no digit parsed...error
beq .9
.80 lda #$FF SELF MODIFIED
bpl .88
jsr NUM.ACC32NEG
.88 clc
rts
*--------------------------------------
NUM.ACC32.T10 ldx #3
.1 lda ACC32,x save ACC32 for 4+1
pha
dex
bpl .1
jsr NUM.ACC32.T2 ACC32 * 2 -> ACC32
jsr NUM.ACC32.T2 ACC32 * 4 -> ACC32
ldx #0
ldy #4
* clc
.2 pla ACC32 * 4 + ACC32 -> ACC32
adc ACC32,x
sta ACC32,x
inx
dey
bne .2
NUM.ACC32.T2 asl ACC32
rol ACC32+1
rol ACC32+2
rol ACC32+3
rts
*--------------------------------------
NUM.A2ACC32 sta ACC32
.HS 2C BIT ABS
NUM.ACC32ZERO stz ACC32
stz ACC32+1
stz ACC32+2
stz ACC32+3
rts
*--------------------------------------
NUM.TMP32ZERO stz TMP32
stz TMP32+1
stz TMP32+2
stz TMP32+3
rts
*--------------------------------------
NUM.ARG32ABS lda ARG32.Sign
bmi NUM.ARG32NEG
rts
*--------------------------------------
NUM.ACC32ABS lda ACC32.Sign
bpl NUM.ACC32NEG.RTS
*--------------------------------------
NUM.ACC32NEG ldy #ACC32
.HS 2C BIT ABS
NUM.ARG32NEG ldy #ARG32
ldx #3
sec
.1 lda $0,y two's complement of X bytes
eor #$ff
adc #0
sta $0,y
iny
dex
bpl .1
NUM.ACC32NEG.RTS
rts
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.NUM
LOAD USR/SRC/SYS/KERNEL.S
ASM

View File

@ -68,7 +68,7 @@ PWD.Store lda PWD.DBPtr
clc Aux To Main
jsr AuxMove
>PUSHWZ Aux type
>PUSHWZ Aux type
>PUSHBI S.FI.T.TXT
>PUSHBI O.WRONLY+O.CREATE
>LDYAI PWD.FILE
@ -80,7 +80,7 @@ PWD.Store lda PWD.DBPtr
jsr .8
pla
sec
.9 rts
rts
.1 sta .7+1
@ -91,27 +91,22 @@ PWD.Store lda PWD.DBPtr
lda .7+1
ldx #SYS.FWrite
jsr K.SYSCALL2.BANK
bcs .2
bcc .2
jsr .7
stz PWD.bDirty
rts
.2 pha
pha
jsr .7
pla
sec
rts
.7 lda #$ff
.9 rts
.2 stz PWD.bDirty
.7 lda #$ff SELF MODIFIED
ldx #SYS.fclose
jsr K.SYSCALL2.BANK
.8 lda #$ff
jsr K.freemem
* clc
rts
jmp K.freemem SELF MODIFIED
*--------------------------------------
PWD.bDirty .BS 1
PWD.hDB .BS 1

View File

@ -502,7 +502,7 @@ PWD.StoreString iny
PWD.StoreByte php
phx
jsr NUM.A2STR10NP
jsr MATH.A2STR10NP
plx
plp

View File

@ -371,7 +371,7 @@ K.PrintF.1 stz PrintF.Cnt
>LDYA ZPPtr1
>STYA ZPPtr2
jsr NUM.Hex2ACC32
jsr MATH.Hex2ACC32
bcs .99
jsr MEM.AddYToPtr1
@ -531,7 +531,7 @@ PrintF.U clc unsigned long (DWORD)
PrintF.NUM ldx K.PrintF.PadL
ldy K.PrintF.PadC
rol ACC32.Sign
jsr NUM.ACC322STR10
jsr MATH.ACC322STR10
bra PrintF.StrNum
*--------------------------------------
* EXP(8) 1(s) 1significants(31)
@ -557,7 +557,7 @@ PrintF.F clc
lda pStack+1
ldx #ROM.SETFAC
ldx #FPU.SETFAC
jsr GP.ROMCALL
lda PrintF.GetByte+1
@ -566,7 +566,7 @@ PrintF.F clc
sta PrintF.GetByte+1
ldy #A2osX.NumStrBuf+1 In order not to trash A2osX.SaveSM,A2osX.SaveSX
ldx #ROM.FOUT
ldx #FPU.FOUT
jsr GP.ROMCALL
PrintF.StrNum ldy #0
@ -980,14 +980,14 @@ K.SScanF.L
K.SScanF.U lda K.SScanFTBL+1,x Get VAR size
pha Save VAL size
jsr NUM.Dec2ACC32
jsr MATH.Dec2ACC32
bra K.SScanF.GetVAL
*--------------------------------------
K.SScanF.HH
K.SScanF.H lda K.SScanFTBL+1,x Get VAR size
pha
jsr NUM.Hex2ACC32
jsr MATH.Hex2ACC32
K.SScanF.GetVAL jsr MEM.AddYToPtr2 Y=char count parsed

View File

@ -13,10 +13,10 @@ NEW
* ## RETURN VALUE
* On stack (float)
*\--------------------------------------
K.strtof >STYA TXTPTR Ptr to source string
K.strtof pha
>PULLW ZPPtr1
jsr K.AToF.I
pla
jsr K.AToF
lda TXTPTR
sta (ZPPtr1)
@ -38,10 +38,10 @@ K.strtof >STYA TXTPTR Ptr to source string
*\--------------------------------------
K.AToF >STYA TXTPTR Ptr to source string
K.AToF.I jsr CHARGOT
jsr CHARGOT
ldx #ROM.FIN
jmp GP.RomCallPushFAC
ldx #FPU.FIN
jmp MATH.RomCallPushFAC
*/--------------------------------------
* # StrToL/StrToUL
* Convert String to 32 bits (unsigned) int
@ -92,7 +92,7 @@ K.AToL >STYA ZPPtr2 C-String in Ptr2, Dst buffer in Ptr1
lda #10 base 10
sec signed
K.AToL.I jsr NUM.Dec2ACC32
K.AToL.I jsr MATH.Dec2ACC32
bcs .9
phy Save Count processed
@ -123,7 +123,7 @@ K.atoi >STYA ZPPtr2
lda #10 base 10
sec signed
jsr NUM.Dec2ACC32
jsr MATH.Dec2ACC32
bcs .9
>LDYA ACC32

View File

@ -1133,7 +1133,7 @@ DRV.TERM.CURBLNK.SET
DRV.TERM.CURBLNK.RTS
rts
*--------------------------------------
Decimal.Out jsr NUM.A2STR10NP
Decimal.Out jsr MATH.A2STR10NP
ldx #0

View File

@ -192,7 +192,7 @@ K.CTime2Time jsr MEM.SPtr1PPtr2
stz ACC32+3
jsr NUM.DIVMOD32 ARG32 = Days, TMP32 = remaining secs
jsr MATH.DIVMOD32 ARG32 = Days, TMP32 = remaining secs
lda ARG32 WDAY computation : (ARG32 + DAY0) mod 7
clc
@ -221,9 +221,7 @@ K.CTime2Time jsr MEM.SPtr1PPtr2
sta TIME.Century
lda #YEAR0
sta TIME.Year
K.CTime2Time.Year
.1 ldy TIME.Century
lda TIME.Year
jsr TIME.IsLeapYearYA if Leap year CS
@ -248,6 +246,7 @@ K.CTime2Time.Year
lda TIME.Year
cmp #100
bne .1
stz TIME.Year
inc TIME.Century
bne .1
@ -261,9 +260,7 @@ K.CTime2Time.Year
ldy #S.Time.YEAR
lda TIME.Year
sta (ZPPtr2),y
K.CTime2Time.HMS
ldx #3
.1 lda TMP32,x
@ -271,30 +268,30 @@ K.CTime2Time.HMS
dex
bpl .1
lda #60
jsr NUM.A2ACC32
jsr NUM.DIVMOD32
ldy #S.TIME.SECOND
lda TMP32
sta (ZPPtr2),y
lda #60
jsr NUM.A2ACC32
jsr .2
jsr NUM.DIVMOD32
dey #S.TIME.MINUTE
jsr .2
ldy #S.TIME.MINUTE
lda TMP32
sta (ZPPtr2),y
ldy #S.TIME.HOUR
dey #S.TIME.HOUR
lda ARG32
sta (ZPPtr2),y
clc
rts
.2 phy
lda #60
jsr MATH.A2ACC32
jsr MATH.DIVMOD32
ply
lda TMP32
sta (ZPPtr2),y
rts
*--------------------------------------
* In :
* Y = Century
@ -500,7 +497,7 @@ K.StrFTime.addDecA
ldx #2
ldy #'0'
clc
jsr NUM.A2STR10
jsr MATH.A2STR10
lda A2osX.NumStrBuf
jsr MEM.PutCharPtr1

View File

@ -55,20 +55,25 @@ A2osX.D2 .PH $D000
.INB USR/SRC/SYS/KERNEL.S.BIN
.INB USR/SRC/SYS/KERNEL.S.PS
.INB USR/SRC/SYS/KERNEL.S.ENV
.INB USR/SRC/SYS/KERNEL.S.MATH
.INB USR/SRC/SYS/KERNEL.S.ARG
.EP
A2osX.E0 .PH $E000
.INB USR/SRC/SYS/KERNEL.S.JMP
.INB USR/SRC/SYS/KERNEL.S.IRQ
.INB USR/SRC/SYS/KERNEL.S.MEM
.INB USR/SRC/SYS/KERNEL.S.NUM
.INB USR/SRC/SYS/KERNEL.S.MATH
.INB USR/SRC/SYS/KERNEL.S.TERMLC
********* TMP ***** go to A2osX.D1
.INB USR/SRC/SYS/KERNEL.S.PFT
.INB USR/SRC/SYS/KERNEL.S.IO
********* TMP ***** go to A2osX.D2
.INB USR/SRC/SYS/KERNEL.S.PWD
*--------------------------------------
DevMgr.Stat .DA DevMgr.FreeMem
DevMgr.Free .DA DevMgr.FreeMem
.DA DevMgr.HiMem
DevMgr.DevIdx .DA #1
*--------------------------------------
.LIST ON
DevMgr.FreeMem .EQ *
.LIST OFF