Kernel 0.9.1 : KERNEL, Preemtive mode, KERNEL & LIB Cleaning

This commit is contained in:
Rémy GIBERT 2018-04-17 16:25:45 +01:00
parent b14a8e556d
commit 4e7d011929
13 changed files with 381 additions and 196 deletions

35
.Docs/LIBCRYPT.md Normal file
View File

@ -0,0 +1,35 @@
*** Auto generated by docgen.cmd ***
# MD5
+ Return MD5 Hash for input String
## In :
+ PUSHW = PTR to Src String
+ PUSHW = PTR to Dst MessageDigest Buffer
## Out :
+ CC
# MD5Init
## In :
## Out :
+ A = hMem To S.MD5
# MD5Update (Append "$80" & Padding & original size)
## In:
* PUSHW DATA LEN
* PUSHW DATA PTR
* PUSHB MD5 Context hMem
## Out :
# MD5Finalize
## In :
+ PUSHW = MessageDigest (PSTR, 16 Bytes, 32 Chars) +Ending 0
+ PUSHB = hMem To S.MD5
## Out:

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -30,6 +30,11 @@ set SRCDIR=%~dp0..\LIB
set FILTER=LIBBLKDEV.S*.txt set FILTER=LIBBLKDEV.S*.txt
Call :SCAN Call :SCAN
set DOCFILE=%~dp0..\.Docs\LIBCRYPT.md
set SRCDIR=%~dp0..\LIB
set FILTER=LIBCRYPT.S*.txt
Call :SCAN
echo. echo.
echo All done : !c! Files scanned. echo All done : !c! Files scanned.
echo. echo.

172
BIN/MD5.S.txt Normal file
View File

@ -0,0 +1,172 @@
NEW
PREFIX /A2OSX.BUILD
AUTO 4,1
.LIST OFF
.OP 65C02
.OR $2000
.TF /A2OSX.BUILD/BIN/MD5
*--------------------------------------
.INB /A2OSX.BUILD/INC/MACROS.I
.INB /A2OSX.BUILD/INC/A2OSX.I
.INB /A2OSX.BUILD/INC/LIBCRYPT.I
*--------------------------------------
ZPPtr1 .EQ ZPBIN
ZPPtr2 .EQ ZPBIN+2
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START CS
.DA DS.END-DS.START DS
.DA #16 SS
.DA #4 ZP
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.LIBCRYPT .DA LIBCRYPT
L.MSG.USAGE .DA MSG.USAGE
L.MSG.INIT .DA MSG.INIT
L.MSG.OK .DA MSG.OK
L.MSG.ERR .DA MSG.ERR
.DA 0
*--------------------------------------
CS.INIT ldy #S.PS.ARGC
lda (pPs),y
beq .99
.1 >INC.G ArgIndex
>SYSCALL GetArg.A
bcs .7
>STYA ZPPtr1
lda (ZPPtr1)
cmp #'-'
bne .4
ldy #1
lda (ZPPtr1),y
beq .99
ldx OptionList
.2 cmp OptionList,x
beq .3
dex
bne .2
.99 >LDYA L.MSG.USAGE
>SYSCALL PrintF.YA
lda #K.E.SYN
sec
rts
.3 ldy OptionVars-1,x
lda #$80
sta (pData),y
bra .1
.4 >LDA.G hFullPath
bne .99
.7 >LDA.G bText
.8 >LDYA L.LIBCRYPT
>SYSCALL LoadLib.YA
sta hLIBCRYPT
* lda (pPs)
* ora #S.PS.F.EVENT Now accept events
* sta (pPs)
clc
rts
*--------------------------------------
CS.RUN
>LDYA L.MSG.OK
>SYSCALL PrintF.YA
lda #0
sec
rts
.9 pha
>PUSHA
>LDYA L.MSG.ERR
>SYSCALL PrintF.YA
pla
sec
rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT >LDA.G hDataBuf
beq .1
>SYSCALL FreeMem.A
.1 lda hLIBCRYPT
beq .8
>SYSCALL UnloadLib.A
.8 clc
rts
*--------------------------------------
A2CharAX pha
lsr
lsr
lsr
lsr
and #$0F
ora #$30
cmp #'9'+1
bcc .1
adc #6
.1 tax
pla
and #$0F
ora #$30
cmp #'9'+1
bcc .8
adc #6
.8 rts
*--------------------------------------
CS.END
*--------------------------------------
OptionList >PSTR "Dd"
OptionVars .DA #bText,#bText
*--------------------------------------
MSG.USAGE .AZ "Usage : MD5 [ -d input_text | infile… ] \r\n"
MSG.OK .AZ "[OK]\r\n"
MSG.ERR .AZ "[%h]\r\n"
MSG.INIT .AZ "Computing %s ..."
*--------------------------------------
LIBCRYPT .AZ "libcrypt.o"
hLIBCRYPT .BS 1
*--------------------------------------
.DUMMY
.OR 0
DS.START
ArgIndex .BS 1
bText .BS 1
hFullPath .BS 1
hDataBuf .BS 1
hMD5CtxBuf .BS 1
DS.END .ED
*--------------------------------------
MAN
SAVE /A2OSX.SRC/BIN/MD5.S
ASM

