mirror of
https://github.com/A2osX/A2osX.git
synced 2025-04-06 18:37:12 +00:00
Kernel 0.93
This commit is contained in:
parent
5c330415ca
commit
53ba642a71
Binary file not shown.
@ -41,15 +41,25 @@ DRV.BLK.BlkNum .EQ $47
|
||||
*--------------------------------------
|
||||
*INDEX .EQ $5E ->$5F LOAD.FAC.FROM.YA
|
||||
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
|
||||
FAC .EQ $9D ->$A1
|
||||
FAC.SIGN .EQ $A2
|
||||
* FAC.EXTENSION .EQ $AC
|
||||
*--------------------------------------
|
||||
ACC32.Sign .EQ FAC
|
||||
ACC32 .EQ FAC+1
|
||||
*--------------------------------------
|
||||
ARG .EQ $A5 -> $A9 (5 bytes)
|
||||
ARG.SIGN .EQ $AA
|
||||
* FAC.EXTENSION .EQ $AC
|
||||
*--------------------------------------
|
||||
ARG32.Sign .EQ ARG
|
||||
ARG32 .EQ ARG+1
|
||||
*--------------------------------------
|
||||
* CHARGET .EQ $B1
|
||||
* CHARGOT .EQ $B7
|
||||
TXTPTR .EQ $B8
|
||||
@ -83,6 +93,8 @@ ROM.ATAN .EQ 38
|
||||
*--------------------------------------
|
||||
A2osX.SaveSM .EQ $100 Aux
|
||||
A2osX.SaveSX .EQ $101 Aux
|
||||
A2osX.NumStrLen .EQ $102 Aux
|
||||
A2osX.NumStrBuf .EQ $103 Aux
|
||||
*--------------------------------------
|
||||
* Main $200 -> 2FF : (Used By ProDOS,Clock DRV....)
|
||||
* Main $300 -> 3EF : <free>
|
||||
|
@ -602,11 +602,11 @@ ENV.SysVarsCPID ldy #S.PS.CPID
|
||||
|
||||
lda (pPS),y
|
||||
|
||||
ENV.SysVarsNum jsr MEM.Byte2Str102
|
||||
ENV.SysVarsNum jsr NUM.A2STR10NP
|
||||
|
||||
ldy #0
|
||||
|
||||
.1 lda $102,y
|
||||
.1 lda A2osX.NumStrBuf,y
|
||||
beq .8
|
||||
|
||||
iny
|
||||
|
@ -745,73 +745,6 @@ MEM.NextCharPtr2
|
||||
inc ZPPtr2+1
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
* Convert A to CSTR at $102
|
||||
*--------------------------------------
|
||||
MEM.Byte2Str102 stz .2+1 0xx
|
||||
stz .3+1 x00
|
||||
|
||||
phx
|
||||
|
||||
ldx #8
|
||||
|
||||
sed
|
||||
|
||||
.1 asl
|
||||
pha
|
||||
|
||||
.2 lda #$ff Self Modified
|
||||
adc .2+1
|
||||
sta .2+1
|
||||
|
||||
.3 lda #$ff Self Modified
|
||||
adc .3+1
|
||||
sta .3+1
|
||||
|
||||
pla
|
||||
dex
|
||||
bne .1
|
||||
|
||||
cld
|
||||
|
||||
ldx #0
|
||||
|
||||
lda .3+1 x00
|
||||
beq .4
|
||||
|
||||
jsr .8
|
||||
|
||||
.4 lda .2+1
|
||||
pha
|
||||
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
lsr 0x0
|
||||
|
||||
bne .5
|
||||
|
||||
cpx #0
|
||||
beq .6
|
||||
|
||||
.5 jsr .8
|
||||
|
||||
.6 pla
|
||||
|
||||
and #$0f 00x
|
||||
|
||||
jsr .8
|
||||
|
||||
stz $102,x
|
||||
|
||||
plx
|
||||
|
||||
rts
|
||||
|
||||
.8 ora #$30
|
||||
sta $102,x
|
||||
inx
|
||||
rts
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE USR/SRC/SYS/KERNEL.S.MEM
|
||||
LOAD USR/SRC/SYS/KERNEL.S
|
||||
|
@ -1,16 +1,119 @@
|
||||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------------
|
||||
ACC32.Sign .EQ FAC
|
||||
ACC32 .EQ FAC+1
|
||||
* http://6502.org/source/integers/32muldiv.htm
|
||||
* http://nparker.llx.com/a2/mult.html
|
||||
*--------------------------------------
|
||||
NUM.A2STR10 jsr NUM.A2ACC32
|
||||
* 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 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 bcc .1
|
||||
NUM.ACC322STR10 stx .5+1 Pad Len
|
||||
sty .81+1 Pad Char
|
||||
|
||||
stz A2osX.NumStrLen
|
||||
bcc .1
|
||||
|
||||
clc
|
||||
|
||||
@ -21,17 +124,17 @@ NUM.ACC322STR10 bcc .1
|
||||
|
||||
sec
|
||||
|
||||
.1 php
|
||||
.1 ror ACC32.Sign Save sign
|
||||
|
||||
ldx #4
|
||||
|
||||
.2 stz RESULT,x Clear all 5 bytes
|
||||
.2 stz RESULT,x Clear all 5 bytes
|
||||
dex
|
||||
bpl .2
|
||||
|
||||
sed switch to BCD mode
|
||||
sed switch to BCD mode
|
||||
|
||||
ldx #32 let's roll 32 bits
|
||||
ldx #32 let's roll 32 bits
|
||||
|
||||
.3 asl ACC32
|
||||
rol ACC32+1
|
||||
@ -50,49 +153,205 @@ NUM.ACC322STR10 bcc .1
|
||||
bne .3
|
||||
|
||||
cld
|
||||
|
||||
ldy #0
|
||||
* ldx #0
|
||||
|
||||
plp
|
||||
bcc .5
|
||||
|
||||
ldx .5+1 no padding
|
||||
beq .6
|
||||
|
||||
lda #'-'
|
||||
sta $102,x
|
||||
inx
|
||||
|
||||
.5 stz $102,x
|
||||
|
||||
.50 tya
|
||||
lda #10 starts at 10-padlen
|
||||
sec
|
||||
.5 sbc #$ff SELF MODIFIED
|
||||
tax
|
||||
|
||||
.6 txa
|
||||
lsr
|
||||
tay
|
||||
lda RESULT,y
|
||||
|
||||
bcs .6
|
||||
bcs .7
|
||||
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
|
||||
.6 and #$0F
|
||||
ora #$30
|
||||
cmp #$30
|
||||
|
||||
lda $102,x
|
||||
sta $102,x
|
||||
|
||||
.7 sta $102,x
|
||||
inx
|
||||
.7 and #$0F
|
||||
ora #$30
|
||||
|
||||
cmp #'0'
|
||||
beq .80
|
||||
|
||||
.8 iny
|
||||
cpy #10
|
||||
bne .50
|
||||
ldy #'0' next 0s always printed
|
||||
sty .81+1
|
||||
|
||||
stz $102,x
|
||||
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.ACC32ZERO
|
||||
|
||||
sta ACC32
|
||||
|
||||
ldy #0
|
||||
|
||||
.1 iny
|
||||
lda (ZPPtr2),y
|
||||
beq .8
|
||||
jsr MEM.IsHexDigit
|
||||
bcs .8
|
||||
|
||||
pha
|
||||
|
||||
ldx #4
|
||||
|
||||
.2 jsr ACC32.T2
|
||||
bcs .99 overflow!!!
|
||||
dex
|
||||
bne .2
|
||||
|
||||
pla
|
||||
ora ACC32
|
||||
sta ACC32
|
||||
bra .1
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.99 pla
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* Convert Decimal int at ZPPtr2 to ACC32
|
||||
*--------------------------------------
|
||||
NUM.Dec2ACC32 jsr NUM.ACC32ZERO
|
||||
|
||||
clc
|
||||
.99 rts
|
||||
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 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
|
||||
*--------------------------------------
|
||||
ACC32.T10 ldx #3
|
||||
|
||||
.1 lda ACC32,x save ACC32 for 4+1
|
||||
pha
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
jsr ACC32.T2 STDLIB.32 * 2 -> STDLIB.32
|
||||
bcs ACC32.9 overflow!!!
|
||||
|
||||
jsr ACC32.T2 STDLIB.32 * 4 -> STDLIB.32
|
||||
bcs ACC32.9 overflow!!!
|
||||
|
||||
ldx #0
|
||||
ldy #4
|
||||
|
||||
* clc
|
||||
|
||||
.2 pla STDLIB.32 * 4 + STDLIB.32 -> STDLIB.32
|
||||
adc ACC32,x
|
||||
sta ACC32,x
|
||||
inx
|
||||
dey
|
||||
bne .2
|
||||
|
||||
bcs ACC32.RTS overflow!!!
|
||||
|
||||
ACC32.T2 asl ACC32
|
||||
rol ACC32+1
|
||||
rol ACC32+2
|
||||
rol ACC32+3
|
||||
rts if CS, overflow!!!
|
||||
|
||||
ACC32.9 pla discard saved STDLIB.32
|
||||
pla
|
||||
pla
|
||||
pla
|
||||
|
||||
ACC32.RTS rts
|
||||
*--------------------------------------
|
||||
NUM.A2ACC32 sta ACC32
|
||||
.HS 2C BIT ABS
|
||||
@ -102,6 +361,12 @@ NUM.ACC32ZERO stz ACC32
|
||||
stz ACC32+3
|
||||
rts
|
||||
*--------------------------------------
|
||||
NUM.TMP32ZERO stz TMP32
|
||||
stz TMP32+1
|
||||
stz TMP32+2
|
||||
stz TMP32+3
|
||||
rts
|
||||
*--------------------------------------
|
||||
NUM.ACC32NEG sec
|
||||
|
||||
ldy #0
|
||||
|
@ -502,14 +502,14 @@ PWD.StoreString iny
|
||||
PWD.StoreByte php
|
||||
phx
|
||||
|
||||
jsr MEM.Byte2Str102
|
||||
jsr NUM.A2STR10NP
|
||||
|
||||
plx
|
||||
plp
|
||||
|
||||
ldy #0
|
||||
|
||||
.1 lda $102,y
|
||||
.1 lda A2osX.NumStrBuf,y
|
||||
beq PWD.GetRecordLen.RTS
|
||||
|
||||
iny
|
||||
|
@ -1,10 +1,8 @@
|
||||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------------
|
||||
HEXBUF .EQ FAC
|
||||
K.PrintF.PadL .EQ FAC+4
|
||||
K.PrintF.PadC .EQ FAC+5
|
||||
HEXBUF.Signed .EQ ARG.SIGN
|
||||
K.PrintF.PadL .EQ FAC+5
|
||||
K.PrintF.PadC .EQ ARG.SIGN
|
||||
*/--------------------------------------
|
||||
* # putchar (BLOCKING)
|
||||
* Print A (char) to StdOut
|
||||
@ -291,8 +289,7 @@ K.PrintF.1 stz PrintF.Cnt
|
||||
bne .10
|
||||
|
||||
stz K.PrintF.PadL
|
||||
lda #' '
|
||||
sta K.PrintF.PadC
|
||||
stz K.PrintF.PadC
|
||||
|
||||
ldy #0
|
||||
|
||||
@ -321,6 +318,8 @@ K.PrintF.1 stz PrintF.Cnt
|
||||
bne .51 second digit...
|
||||
|
||||
sta K.PrintF.PadL first digit, store.
|
||||
lda #' '
|
||||
sta K.PrintF.PadC and set pad char as SPACE
|
||||
bra .2
|
||||
|
||||
.51 pha save it...
|
||||
@ -372,12 +371,12 @@ K.PrintF.1 stz PrintF.Cnt
|
||||
>LDYA ZPPtr1
|
||||
>STYA ZPPtr2
|
||||
|
||||
jsr STDLIB.GetHex
|
||||
jsr NUM.Hex2ACC32
|
||||
bcs .99
|
||||
|
||||
jsr MEM.AddYToPtr1
|
||||
|
||||
.14 lda HEXBUF
|
||||
.14 lda ACC32
|
||||
bra .20
|
||||
|
||||
.19 lda PrintFTBL2.OUT,x
|
||||
@ -481,13 +480,13 @@ PrintF.I sec signed short
|
||||
.HS 90 BCC
|
||||
PrintF.D clc unsigned short (BYTE)
|
||||
|
||||
ror HEXBUF.Signed
|
||||
ror ACC32.Sign
|
||||
|
||||
jsr PrintF.GetByte
|
||||
bcs PrintF.BB.RTS
|
||||
sta HEXBUF
|
||||
sta ACC32
|
||||
|
||||
stz HEXBUF+1
|
||||
stz ACC32+1
|
||||
|
||||
ldx #0 one byte
|
||||
|
||||
@ -497,150 +496,43 @@ PrintF.II sec signed int
|
||||
.HS 90 BCC
|
||||
PrintF.DD clc unsigned int (WORD)
|
||||
|
||||
ror HEXBUF.Signed
|
||||
ror ACC32.Sign
|
||||
|
||||
jsr PrintF.GetByte
|
||||
bcs PrintF.BB.RTS
|
||||
sta HEXBUF
|
||||
sta ACC32
|
||||
|
||||
jsr PrintF.GetByte
|
||||
bcs PrintF.BB.RTS
|
||||
sta HEXBUF+1
|
||||
sta ACC32+1
|
||||
|
||||
ldx #1 two bytes
|
||||
|
||||
PrintF.DD.1 stz HEXBUF+2
|
||||
stz HEXBUF+3
|
||||
bra PrintF.U.1
|
||||
PrintF.DD.1 stz ACC32+2
|
||||
stz ACC32+3
|
||||
bra PrintF.NUM
|
||||
|
||||
PrintF.L sec signed long
|
||||
.HS 90 BCC
|
||||
PrintF.U clc unsigned long (DWORD)
|
||||
|
||||
ror HEXBUF.Signed
|
||||
ror ACC32.Sign
|
||||
|
||||
ldx #$ff
|
||||
|
||||
.1 jsr PrintF.GetByte
|
||||
bcs PrintF.BB.RTS
|
||||
inx
|
||||
sta HEXBUF,x
|
||||
sta ACC32,x
|
||||
|
||||
cpx #3
|
||||
bne .1
|
||||
|
||||
* ldx #3 4 bytes
|
||||
|
||||
PrintF.U.1 clc
|
||||
bit HEXBUF.Signed
|
||||
bpl PrintF.Hex2Dec unsigned, nothing to check
|
||||
|
||||
lda HEXBUF,x get sign
|
||||
bpl PrintF.Hex2Dec
|
||||
|
||||
sec
|
||||
|
||||
ldy #0
|
||||
|
||||
.1 lda HEXBUF,y two's complement of X bytes
|
||||
eor #$ff
|
||||
adc #0
|
||||
sta HEXBUF,y
|
||||
iny
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
sec tell to print a "-" sign....
|
||||
*--------------------------------------
|
||||
* Convert HEXBUF to ASCBUF decimal padded with 0
|
||||
*--------------------------------------
|
||||
PrintF.Hex2Dec ror HEXBUF.Signed
|
||||
|
||||
ldx #4
|
||||
|
||||
.1 stz RESULT,x Clear all 5 bytes
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
sed switch to BCD mode
|
||||
|
||||
ldx #32 let's roll 32 bits
|
||||
|
||||
.2 asl HEXBUF
|
||||
rol HEXBUF+1
|
||||
rol HEXBUF+2
|
||||
rol HEXBUF+3
|
||||
|
||||
ldy #4
|
||||
|
||||
.3 lda RESULT,y
|
||||
adc RESULT,y
|
||||
sta RESULT,y
|
||||
dey
|
||||
bpl .3
|
||||
|
||||
dex
|
||||
bne .2
|
||||
|
||||
cld
|
||||
|
||||
bit HEXBUF.Signed
|
||||
bpl .9
|
||||
|
||||
lda #'-'
|
||||
jsr PrintF.COut
|
||||
bcs .99
|
||||
|
||||
.9 lda K.PrintF.PadL any Len format ?
|
||||
beq .4 no
|
||||
|
||||
lda #10
|
||||
sec yes, Print only digits starting at pos 10-K.PrintF.PadL
|
||||
sbc K.PrintF.PadL
|
||||
|
||||
.4 tax x=0 if no K.PrintF.PadL, or x=10-K.PrintF.PadL
|
||||
|
||||
.5 txa X range 0 to 9
|
||||
lsr CS if lo nibble (1,3,5,7,9)
|
||||
tay
|
||||
|
||||
lda RESULT,y
|
||||
|
||||
bcs .6
|
||||
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
|
||||
.6 and #$0F
|
||||
ora #$30
|
||||
cmp #$30
|
||||
|
||||
beq .7 a zero?
|
||||
|
||||
inc K.PrintF.PadL found a non zero, Print all digits, even if 0, next time
|
||||
ldy #'0'
|
||||
sty K.PrintF.PadC
|
||||
bra .8
|
||||
|
||||
.7 cpx #9 last digit ?
|
||||
beq .8 Print always
|
||||
|
||||
ldy K.PrintF.PadL no pad to fill, do not Print 0
|
||||
beq .10
|
||||
|
||||
lda K.PrintF.PadC fill with K.PrintF.PadC
|
||||
|
||||
.8 jsr PrintF.COut
|
||||
bcs .99
|
||||
|
||||
.10 inx
|
||||
cpx #10
|
||||
bne .5
|
||||
|
||||
clc
|
||||
.99 rts
|
||||
PrintF.NUM ldx K.PrintF.PadL
|
||||
ldy K.PrintF.PadC
|
||||
rol ACC32.Sign
|
||||
jsr NUM.ACC322STR10
|
||||
bra PrintF.StrNum
|
||||
*--------------------------------------
|
||||
* EXP(8) 1(s) 1significants(31)
|
||||
* http://apple2.org.za/gswv/a2zine/GS.WorldView/Resources/GS.TECH.INFO/AppleSoft/
|
||||
@ -656,7 +548,7 @@ PrintF.F clc
|
||||
|
||||
cmp (pStack)
|
||||
bcc .1
|
||||
bne .9 CS
|
||||
bne PrintF.StrNum.RTS
|
||||
|
||||
.1 tya
|
||||
sec +1
|
||||
@ -673,13 +565,13 @@ PrintF.F clc
|
||||
adc #5
|
||||
sta PrintF.GetByte+1
|
||||
|
||||
ldy #3 In order not to trash A2osX.SaveSM,A2osX.SaveSX
|
||||
ldy #A2osX.NumStrBuf+1 In order not to trash A2osX.SaveSM,A2osX.SaveSX
|
||||
ldx #ROM.FOUT
|
||||
jsr GP.ROMCALL
|
||||
|
||||
ldy #0
|
||||
PrintF.StrNum ldy #0
|
||||
|
||||
.2 lda $102,y
|
||||
.2 lda A2osX.NumStrBuf,y
|
||||
beq .8
|
||||
|
||||
iny
|
||||
@ -690,6 +582,7 @@ PrintF.F clc
|
||||
.9 rts
|
||||
|
||||
.8 clc
|
||||
PrintF.StrNum.RTS
|
||||
rts
|
||||
*--------------------------------------
|
||||
PrintF.S ldy #$ff CSTR
|
||||
@ -1087,20 +980,20 @@ K.SScanF.L
|
||||
K.SScanF.U lda K.SScanFTBL+1,x Get VAR size
|
||||
pha Save VAL size
|
||||
|
||||
jsr STDLIB.GetDec
|
||||
jsr NUM.Dec2ACC32
|
||||
bra K.SScanF.GetVAL
|
||||
*--------------------------------------
|
||||
K.SScanF.HH
|
||||
K.SScanF.H lda K.SScanFTBL+1,x Get VAR size
|
||||
pha
|
||||
|
||||
jsr STDLIB.GetHex
|
||||
jsr NUM.Hex2ACC32
|
||||
|
||||
K.SScanF.GetVAL jsr K.SScanF.Fwd Y=char count parsed
|
||||
|
||||
.1 ply get back VAL size
|
||||
|
||||
.2 lda STDLIB.32-1,y
|
||||
.2 lda ACC32-1,y
|
||||
dey
|
||||
sta (ZPPtr3),y
|
||||
bne .2
|
||||
|
@ -87,21 +87,18 @@ K.StrToUL.rts rts
|
||||
* ## RETURN VALUE
|
||||
* On stack (long)
|
||||
*\--------------------------------------
|
||||
*STDLIB.32 .BS 4 32 bits max
|
||||
STDLIB.32 .EQ FAC 32 bits max
|
||||
*--------------------------------------
|
||||
K.AToL >STYA ZPPtr2 C-String in Ptr2, Dst buffer in Ptr1
|
||||
|
||||
lda #10 base 10
|
||||
sec signed
|
||||
|
||||
K.AToL.I jsr STDLIB.GetDec
|
||||
K.AToL.I jsr NUM.Dec2ACC32
|
||||
bcs .9
|
||||
phy Save Count processed
|
||||
|
||||
ldy #3
|
||||
|
||||
.3 lda STDLIB.32,y
|
||||
.3 lda ACC32,y
|
||||
>PUSHA
|
||||
dey
|
||||
bpl .3
|
||||
@ -126,171 +123,12 @@ K.atoi >STYA ZPPtr2
|
||||
lda #10 base 10
|
||||
sec signed
|
||||
|
||||
jsr STDLIB.GetDec
|
||||
jsr NUM.Dec2ACC32
|
||||
bcs .9
|
||||
|
||||
>LDYA STDLIB.32
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* Convert Hex int at ZPPtr2 to STDLIB.32
|
||||
*--------------------------------------
|
||||
STDLIB.GetHex lda (ZPPtr2)
|
||||
beq .9
|
||||
|
||||
jsr MEM.IsHexDigit
|
||||
bcs .9
|
||||
|
||||
jsr STDLIB.32.Clear
|
||||
|
||||
sta STDLIB.32
|
||||
|
||||
ldy #0
|
||||
|
||||
.1 iny
|
||||
lda (ZPPtr2),y
|
||||
beq .8
|
||||
jsr MEM.IsHexDigit
|
||||
bcs .8
|
||||
|
||||
pha
|
||||
|
||||
ldx #4
|
||||
|
||||
.2 jsr STDLIB.32.T2
|
||||
bcs .99 overflow!!!
|
||||
dex
|
||||
bne .2
|
||||
|
||||
pla
|
||||
ora STDLIB.32
|
||||
sta STDLIB.32
|
||||
bra .1
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.99 pla
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* Convert Decimal int at ZPPtr2 to STDLIB.32
|
||||
*--------------------------------------
|
||||
STDLIB.GetDec jsr STDLIB.32.Clear
|
||||
|
||||
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 STDLIB.32.T10
|
||||
ply
|
||||
|
||||
bcs .9
|
||||
|
||||
lda (ZPPtr2),y
|
||||
and #$0F
|
||||
|
||||
* clc
|
||||
|
||||
adc STDLIB.32
|
||||
sta STDLIB.32
|
||||
bcc .1
|
||||
inc STDLIB.32+1
|
||||
bne .1
|
||||
inc STDLIB.32+2
|
||||
bne .1
|
||||
inc STDLIB.32+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
|
||||
|
||||
ldx #4
|
||||
ldy #0
|
||||
|
||||
sec
|
||||
|
||||
.81 lda STDLIB.32,y
|
||||
eor #$ff
|
||||
adc #0
|
||||
sta STDLIB.32,y
|
||||
iny
|
||||
dex
|
||||
bne .81
|
||||
|
||||
.88 clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
STDLIB.32.T10 ldx #3
|
||||
|
||||
.1 lda STDLIB.32,x save STDLIB.32 for 4+1
|
||||
pha
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
jsr STDLIB.32.T2 STDLIB.32 * 2 -> STDLIB.32
|
||||
bcs STDLIB.32.9 overflow!!!
|
||||
|
||||
jsr STDLIB.32.T2 STDLIB.32 * 4 -> STDLIB.32
|
||||
bcs STDLIB.32.9 overflow!!!
|
||||
|
||||
ldx #0
|
||||
ldy #4
|
||||
|
||||
* clc
|
||||
|
||||
.2 pla STDLIB.32 * 4 + STDLIB.32 -> STDLIB.32
|
||||
adc STDLIB.32,x
|
||||
sta STDLIB.32,x
|
||||
inx
|
||||
dey
|
||||
bne .2
|
||||
|
||||
bcs STDLIB.32.RTS overflow!!!
|
||||
|
||||
* STDLIB.32 * 2 -> STDLIB.32
|
||||
|
||||
STDLIB.32.T2 asl STDLIB.32
|
||||
rol STDLIB.32+1
|
||||
rol STDLIB.32+2
|
||||
rol STDLIB.32+3
|
||||
rts if CS, overflow!!!
|
||||
|
||||
STDLIB.32.9 pla discard saved STDLIB.32
|
||||
pla
|
||||
pla
|
||||
pla
|
||||
|
||||
STDLIB.32.RTS rts
|
||||
*--------------------------------------
|
||||
STDLIB.32.Clear ldx #3
|
||||
|
||||
.1 stz STDLIB.32,x
|
||||
dex
|
||||
bpl .1
|
||||
rts
|
||||
>LDYA ACC32
|
||||
.9
|
||||
K.atoi.RTS rts
|
||||
*/--------------------------------------
|
||||
* # RealPath
|
||||
* Return the canonicalized absolute pathname
|
||||
@ -315,7 +153,7 @@ STDLIB.realpath.I
|
||||
|
||||
ldx #SYS.ExpandStr
|
||||
jsr K.SYSCALL2.BANK
|
||||
bcs STDLIB.32.RTS
|
||||
bcs K.atoi.RTS
|
||||
|
||||
>STYA ZPPtr1
|
||||
stx .99+1 save expanded buffer hMem
|
||||
|
@ -1133,11 +1133,11 @@ DRV.TERM.CURBLNK.SET
|
||||
DRV.TERM.CURBLNK.RTS
|
||||
rts
|
||||
*--------------------------------------
|
||||
Decimal.Out jsr MEM.Byte2Str102
|
||||
Decimal.Out jsr NUM.A2STR10NP
|
||||
|
||||
ldx #0
|
||||
|
||||
.1 lda $102,x
|
||||
.1 lda A2osX.NumStrBuf,x
|
||||
|
||||
beq DRV.TERM.CURBLNK.RTS
|
||||
|
||||
|
@ -11,11 +11,6 @@ DAY0 .EQ 4 day 0 was a thursday
|
||||
.DUMMY
|
||||
.OR ZPTMP
|
||||
TIME.DWORD .BS 4
|
||||
TIME.DivDay .BS 2
|
||||
TIME.ModDay .BS 3
|
||||
TIME.Div60 .BS 2
|
||||
TIME.Mod .BS 1
|
||||
TIME.Div3600 .BS 1
|
||||
TIME.Century .BS 1
|
||||
TIME.Year .BS 1
|
||||
.ED
|
||||
@ -95,7 +90,7 @@ TIME.PTime2TimeP1P2
|
||||
|
||||
* 1/1/1970 was Thursday...if not leap, add one, if leap add 2
|
||||
|
||||
K.ComputeWDAY lda #3 Thursday : 4 (-1 for mod 7)
|
||||
K.ComputeWDAY lda #DAY0-1 Thursday : 4 (-1 for mod 7)
|
||||
pha
|
||||
lda #19
|
||||
sta TIME.DWORD
|
||||
@ -182,134 +177,43 @@ K.CTime2Time jsr MEM.SPtr1PPtr2
|
||||
ldy #3
|
||||
|
||||
.1 lda (ZPPtr1),y
|
||||
sta TIME.DWORD,y
|
||||
sta ARG32,y ARG = ctime
|
||||
dey
|
||||
bpl .1
|
||||
|
||||
stz TIME.DivDay
|
||||
stz TIME.DivDay+1
|
||||
lda #SECSDAY ACC = SECSDAY
|
||||
sta ACC32
|
||||
|
||||
.2 lda TIME.DWORD
|
||||
sta TIME.ModDay
|
||||
sec
|
||||
sbc #SECSDAY
|
||||
pha
|
||||
lda /SECSDAY
|
||||
sta ACC32+1
|
||||
|
||||
lda TIME.DWORD+1
|
||||
sta TIME.ModDay+1
|
||||
sbc /SECSDAY
|
||||
pha
|
||||
lda ^SECSDAY
|
||||
sta ACC32+2
|
||||
|
||||
lda TIME.DWORD+2
|
||||
sta TIME.ModDay+2
|
||||
sbc ^SECSDAY
|
||||
pha
|
||||
stz ACC32+3
|
||||
|
||||
jsr NUM.DIVMOD32 ARG32 = Days, TMP32 = remaining secs
|
||||
|
||||
lda TIME.DWORD+3
|
||||
sbc #0
|
||||
bcc .3 end of DIV/MOD ?
|
||||
|
||||
sta TIME.DWORD+3
|
||||
|
||||
ldx #2
|
||||
|
||||
.21 pla
|
||||
sta TIME.DWORD,x
|
||||
dex
|
||||
bpl .21
|
||||
|
||||
inc TIME.DivDay
|
||||
bne .2
|
||||
inc TIME.DivDay+1
|
||||
bne .2
|
||||
|
||||
.3 pla
|
||||
pla
|
||||
pla
|
||||
stz TIME.Div60
|
||||
stz TIME.Div60+1
|
||||
|
||||
.4 lda TIME.ModDay
|
||||
sta TIME.Mod
|
||||
sec
|
||||
sbc #60
|
||||
pha
|
||||
|
||||
lda TIME.ModDay+1
|
||||
sbc #0
|
||||
pha
|
||||
|
||||
lda TIME.ModDay+2
|
||||
sbc #0
|
||||
|
||||
bcc .5
|
||||
|
||||
sta TIME.ModDay+2
|
||||
pla
|
||||
sta TIME.ModDay+1
|
||||
pla
|
||||
sta TIME.ModDay
|
||||
|
||||
inc TIME.Div60
|
||||
bne .4
|
||||
inc TIME.Div60+1
|
||||
bne .4
|
||||
|
||||
.5 pla
|
||||
pla
|
||||
lda TIME.Mod
|
||||
ldy #S.Time.SECOND
|
||||
sta (ZPPtr2),y
|
||||
|
||||
stz TIME.Div3600
|
||||
|
||||
.6 lda TIME.Div60
|
||||
sta TIME.Mod
|
||||
sec
|
||||
sbc #60
|
||||
pha
|
||||
|
||||
lda TIME.Div60+1
|
||||
sbc #0
|
||||
pha
|
||||
|
||||
bcc .7
|
||||
|
||||
sta TIME.Div60+1
|
||||
pla
|
||||
sta TIME.Div60
|
||||
|
||||
inc TIME.Div3600
|
||||
bne .6
|
||||
|
||||
.7 pla
|
||||
|
||||
lda TIME.Mod
|
||||
dey ldy #S.Time.MINUTE
|
||||
sta (ZPPtr2),y
|
||||
|
||||
lda TIME.Div3600
|
||||
dey ldy #S.Time.HOUR
|
||||
sta (ZPPtr2),y
|
||||
|
||||
lda TIME.DivDay WDAY computation : (DivDay + DAY0) mod 7
|
||||
lda ARG32 WDAY computation : (ARG32 + DAY0) mod 7
|
||||
clc
|
||||
adc #DAY0
|
||||
pha
|
||||
lda TIME.DivDay+1
|
||||
|
||||
lda ARG32+1 65535 days = 179 years
|
||||
adc /DAY0
|
||||
eor #$ff
|
||||
tax
|
||||
|
||||
pla
|
||||
|
||||
.8 sta TIME.Mod
|
||||
.2 tay
|
||||
sec
|
||||
sbc #7
|
||||
bcs .8
|
||||
bcs .2
|
||||
inx
|
||||
bne .8
|
||||
bne .2
|
||||
|
||||
lda TIME.Mod
|
||||
tya
|
||||
ldy #S.Time.WDAY
|
||||
sta (ZPPtr2),y
|
||||
|
||||
@ -318,7 +222,8 @@ K.CTime2Time jsr MEM.SPtr1PPtr2
|
||||
lda #YEAR0
|
||||
sta TIME.Year
|
||||
|
||||
K.CTime2Time.Year
|
||||
K.CTime2Time.Year
|
||||
|
||||
.1 ldy TIME.Century
|
||||
lda TIME.Year
|
||||
jsr TIME.IsLeapYearYA if Leap year CS
|
||||
@ -328,16 +233,16 @@ K.CTime2Time.Year
|
||||
eor #1
|
||||
lsr
|
||||
|
||||
lda TIME.DivDay
|
||||
lda ARG32
|
||||
sbc #365
|
||||
pha
|
||||
lda TIME.DivDay+1
|
||||
lda ARG32+1
|
||||
sbc /365
|
||||
bcc .2
|
||||
|
||||
sta TIME.DivDay+1
|
||||
sta ARG32+1
|
||||
pla
|
||||
sta TIME.DivDay
|
||||
sta ARG32
|
||||
|
||||
inc TIME.Year
|
||||
lda TIME.Year
|
||||
@ -348,13 +253,46 @@ K.CTime2Time.Year
|
||||
bne .1
|
||||
|
||||
.2 pla
|
||||
|
||||
lda TIME.Century
|
||||
* ldy #S.Time.CENTURY
|
||||
sta (ZPPtr2)
|
||||
|
||||
ldy #S.Time.YEAR
|
||||
lda TIME.Year
|
||||
sta (ZPPtr2),y
|
||||
|
||||
K.CTime2Time.HMS
|
||||
|
||||
ldx #3
|
||||
|
||||
.1 lda TMP32,x
|
||||
sta ARG32,x
|
||||
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 NUM.DIVMOD32
|
||||
|
||||
ldy #S.TIME.MINUTE
|
||||
lda TMP32
|
||||
sta (ZPPtr2),y
|
||||
|
||||
ldy #S.TIME.HOUR
|
||||
lda ARG32
|
||||
sta (ZPPtr2),y
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
@ -559,17 +497,14 @@ K.StrFTime.MM ldy #S.Time.MINUTE
|
||||
K.StrFTime.addDecPtr1Y
|
||||
lda (ZPPtr3),y
|
||||
K.StrFTime.addDecA
|
||||
jsr MEM.Byte2Str102
|
||||
ldx #2
|
||||
ldy #'0'
|
||||
clc
|
||||
jsr NUM.A2STR10
|
||||
|
||||
lda $102
|
||||
ldx $103
|
||||
|
||||
bne .1
|
||||
tax
|
||||
lda #$30
|
||||
|
||||
.1 jsr MEM.PutCharPtr1
|
||||
txa
|
||||
lda A2osX.NumStrBuf
|
||||
jsr MEM.PutCharPtr1
|
||||
lda A2osX.NumStrBuf+1
|
||||
jmp MEM.PutCharPtr1
|
||||
*--------------------------------------
|
||||
K.StrFTime.DAY >PSTR "Monday"
|
||||
|
@ -46,6 +46,7 @@ A2osX.D1 .PH $D000
|
||||
.INB USR/SRC/SYS/KERNEL.S.STDIO
|
||||
.INB USR/SRC/SYS/KERNEL.S.STDLIB
|
||||
.INB USR/SRC/SYS/KERNEL.S.DEV
|
||||
.INB USR/SRC/SYS/KERNEL.S.FIO
|
||||
.EP
|
||||
A2osX.D2 .PH $D000
|
||||
.DA #RRAMWRAMBNK2
|
||||
@ -60,11 +61,11 @@ 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.TERMLC
|
||||
********* TMP ***** go to A2osX.D1
|
||||
.INB USR/SRC/SYS/KERNEL.S.PFT
|
||||
.INB USR/SRC/SYS/KERNEL.S.IO
|
||||
.INB USR/SRC/SYS/KERNEL.S.FIO
|
||||
********* TMP ***** go to A2osX.D2
|
||||
.INB USR/SRC/SYS/KERNEL.S.ARG
|
||||
.INB USR/SRC/SYS/KERNEL.S.PWD
|
||||
|
Loading…
x
Reference in New Issue
Block a user