mirror of
https://github.com/A2osX/A2osX.git
synced 2024-07-06 12:29:02 +00:00
Kernel 0.93
This commit is contained in:
parent
1de28dea4b
commit
475bbddc25
Binary file not shown.
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
*--------------------------------------
|
||||
|
@ -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
|
@ -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
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
@ -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
|
||||
|
@ -502,7 +502,7 @@ PWD.StoreString iny
|
||||
PWD.StoreByte php
|
||||
phx
|
||||
|
||||
jsr NUM.A2STR10NP
|
||||
jsr MATH.A2STR10NP
|
||||
|
||||
plx
|
||||
plp
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user