View File

@ -431,7 +431,7 @@ S.EVT.W2 .EQ 6
S.EVT .EQ 8 S.EVT .EQ 8
*-------------------------------------- *--------------------------------------
S.TIME.CENTURY .EQ 0 19,20,21.... S.TIME.CENTURY .EQ 0 19,20,21....
S.TIME.YEAR .EQ 1 0.99 S.TIME.YEAR .EQ 1 0..99
S.TIME.MONTH .EQ 2 1..12 S.TIME.MONTH .EQ 2 1..12
S.TIME.DAY .EQ 3 1..31 S.TIME.DAY .EQ 3 1..31
S.TIME.HOUR .EQ 4 0..23 S.TIME.HOUR .EQ 4 0..23

View File

@ -6,10 +6,10 @@ AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
*-------------------------------------- *--------------------------------------
LIBCRYPT.MD5PStrA .EQ 4 LIBCRYPT.MD5 .EQ 4
LIBCRYPT.MD5Init .EQ 6 LIBCRYPT.MD5Init .EQ 6
LIBCRYPT.MD5Update .EQ 8 LIBCRYPT.MD5Update .EQ 8
LIBCRYPT.MD5FinalizeA .EQ 10 LIBCRYPT.MD5Finalize .EQ 10
*-------------------------------------- *--------------------------------------
* S.MD5 STRUCT * S.MD5 STRUCT
*-------------------------------------- *--------------------------------------

View File

@ -10,13 +10,11 @@ AUTO 4,1
.INB /A2OSX.BUILD/INC/A2OSX.I .INB /A2OSX.BUILD/INC/A2OSX.I
.INB /A2OSX.BUILD/INC/LIBCRYPT.I .INB /A2OSX.BUILD/INC/LIBCRYPT.I
*-------------------------------------- *--------------------------------------
ZPTmpPtr1 .EQ ZPLIB ZPCtxPtr .EQ ZPLIB
ZPTmpPtr2 .EQ ZPLIB+2 ZPDataPtr .EQ ZPLIB+2
ZPTmpPtr3 .EQ ZPLIB+4 ZPDataLen .EQ ZPLIB+4
ZPTmpPtr4 .EQ ZPLIB+6 ZPChunkLen .EQ ZPLIB+6
ZPDataPtr .EQ ZPLIB+8 ZPHashPtr .EQ ZPLIB+8
ZPDataLen .EQ ZPLIB+10
ZPChunkLen .EQ ZPLIB+12
*-------------------------------------- *--------------------------------------
* DWORD Macros : Do NOT disturb carry with cpx, cpy... * DWORD Macros : Do NOT disturb carry with cpx, cpy...
*-------------------------------------- *--------------------------------------
@ -103,88 +101,90 @@ CS.START cld
*-------------------------------------- *--------------------------------------
.1 .DA LIB.LOAD .1 .DA LIB.LOAD
.DA LIB.UNLOAD .DA LIB.UNLOAD
.DA MD5PStrA .DA MD5
.DA MD5Init .DA MD5Init
.DA MD5Update .DA MD5Update
.DA MD5FinalizeA .DA MD5Finalize
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
LIB.LOAD LIB.LOAD
LIB.UNLOAD clc LIB.UNLOAD clc
rts rts
*-------------------------------------- */--------------------------------------
* MD5PStrA * # MD5
* in : * Return MD5 Hash for input String
* A = hMem To PSTR * ## In :
* out : * PUSHW = PTR to Src String
* A = hMem To MessageDigest * PUSHW = PTR to Dst MessageDigest Buffer
*-------------------------------------- * ## Out :
MD5PStrA >SYSCALL GetMemPtr.A * CC
>STYA ZPTmpPtr3 1 and 2 used by other MD5 functions *\--------------------------------------
ldy #0 MD5 >PULLW ZPHashPtr
lda (ZPTmpPtr3),y get PStr len >PULLYA
sta ZPTmpPtr4 ZPTmpPtr4 = str len >STYA ZPDataPtr
stz ZPTmpPtr4+1 0,PSTR len <= 255
inc ZPTmpPtr3 >SYSCALL StrLen.YA
bne .1 >STYA ZPDataLen
inc ZPTmpPtr3+1 Make DATA skip PSTR Len Byte
.1 jsr MD5Init .1 jsr MD5Init
bcs .9 bcs .9
pha save MD5 Context hMem pha save MD5 Context hMem
>PUSHW ZPTmpPtr4 Push LEN
>PUSHW ZPTmpPtr3 Push DATA jsr MD5Update.I
jsr MD5Finalize
pla pla
pha >SYSCALL FreeMem.A Free MD5 Context
>PUSHA Push MD5 Context
jsr MD5Update
pla get back MD5 Context
pha
jsr MD5FinalizeA
plx get back MD5 Context hMem
pha save MessageDigest hMem
txa
>SYSCALL FreeMem.A Free MD5 Context
pla get back MessageDigest hMem
clc clc
.9 rts .9 rts
*-------------------------------------- */--------------------------------------
* MD5Init * # MD5Init
* In : * ## In :
* Out : * ## Out :
* A = hMem To S.MD5 * A = hMem To S.MD5
*-------------------------------------- *\--------------------------------------
MD5Init >LDYAI S.MD5.SIZE MD5Init >LDYAI S.MD5.SIZE
>SYSCALL GetMem.YA >SYSCALL GetMem.YA
bcs .9 bcs .9
>STYA ZPTmpPtr1
>STYA ZPCtxPtr
ldy #0 ldy #0
.1 lda MD5.ABCDINIT,y .1 lda MD5.ABCDINIT,y
sta (ZPTmpPtr1),y sta (ZPCtxPtr),y
iny iny
cpy #16 cpy #16
bne .1 bne .1
lda #0 lda #0
.2 sta (ZPTmpPtr1),y
.2 sta (ZPCtxPtr),y
iny iny
cpy #S.MD5.SIZE Includes S.MD5.FINALIZED Flag cpy #S.MD5.SIZE Includes S.MD5.FINALIZED Flag
bne .2 bne .2
txa txa
clc clc
.9 rts .9 rts
*-------------------------------------- */--------------------------------------
* MD5Update (Append "$80" & Padding & original size) * # MD5Update (Append "$80" & Padding & original size)
* In: * ## In:
* PULLB MD5 Context hMem * PUSHW DATA LEN
* PULLW DATA PTR * PUSHW DATA PTR
* PULLW DATA LEN * PUSHB MD5 Context hMem
*-------------------------------------- * ## Out :
*\--------------------------------------
MD5Update >PULLA get MD5 Context MD5Update >PULLA get MD5 Context
>SYSCALL GetMemPtr.A >SYSCALL GetMemPtr.A
>STYA ZPTmpPtr1 get MD5 Context >STYA ZPCtxPtr get MD5 Context
>PULLW ZPDataPtr get DATA >PULLW ZPDataPtr get DATA
>PULLW ZPDataLen get LEN >PULLW ZPDataLen get LEN
ldy #S.MD5.FINALIZED
lda (ZPTmpPtr1),y MD5Update.I ldy #S.MD5.FINALIZED
lda (ZPCtxPtr),y
beq .1 beq .1
sec sec
rts rts
@ -218,7 +218,7 @@ MD5Update >PULLA get MD5 Context
bra .52 bra .52
.53 ldy #S.MD5.EXTRABIT Mark MD5 Context as Appended .53 ldy #S.MD5.EXTRABIT Mark MD5 Context as Appended
lda #$80 lda #$80
sta (ZPTmpPtr1),y sta (ZPCtxPtr),y
lda ZPChunkLen lda ZPChunkLen
cmp #56 Enough room for BITCOUNT ? cmp #56 Enough room for BITCOUNT ?
bcs .58 no bcs .58 no
@ -238,53 +238,58 @@ MD5Update >PULLA get MD5 Context
bcc .82 bcc .82
inc ZPDataPtr+1 inc ZPDataPtr+1
.82 bra .1 .82 bra .1
*-------------------------------------- */--------------------------------------
* MD5FinalizeA * # MD5Finalize
* In : * ## In :
* A = hMem To S.MD5 * PUSHW = MessageDigest (PSTR, 16 Bytes, 32 Chars) +Ending 0
* Out: * PUSHB = hMem To S.MD5
* A = MessageDigest (PSTR, 16 Bytes, 32 Chars) * ## Out:
*-------------------------------------- *\--------------------------------------
MD5FinalizeA >SYSCALL GetMemPtr.A MD5Finalize >PULLA
>STYA ZPTmpPtr1 get MD5 Context >SYSCALL GetMemPtr.A
ldy #S.MD5.FINALIZED >STYA ZPCtxPtr get MD5 Context
lda (ZPTmpPtr1),y
>PULLW ZPHashPtr
MD5Finalize.I ldy #S.MD5.FINALIZED
lda (ZPCtxPtr),y
bne .11 bne .11
jsr MD5ExtraChunk jsr MD5ExtraChunk
.11 >LDYAI 33 Len + 32 Digits
>SYSCALL GetMem.YA .11 ldy #S.MD5.ABCD0
bcs .9
>STYA ZPTmpPtr2 .1 lda (ZPCtxPtr),y
phx save hMem for return
lda #32
sta (ZPTmpPtr2)
inc ZPTmpPtr2
bne .10
inc ZPTmpPtr2+1
.10 ldy #S.MD5.ABCD0
.1 lda (ZPTmpPtr1),y
lsr lsr
lsr lsr
lsr lsr
lsr lsr
tax tax
lda MD5.DIGITS,x lda MD5.DIGITS,x
sta (ZPTmpPtr2) sta (ZPHashPtr)
inc ZPTmpPtr2 inc ZPHashPtr
bne .2 bne .2
inc ZPTmpPtr2+1
.2 lda (ZPTmpPtr1),y inc ZPHashPtr+1
.2 lda (ZPCtxPtr),y
and #$0F and #$0F
tax tax
lda MD5.DIGITS,x lda MD5.DIGITS,x
sta (ZPTmpPtr2) sta (ZPHashPtr)
inc ZPTmpPtr2 inc ZPHashPtr
bne .3 bne .3
inc ZPTmpPtr2+1
inc ZPHashPtr+1
.3 iny .3 iny
cpy #S.MD5.ABCD0+16 cpy #S.MD5.ABCD0+16
bne .1 bne .1
pla get back hMem
lda #0
sta (ZPHashPtr)
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
@ -292,12 +297,12 @@ MD5FinalizeA >SYSCALL GetMemPtr.A
*-------------------------------------- *--------------------------------------
* MD5AppendBitCount * MD5AppendBitCount
* In : * In :
* ZPTmpPtr1 = MD5 Context * ZPCtxPtr = MD5 Context
*-------------------------------------- *--------------------------------------
MD5AppendBitCount MD5AppendBitCount
ldx #56 ldx #56
ldy #S.MD5.BITCOUNT Append 8 Bytes of BITCOUNT ldy #S.MD5.BITCOUNT Append 8 Bytes of BITCOUNT
.1 lda (ZPTmpPtr1),y .1 lda (ZPCtxPtr),y
sta MD5.BUFFER64,x sta MD5.BUFFER64,x
inx inx
iny iny
@ -305,13 +310,13 @@ MD5AppendBitCount
bne .1 bne .1
ldy #S.MD5.FINALIZED Mark MD5 Context as Finalized ldy #S.MD5.FINALIZED Mark MD5 Context as Finalized
lda #$80 lda #$80
sta (ZPTmpPtr1),y sta (ZPCtxPtr),y
rts rts
*-------------------------------------- *--------------------------------------
* MD5UpdateBitCount * MD5UpdateBitCount
* In : * In :
* CL = Size (in bytes) to add to MD5 context * CL = Size (in bytes) to add to MD5 context
* ZPTmpPtr1 = MD5 Context * ZPCtxPtr = MD5 Context
*-------------------------------------- *--------------------------------------
MD5UpdateBitCount MD5UpdateBitCount
stz ZPChunkLen+1 stz ZPChunkLen+1
@ -324,17 +329,17 @@ MD5UpdateBitCount
rol ZPChunkLen+1 rol ZPChunkLen+1
clc clc
ldy #S.MD5.BITCOUNT ldy #S.MD5.BITCOUNT
adc (ZPTmpPtr1),y adc (ZPCtxPtr),y
sta (ZPTmpPtr1),y sta (ZPCtxPtr),y
iny iny
lda ZPChunkLen+1 lda ZPChunkLen+1
adc (ZPTmpPtr1),y adc (ZPCtxPtr),y
sta (ZPTmpPtr1),y sta (ZPCtxPtr),y
bcc .8 bcc .8
.1 iny .1 iny
lda (ZPTmpPtr1),y lda (ZPCtxPtr),y
inc inc
sta (ZPTmpPtr1),y sta (ZPCtxPtr),y
bne .8 bne .8
cpy #7 cpy #7
bne .1 bne .1
@ -342,18 +347,18 @@ MD5UpdateBitCount
*-------------------------------------- *--------------------------------------
* MD5ExtraChunk * MD5ExtraChunk
* In : * In :
* ZPTmpPtr1 = MD5 Context * ZPCtxPtr = MD5 Context
*-------------------------------------- *--------------------------------------
MD5ExtraChunk ldy #S.MD5.FINALIZED MD5ExtraChunk ldy #S.MD5.FINALIZED
lda #$80 lda #$80
sta (ZPTmpPtr1),y Mark MD5 Context as "finalized" sta (ZPCtxPtr),y Mark MD5 Context as "finalized"
ldx #0 ldx #0
ldy #S.MD5.EXTRABIT Extra Bit already appended ? ldy #S.MD5.EXTRABIT Extra Bit already appended ?
lda (ZPTmpPtr1),y lda (ZPCtxPtr),y
bne .1 bne .1
lda #$80 lda #$80
sta MD5.BUFFER64 Add extra bit to buffer sta MD5.BUFFER64 Add extra bit to buffer
sta (ZPTmpPtr1),y Mark Extrabit added sta (ZPCtxPtr),y Mark Extrabit added
inx inx
.1 stz MD5.BUFFER64,x pad with "0"... .1 stz MD5.BUFFER64,x pad with "0"...
inx inx
@ -364,13 +369,13 @@ MD5ExtraChunk ldy #S.MD5.FINALIZED
*-------------------------------------- *--------------------------------------
* MD5UpdateABCD0 * MD5UpdateABCD0
* In: * In:
* ZPTmpPtr1 = MD5 Context * ZPCtxPtr = MD5 Context
*-------------------------------------- *--------------------------------------
MD5UpdateABCD0 ldy #0 MD5UpdateABCD0 ldy #0
.1 clc ADC32 A+A0->A0, B, C, D.... .1 clc ADC32 A+A0->A0, B, C, D....
.2 lda MD5.ABCD,y .2 lda MD5.ABCD,y
adc (ZPTmpPtr1),y adc (ZPCtxPtr),y
sta (ZPTmpPtr1),y sta (ZPCtxPtr),y
iny iny
tya tya
and #3 and #3
@ -381,13 +386,13 @@ MD5UpdateABCD0 ldy #0
*-------------------------------------- *--------------------------------------
* MD5Transform * MD5Transform
* In: * In:
* ZPTmpPtr1 = MD5 Context * ZPCtxPtr = MD5 Context
* 512 Bits Padded chunk in MD5.BUFFER64 * 512 Bits Padded chunk in MD5.BUFFER64
* Out: * Out:
* Updated MD5.ABCD * Updated MD5.ABCD
*-------------------------------------- *--------------------------------------
MD5Transform ldy #15 init ABCD Chunk with Context ABCD0 MD5Transform ldy #15 init ABCD Chunk with Context ABCD0
.1 lda (ZPTmpPtr1),y .1 lda (ZPCtxPtr),y
sta MD5.ABCD,y sta MD5.ABCD,y
dey dey
bpl .1 bpl .1
@ -466,18 +471,6 @@ MD5.NEXTi >MOV32 MD5.D,MD5.DTemp
jmp MD5.0015 jmp MD5.0015
*-------------------------------------- *--------------------------------------
CS.END CS.END
MD5.ABCD
MD5.A .BS 4 Chunk Level,A,B,C,D
MD5.B .BS 4
MD5.C .BS 4
MD5.D .BS 4
MD5.DTemp .BS 4
MD5.F .BS 4
MD5.F1 .BS 4
MD5.F2 .BS 4
MD5.i .BS 1
MD5.BUFFER64 .BS 64
*--------------------------------------
MD5.ABCDINIT .HS 01234567.89ABCDEF.FEDCBA98.76543210 MD5.ABCDINIT .HS 01234567.89ABCDEF.FEDCBA98.76543210
*-------------------------------------- *--------------------------------------
MD5.s .DA #7,#12,#17,#22,#7,#12,#17,#22,#7,#12,#17,#22,#7,#12,#17,#22 MD5.s .DA #7,#12,#17,#22,#7,#12,#17,#22,#7,#12,#17,#22,#7,#12,#17,#22
@ -509,6 +502,18 @@ MD5.K .HS 78A46AD7.56B7C7E8.DB702024.EECEBDC1
*-------------------------------------- *--------------------------------------
MD5.DIGITS .AS "0123456789ABCDEF" MD5.DIGITS .AS "0123456789ABCDEF"
*-------------------------------------- *--------------------------------------
MD5.ABCD
MD5.A .BS 4 Chunk Level,A,B,C,D
MD5.B .BS 4
MD5.C .BS 4
MD5.D .BS 4
MD5.DTemp .BS 4
MD5.F .BS 4
MD5.F1 .BS 4
MD5.F2 .BS 4
MD5.i .BS 1
MD5.BUFFER64 .BS 64
*--------------------------------------
MAN MAN
SAVE /A2OSX.SRC/LIB/LIBCRYPT.S SAVE /A2OSX.SRC/LIB/LIBCRYPT.S
ASM ASM

View File

@ -9,13 +9,13 @@ AUTO 4,1
* X = hMem to Expanded String (C-String) * X = hMem to Expanded String (C-String)
* Y,A = PTR to Expanded String * Y,A = PTR to Expanded String
*\-------------------------------------- *\--------------------------------------
K.ExpandStr.YA stz ENV.hStr Reset Intermediate string... K.ExpandStr.YA stz ENV.hStr Reset Intermediate string...
.1 >STYA ZPPtr2 .1 >STYA ZPPtr2
stz ENV.BufLen init Expanded String len=0 stz ENV.BufLen init Expanded String len=0
stz ENV.bFound No var found yet stz ENV.bFound No var found yet
stz ENV.bNoExp Reset no expand flag stz ENV.bNoExp Reset no expand flag
ldy #0 ldy #0
@ -32,7 +32,7 @@ K.ExpandStr.YA stz ENV.hStr Reset Intermediate string...
lda ENV.bNoExp lda ENV.bNoExp
eor #$ff eor #$ff
sta ENV.bNoExp toggle flag sta ENV.bNoExp toggle flag
bra .11 bra .11
.21 bit ENV.bNoExp .21 bit ENV.bNoExp
@ -44,20 +44,20 @@ K.ExpandStr.YA stz ENV.hStr Reset Intermediate string...
stx ENV.BufLen stx ENV.BufLen
bra .11 bra .11
.23 ldx ENV.bInVar already in a var? .23 ldx ENV.bInVar already in a var?
bne .3 yes... bne .3 yes...
cmp #'$' no, found one ? cmp #'$' no, found one ?
bne .22 no, store... bne .22 no, store...
sta ENV.bFound Toggle flag sta ENV.bFound Toggle flag
sta ENV.bInVar sta ENV.bInVar
bra .11 skip this char bra .11 skip this char
.3 cmp #'{' we are in var, "{" after "$"? .3 cmp #'{' we are in var, "{" after "$"?
bne .31 bne .31
ldx ENV.VarLen No char in var yet ? ldx ENV.VarLen No char in var yet ?
beq .11 normal, "${" syntax is ok,skip beq .11 normal, "${" syntax is ok,skip
bne .5 not allowed char in varname, end of var bne .5 not allowed char in varname, end of var
@ -65,7 +65,7 @@ K.ExpandStr.YA stz ENV.hStr Reset Intermediate string...
.31 cmp #'}' end of var? .31 cmp #'}' end of var?
beq .50 beq .50
jsr ENV.IsVarChar jsr MEM.IsIDValid _,.,a-z,A-Z,0-9 ?
bcc .32 yes, add to varname bcc .32 yes, add to varname
ldx ENV.VarLen ldx ENV.VarLen
@ -95,13 +95,13 @@ K.ExpandStr.YA stz ENV.hStr Reset Intermediate string...
ply restore index in string... ply restore index in string...
.52 jmp .10 reset start flag and continue .52 jmp .10 reset start flag and continue
.8 ldx ENV.VarLen end of STR,are we in a var? .8 ldx ENV.VarLen end of STR,are we in a var?
beq .80 no...exit... beq .80 no...exit...
stz ENV.VarName,x stz ENV.VarName,x
jsr ENV.GetValue yes, expand and add to STR jsr ENV.GetValue yes, expand and add to STR
.80 lda ENV.hStr working from our temp string ? .80 lda ENV.hStr working from our temp string ?
beq .81 no... beq .81 no...
jsr K.FreeMem.A yes, discard.... jsr K.FreeMem.A yes, discard....
@ -122,27 +122,6 @@ K.ExpandStr.YA stz ENV.hStr Reset Intermediate string...
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
ENV.IsVarChar cmp #'_'
beq .8
cmp #'0'
bcc .9
cmp #'9'+1
bcc .8
cmp #'A'
bcc .9
cmp #'Z'+1
* bcc .8
rts
.8 clc
rts
.9 sec
rts
*--------------------------------------
ENV.GetValue jsr ENV.ExpandSysVar ENV.GetValue jsr ENV.ExpandSysVar
bcc .9 bcc .9
@ -327,11 +306,11 @@ K.GetEnv.YA >STYA ZPPtr1
*\-------------------------------------- *\--------------------------------------
K.UnsetEnv.YA >STYA ZPPtr1 Store VAR Name K.UnsetEnv.YA >STYA ZPPtr1 Store VAR Name
K.UnsetEnv.I jsr ENV.FindVarP1 K.UnsetEnv.I jsr ENV.FindVarP1
bcs .8 not found, quit bcs K.UnsetEnv.I.8 not found, quit
jsr ENV.DelVarP3 Ptr3 -> ENVNAME jsr ENV.DelVarP3 Ptr3 -> ENVNAME
.8 clc K.UnsetEnv.I.8 clc
rts rts
*-------------------------------------- *--------------------------------------
* PRIVATE * PRIVATE
@ -350,21 +329,17 @@ ENV.ExpandSysVar
bne .9 bne .9
lda ENV.VarName lda ENV.VarName
cmp #'0'-1 $0...$9 ?? jsr MEM.IsDigit $0...$9 ??
bcc .1
cmp #'9'+1
bcs .1 bcs .1
and #$0F and #$0F
jsr K.GetArg.A jsr K.GetArg.A
bcs .8 Arg# is undefined, do not append anything bcs K.UnsetEnv.I.8 Arg# is undefined, do not append anything
>STYA ZPPtr3 >STYA ZPPtr3
jmp ENV.AddP3ToBuf jmp ENV.AddP3ToBuf
.8 clc
rts
.1 ldx #ENV.SysVarsJmp-ENV.SysVars-1 .1 ldx #ENV.SysVarsJmp-ENV.SysVars-1
.2 cmp ENV.SysVars,x .2 cmp ENV.SysVars,x

View File

@ -561,34 +561,36 @@ K.SListFree.A
MEM.GetKeyCharY sta CLRREADAUX MEM.GetKeyCharY sta CLRREADAUX
lda (ZPSListKeyPtr),y lda (ZPSListKeyPtr),y
sta SETREADAUX sta SETREADAUX
beq .9 beq MEM.IsDigit.9
cmp #'.' MEM.IsIDValid cmp #'.'
beq .8 beq MEM.IsDigit.8
cmp #'_' cmp #'_'
beq .8 beq MEM.IsDigit.8
cmp #'0' MEM.IsDigitOrL cmp #'z'+1
bcc .9 bcs MEM.IsDigit.RTS
cmp #'9'+1
bcc .8
cmp #'A'
bcc .9
cmp #'Z'+1
bcc .8
cmp #'a' cmp #'a'
bcc .9 bcs MEM.IsDigit.8
cmp #'z'+1
bcs .9
.8 clc MEM.IsDigitOrUC cmp #'Z'+1
bcs MEM.IsDigit.RTS
cmp #'A'
bcs MEM.IsDigit.8
MEM.IsDigit cmp #'9'+1
bcs MEM.IsDigit.RTS
cmp #'0'
bcs MEM.IsDigit.8
MEM.IsDigit.9 sec
MEM.IsDigit.RTS rts
MEM.IsDigit.8 clc
rts rts
.9 sec
rts
*-------------------------------------- *--------------------------------------
MEM.SetKeyCharY sta CLRWRITEAUX MEM.SetKeyCharY sta CLRWRITEAUX
sta (ZPSListKeyPtr),y sta (ZPSListKeyPtr),y

View File

@ -666,7 +666,7 @@ K.SScanF jsr PullP1P2P3
* stz ASCBUF * stz ASCBUF
.20 lda (ZPPtr1) .20 lda (ZPPtr1)
jsr STDIO.IsDigit jsr MEM.IsDigit
bcs .21 bcs .21
phx phx
* inc ASCBUF * inc ASCBUF
@ -802,7 +802,7 @@ K.PrintF.YA >STYA ZPPtr1
sta PADCHAR no, this is the first 0, so make it PADCHAR sta PADCHAR no, this is the first 0, so make it PADCHAR
bra .2 bra .2
.4 jsr STDIO.IsDigit .4 jsr MEM.IsDigit
bcs .99 bcs .99
.5 and #$0F we have a digit .5 and #$0F we have a digit
@ -1090,15 +1090,6 @@ STDIO.IOERR lda #MLI.E.IO
sec sec
rts rts
*-------------------------------------- *--------------------------------------
STDIO.IsDigit cmp #'0'
bcc .1
cmp #'9'+1
rts
.1 sec
rts
*--------------------------------------
STDIO.AT10
*--------------------------------------
PADLEN .BS 1 PADLEN .BS 1
PADCHAR .BS 1 PADCHAR .BS 1
*-------------------------------------- *--------------------------------------

View File

@ -129,7 +129,7 @@ STDLIB.Dec2Hex jsr STDLIB.32.Clear
lda (ZPPtr2),y lda (ZPPtr2),y
beq .8 beq .8
jsr STDIO.IsDigit jsr MEM.IsDigit
bcs .8 bcs .8
phy Save Y, pointing to next char phy Save Y, pointing to next char