diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index 4a5818f7..f2f3e05a 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -82,10 +82,11 @@ X = DevID Create a hDEV ## C -`hDEV mkdev (S.FD * fd)` +`hDEV mkdev (S.FD * fd, const char *devname)` ## ASM -`>LDYA FD.DEV` +`>PUSHW devname` +`>LDYA fd` `>SYSCALL mkdev ## RETURN VALUE @@ -1122,22 +1123,6 @@ CC : success X = hMem of Full Path CS : A = Error Code -# StrMatch -Compare a String against pattern (e.g. '*test?.txt') - -## C -`int * strmatch ( char * s, const char * pattern );` - -## ASM -**In:** -`>PUSHWI pattern` -`>LDYAI s` -`>SYSCALL strmatch` - -## RETURN VALUE -CC : match -CS : no match - # StrLen Returns Length of C-String diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 2d38f3a2..7a8e0a85 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/BIN/CHTYP.S.txt b/BIN/CHTYP.S.txt index d6c7245b..3bbe8153 100644 --- a/BIN/CHTYP.S.txt +++ b/BIN/CHTYP.S.txt @@ -149,9 +149,7 @@ CS.RUN >SYSCALL GetChar .11 pla >SYSCALL GetMemPtr -.12 >PUSHYA - >LDYA ZPFileName - >SYSCALL StrMatch +.12 jsr StrMatch bcs .8 no match, skip.... .4 ldy #S.STAT.P.DRIVE diff --git a/BIN/LS.S.txt b/BIN/LS.S.txt index cb0294a6..5ccd2a43 100644 --- a/BIN/LS.S.txt +++ b/BIN/LS.S.txt @@ -131,9 +131,7 @@ CS.RUN >SYSCALL GetChar .11 pla >SYSCALL GetMemPtr -.12 >PUSHYA - >LDYA ZPFileName - >SYSCALL StrMatch +.12 jsr StrMatch bcs .8 no match, skip.... .4 ldy #S.STAT.P.DRIVE diff --git a/BIN/X.CPMVRM.S.txt b/BIN/X.CPMVRM.S.txt index 4a18e934..a8b3ddc9 100644 --- a/BIN/X.CPMVRM.S.txt +++ b/BIN/X.CPMVRM.S.txt @@ -232,9 +232,7 @@ CS.RUN >SYSCALL GetChar .11 pla >SYSCALL GetMemPtr -.12 >PUSHYA - >LDYA ZPFileName - >SYSCALL StrMatch +.12 jsr StrMatch bcs CS.RUN.NEXT no match, skip.... .4 ldy #S.STAT.P.DRIVE @@ -431,7 +429,7 @@ CS.RUN.FILE jsr CS.RUN.FILE.MSG ldy #hDstBasePath jsr CS.RUN.GetPathY - >SYSCALL StrMatch + >SYSCALL StrCaseCmp bcs .3 not same dir, go copy/delete jsr CS.RUN.Rename diff --git a/BIN/X.FILEENUM.S.txt b/BIN/X.FILEENUM.S.txt index 5a1410f2..939d98c6 100644 --- a/BIN/X.FILEENUM.S.txt +++ b/BIN/X.FILEENUM.S.txt @@ -13,6 +13,75 @@ X.MAX.RECURSE .EQ 8 * hDstBasePath .BS 1 (optional) * STAT .BS S.STAT *-------------------------------------- +* Compare a ZPFileName against pattern in Y,A (e.g. '*test?.txt') +* CC : match +* CS : no match +*-------------------------------------- +StrMatch >STYA ZPPtr2 + + lda (ZPPtr2) Get pattern 1st byte + beq .8 Match always if empty + + ldy #0 + + bra .21 + +.1 inc ZPPtr2 Make PTR2 (pattern) advance to next char + bne .2 + inc ZPPtr2+1 + +.2 lda (ZPPtr2) get pattern char + beq .41 end of pattern... + +.21 cmp #'*' + beq .5 + +.3 lda (ZPFileName) we must match ? or regular char, check if at end of string + beq .9 no char left, exit with error + + lda (ZPPtr2) get back pattern char + cmp #'?' + beq .4 no need to compare, any char will match + cmp (ZPFileName),y Regular Char, compare with string at Y + bne .9 no match, exit + +.4 iny advance to next char to compare + bra .1 continue if remaining char in pattern + +.41 lda (ZPFileName),y end of pattern, but end of string ? + + beq .8 yes, string matched entirely +* no, remaining char in string, no match +.9 sec + rts + +.5 inc ZPPtr2 Make PTR2 advance to next char + bne .6 + inc ZPPtr2+1 + +.6 lda (ZPPtr2) we have '*', last char of pattern ? + beq .8 yes, match everything, including empty string + + lda (ZPPtr2) get next char of pattern + cmp #'*' another '*' ? + beq .5 yes, '**' = '*', go next char + cmp #'?' '*?' ? we must match a least one char + beq .3 + +.7 lda (ZPFileName),y we need at least one remaining char in string, check if at end of string + beq .9 no chance to match ? or regular char + + iny + lda (ZPPtr2) get again char in pattern + cmp (ZPFileName),y compare with char in string + bne .7 not equal to next non wildcard in pattern + + iny + bra .1 go check remaining char in pattern... + +.8 clc + rts +*-------------------------------------- InitSrcDirYA >SYSCALL RealPath bcc .10 rts diff --git a/DRV/CONSOLE.DRV.S.txt b/DRV/CONSOLE.DRV.S.txt deleted file mode 100644 index 3d8a7c5a..00000000 --- a/DRV/CONSOLE.DRV.S.txt +++ /dev/null @@ -1,1165 +0,0 @@ -NEW -PREFIX -AUTO 4,1 - .LIST OFF - .OP 65C02 - .OR $2000 - .TF DRV/CONSOLE.DRV -*-------------------------------------- - .INB INC/MACROS.I - .INB INC/A2OSX.I - .INB INC/MLI.E.I - .INB INC/IO.I - .INB INC/NET.TELNET.I -*-------------------------------------- -* File Header (16 Bytes) -*-------------------------------------- -CS.START cld - jmp Dev.Detect cld,jmp abs=DRV - .DA #$61 6502,Level 1 (65c02) - .DA #1 DRV Layout Version 1 - .DA 0 - .DA CS.END-CS.START Code Length To Relocate - .DA 0 - .DA 0 - .DA 0 -*-------------------------------------- -* Relocation Table -*-------------------------------------- -L.MSG.DETECT .DA MSG.DETECT -L.DRV.CS.START .DA DRV.CS.START -L.FD.DEV .DA FD.DEV -L.FD.DEV.NAME .DA FD.DEV.NAME - .DA 0 End Of Reloc Table -*-------------------------------------- -Dev.Detect >LDYA L.MSG.DETECT - >SYSCALL puts - - >PUSHWI DRV.END - >PUSHWI DRV.CS.END - >PUSHWI DRV.CS.START - >LDYA L.DRV.CS.START - >SYSCALL InsDrv - bcs .9 - >STYA FD.DEV+S.FD.DEV.DRVPTR - - >PUSHW L.FD.DEV.NAME - >LDYA L.FD.DEV - >SYSCALL MKDEV - -.9 rts -*-------------------------------------- -CS.END -MSG.DETECT .AZ "Apple IIe/IIc 80 Col Driver." -FD.DEV .DA #S.FD.T.CDEV - .DA #0 HANDLER - .DA #0 BUSID - .DA #0 DEVID - .DA 0 BUSPTR - .BS 2 DRVPTR - .DA 0 BUFPTR -FD.DEV.NAME .AZ "CON" NAME -*-------------------------------------- -* Driver Code -*-------------------------------------- -CURSOR.BLINK.SPEED .EQ 2 -ESCSEQ.MAXLEN .EQ 16 -OUTBUF.MAXLEN .EQ 32 -IACBUF.MAXLEN .EQ 32 -*-------------------------------------- -ZPBaseL1 .EQ ZPDRV -ZPBaseL2 .EQ ZPDRV+2 -ZPTmpWord .EQ ZPDRV+4 -ZPTmpBool .EQ ZPDRV+6 -ZPIOCTL .EQ ZPDRV+8 -ZPBufPtr .EQ ZPDRV+10 -ZPCount .EQ ZPDRV+12 -*-------------------------------------- -DRV.CS.START cld - jmp (.1,x) -.1 .DA STATUS - .DA A2osX.BADCALL - .DA A2osX.BADCALL - .DA A2osX.BADCALL - .DA CONTROL - .DA A2osX.BADCALL - .DA OPEN - .DA CLOSE - .DA READ - .DA WRITE - .DA A2osX.BADCALL IRQ -*-------------------------------------- -J.CtrlChars .DA ENQ 5 - .DA BS 8 - .DA LF 10 - .DA CLRSCR 12 - .DA CROUT 13 - .DA FS 21 - .DA ESC 27 -*-------------------------------------- -J.EscCodes .DA Scroll.Dn M - .DA Scroll.Up D - .DA RESET c -*-------------------------------------- -J.EscSequences .DA Esc.LWEnable h - .DA Esc.LWDisable l - .DA Esc.DispAttr m - .DA Esc.Query n - .DA Esc.Scroll r - .DA Esc.Erase K - .DA Esc.Home H -*-------------------------------------- -J.COUT.IAC.CMDS .DA COUT.IAC.SB - .DA COUT.IAC.WILL - .DA COUT.IAC.WONT - .DA COUT.IAC.DO - .DA COUT.IAC.DONT - .DA 0 end of relocation -*-------------------------------------- -STATUS >STYA ZPIOCTL - - ldy #S.IOCTL.STATCODE - lda (ZPIOCTL),y - beq .1 - - cmp #S.IOCTL.STATCODE.GETDIB - bne .9 - - ldx #S.DIB-1 - .HS 2C bit abs -.1 ldx #3 - - ldy #S.IOCTL.BUFPTR - lda (ZPIOCTL),y - sta .3+1 - iny - lda (ZPIOCTL),y - sta .3+2 - -.2 lda DIB,x -.3 sta $ffff,x SELF MODIFIED - dex - bpl .2 - - clc - rts - -.9 lda #MLI.E.BADCTL - sec - rts -*-------------------------------------- -OPEN ldx #0 - -.1 ldy A2osX.SCRNDEVS,x - beq .2 - - inx - cpx #K.SCR.MAX - bne .1 - - lda #E.OOH - sec - rts - -.2 sta A2osX.SCRNDEVS,x DEV.ID in A - sta DEVID - lda #S.DIB.S.OPENED - tsb DIB+S.DIB.S - - stz OutPtr - stz OutCnt - - jsr RESET -*-------------------------------------- -CONTROL sta SETTEXT - sta SETALTCHAR - sta SET80DISP - sta CLR80STORE - sta CLRPAGE2 - lda DEVID - sta A2osX.ASCREEN - - clc - rts -*-------------------------------------- -CLOSE lda #S.DIB.S.OPENED - trb DIB+S.DIB.S - - stz A2osX.SCRNDEVS - clc - rts -*-------------------------------------- -READ >STYA ZPIOCTL - - lda A2osX.ASCREEN - cmp DEVID is screen active? - bne .6 no....go check flush... - - lda A2osX.TIMER16 - and #CURSOR.BLINK.SPEED - eor CURON - beq .1 - jsr CURBLNK - -.1 lda OPENAPPLE - bmi .6 Open apple key, not for us... - - lda KBD - bpl .6 - sta KBDSTROBE - - and #$7F - - ldx KeyRemapped -.2 cmp KeyRemapped,x - beq .3 - dex - bne .2 - jsr Char.Out.Put no remap....send char.... - bra .7 and flush - -.3 lda KeyRemappedIdx,x - tay - -.4 lda KeyRemappedTbl,y - beq .7 end of remap....flush - jsr Char.Out.Put - iny - bra .4 - -.6 lda OutCnt - beq .9 no char in output buffer... - -.7 stz .8+1 - jsr GetPtrsAndCnt - -.70 inc ZPCount - bne .71 - inc ZPCount+1 - beq .8 - -.71 jsr Char.Out.Get - bcs .8 - - ldy .8+1 - sta (ZPBufPtr),y - iny - sty .8+1 - bra .70 - -.8 lda #$ff SELF MODIFIED - ldy #S.IOCTL.BYTECNT - sta (ZPIOCTL),y - iny - lda #0 - sta (ZPIOCTL),y - - clc - rts - -.9 lda #0 Error = char - sec - rts -*-------------------------------------- -WRITE >STYA ZPIOCTL - - jsr GetPtrsAndCnt - -.2 inc ZPCount - bne .3 - inc ZPCount+1 - beq .8 - -.3 lda (ZPBufPtr) - inc ZPBufPtr - bne .4 - inc ZPBufPtr+1 - -.4 jsr WRITE.COUT - - bra .2 - -.8 clc - rts -*-------------------------------------- -WRITE.COUT bit bEscMode - bmi COUT.EscMode - bit bIACMode - bpl .10 - - jmp COUT.IAC - -.10 cmp #IAC - bne .1 - sta bIACMode - stz IACBuf - clc - rts - -.1 pha - jsr CUROFF - pla - cmp #C.DEL - beq DEL - cmp #C.SPACE - bcc COUT.Ctrl - - ora INVFLG - jsr SetCharAtCurPos -*-------------------------------------- -FS ldx CH - cpx #79 - bne .1 - - bit LWFLG - bpl FS.8 - - stz CH - jmp LF - -.1 inc CH - -FS.8 clc - rts -*-------------------------------------- -DEL ldx CH - beq .1 - dec CH - bra .3 - -.1 ldy CV - beq FS.8 - - lda #79 - sta CH - dec CV - -.3 lda #$20 - ora INVFLG - jmp SetCharAtCurPos -*-------------------------------------- -COUT.Ctrl ldx #CtrlChars.Cnt-1 - -.1 cmp CtrlChars,x - beq .2 - dex - bpl .1 - clc - rts - -.2 txa - asl - tax - jmp (J.CtrlChars,x) -*-------------------------------------- -COUT.EscMode bit bEscModeCSI - bmi COUT.EscModeCSI - cmp #'[' - bne .1 - - dec bEscModeCSI - stz EscSeq - clc - rts - -.1 stz bEscMode - - ldx #EscCodes.Cnt-1 - -.2 cmp EscCodes,x - beq .3 - dex - bpl .2 - - clc - rts - -.3 txa - asl - tax - jmp (J.EscCodes,x) -*-------------------------------------- -COUT.EscModeCSI inc EscSeq - ldx EscSeq - sta EscSeq,x - cmp #64 End of Seq ? - bcs COUT.ExecEscSeq - cpx #ESCSEQ.MAXLEN too long? - bne .1 - stz bEscModeCSI - stz bEscMode -.1 clc - rts - -COUT.ExecEscSeq stz EscSeqParamCnt - stz bEscSeqInNum - - ldx #0 EscSeq Ptr - -.10 stz ZPTmpWord - stz ZPTmpWord+1 - -.1 inx - lda EscSeq,x - - cmp #'0' - bcc .2 - cmp #'9'+1 - bcs .2 - - dec bEscSeqInNum - and #$0F - pha - lda ZPTmpWord - ldy ZPTmpWord+1 - asl ZPTmpWord param=param*10 - rol ZPTmpWord+1 - asl ZPTmpWord - rol ZPTmpWord+1 - clc - adc ZPTmpWord - sta ZPTmpWord - tya - adc ZPTmpWord+1 - sta ZPTmpWord+1 - asl ZPTmpWord - rol ZPTmpWord+1 - - pla - clc - adc ZPTmpWord - sta ZPTmpWord - bcc .1 - inc ZPTmpWord+1 - bra .1 - -.2 bit bEscSeqInNum - bpl .3 - - stz bEscSeqInNum - lda #255 - ldy ZPTmpWord+1 - bne .21 - - lda ZPTmpWord -.21 ldy EscSeqParamCnt - sta EscSeqParam,y - inc EscSeqParamCnt - -.3 lda EscSeq,x - cmp #';' - beq .10 - - stz bEscModeCSI - stz bEscMode - - ldx #EscSeqCmds.Cnt-1 - -.4 cmp EscSeqCmds,x - beq .5 - dex - bne .4 - - clc - rts - -.5 txa - asl - tax - jmp (J.EscSequences,x) -*-------------------------------------- -COUT.IAC inc IACBuf - ldx IACBuf - cpx #IACBUF.MAXLEN - beq * - sta IACBuf,x - - cpx #1 CMD ? - beq .8 yes, wait for additional bytes - - ldy IACBuf+1 get back CMD - cpy #SB - bne .1 not a SB/SE....stop with CMD/SUBCMD - - cmp #SE - bne .8 wait for ending SE....keep bIACMode - -.1 cpy #IAC - beq .9 - - tya - sec - sbc #SB - bcc .9 - asl - tax - lda IACBuf+2 Get SUBCMD in A - - cpx #10 - bcs * - jmp (J.COUT.IAC.CMDS,x) - -.9 stz bIACMode - -.8 clc - rts -*-------------------------------------- -COUT.IAC.SB cmp #TELOPT.TTYPE - bne .9 - - lda IACBuf+3 - cmp #SB.SEND - bne .9 - - ldy #0 - -.1 lda SB.IS.TTYPE,y - jsr Char.Out.Put - iny - cpy #SB.IS.TTYPE.LEN - bne .1 - -.9 stz bIACMode - - clc - rts -*-------------------------------------- -COUT.IAC.WILL ldx #WILLDO.CNT-1 - -.1 cmp WILLDO,x - beq .7 - dex - bpl .1 - - ldx #WILLDONT.CNT-1 - -.2 cmp WILLDONT,x - beq .8 - dex - bpl .2 - - bra .9 - -.7 ldx #DO - .HS 2C BIT ABS - -.8 ldx #DONT - - bra COUT.IAC.SendAX - -.9 stz bIACMode - - clc - rts -*-------------------------------------- -COUT.IAC.WONT -.9 stz bIACMode - - clc - rts -*-------------------------------------- -COUT.IAC.DO ldx #DOWILL.CNT-1 - -.1 cmp DOWILL,x - beq .7 - dex - bpl .1 - - ldx #DOWONT.CNT-1 - -.2 cmp DOWONT,x - beq .8 - dex - bpl .2 - - bra COUT.IAC.SendAX.9 - -.7 ldx #WILL - .HS 2C BIT ABS - -.8 ldx #WONT -*-------------------------------------- -COUT.IAC.SendAX - pha push CMD - phx - lda #IAC - jsr Char.Out.Put - pla - jsr Char.Out.Put - pla - jsr Char.Out.Put - -COUT.IAC.SendAX.9 - stz bIACMode - - clc - rts -*-------------------------------------- -COUT.IAC.DONT -.9 stz bIACMode - - clc - rts -*-------------------------------------- -RESET stz CURON - - stz bEscMode - stz bEscModeCSI - - jsr CLRSCR - - lda #23 - sta SCROLLBOT - lda #0 - sta SCROLLTOP - dec - sta LWFLG -*-------------------------------------- -RESETATTR lda #$80 - sta INVFLG - clc - rts -*-------------------------------------- -ESC lda #$80 - sta bEscMode - clc - rts -*-------------------------------------- -ENQ ldy #0 - -.1 lda ENQ.String,y - beq .8 - jsr Char.Out.Put - iny - bne .1 - -.8 clc - rts -*-------------------------------------- -BS ldx CH - beq .1 - dec CH - bra .3 - -.1 ldy CV - bne .2 - clc - rts - -.2 lda #79 - sta CH - dec CV - -.3 clc - rts -*-------------------------------------- -ClrScr ldx #23 - -.1 jsr SETUP.L1X - - lda #" " - - sta SETWRITEAUX - - ldy #39 - -.2 sta (ZPBaseL1),y - dey - bpl .2 - - sta CLRWRITEAUX - - ldy #39 - -.3 sta (ZPBaseL1),y - dey - bpl .3 - - dex - bpl .1 - - stz CV -*-------------------------------------- -CROUT stz CH - clc - rts -*-------------------------------------- -LF ldy CV - cpy SCROLLBOT - beq SCROLL.UP - inc CV - clc - rts -*-------------------------------------- -SCROLL.UP ldx SCROLLTOP - -.1 jsr SETUP.L1X - - inx - - jsr COPY.XtoL1 - - cpx SCROLLBOT - bne .1 -*-------------------------------------- -CLREOL ldy CH Start - ldx #80 End - bra CLR - -CLRLINE ldy #0 Start - ldx #80 End - bra CLR - -CLRSOL ldy #0 Start - ldx CH End - -CLR stx .2+1 - - ldx CV - -.1 lda #" " - - phy - jsr SetCharAtYX X unmodified - ply - iny -.2 cpy #$ff Self Modified - bne .1 - - clc - rts -*-------------------------------------- -SCROLL.DN ldx SCROLLBOT - -.1 jsr SETUP.L1X - - dex - - jsr COPY.XtoL1 - - cpx SCROLLTOP - bne .1 - - clc - rts -*-------------------------------------- -Esc.LWEnable sec - .HS 90 BCC -*-------------------------------------- -Esc.LWDisable clc - ldx EscSeqParamCnt - beq .8 - dex - bne .8 - - lda EscSeqParam - eor #7 - bne .8 - - ror LWFLG - -.8 clc - rts -*-------------------------------------- -Esc.DispAttr ldx EscSeqParamCnt - beq .8 - -.1 lda EscSeqParam-1,x - bne .2 - jsr RESETATTR - bra .7 - -.2 cmp #7 - bne .8 - stz INVFLG - -.7 dex - bne .1 - -.8 clc - rts -*-------------------------------------- -Esc.Query ldx EscSeqParamCnt - beq .8 - dex - bne .8 - - lda EscSeqParam - cmp #6 - bne .8 - - lda #C.ESC - jsr Char.Out.Put - lda #'[' - jsr Char.Out.Put - lda CV - inc - jsr Decimal.Out - lda #';' - jsr Char.Out.Put - lda CH - inc - jsr Decimal.Out - lda #'R' - jsr Char.Out.Put - -.8 clc - rts -*-------------------------------------- -Esc.Scroll ldx EscSeqParamCnt - bne .1 - - lda #0 - ldy #23 - bra .8 - -.1 cpx #2 - bne .9 - - lda EscSeqParam - dec - ldy EscSeqParam+1 - dey - -.8 sta SCROLLTOP - sty SCROLLBOT -.9 clc - rts -*-------------------------------------- -Esc.Erase ldx EscSeqParamCnt - - bne .1 - jmp CLREOL - -.1 lda EscSeqParam - cmp #1 - bne .2 - jmp CLRSOL - -.2 cmp #2 - bne .9 - jmp CLRLINE - -.9 clc - rts -*-------------------------------------- -Esc.Home ldx EscSeqParamCnt - bne .1 - stz CH - stz CV - clc - rts - -.1 ldx #1 - lda EscSeqParam - beq .2 - - ldx #24 - cmp #24 - bcs .2 - - tax - -.2 dex - stx CV - - dec EscSeqParamCnt - beq .8 - - ldx #1 - lda EscSeqParam+1 - beq .3 - - ldx #80 - cmp #80 - - bcs .3 - - tax - -.3 dex - stx CH - -.8 clc - rts -*-------------------------------------- -CUROFF lda CURON - beq CUREXIT.RTS - -CURBLNK lda A2osX.ASCREEN - cmp DEVID - beq CURBLNK1 - - lda CURON - bne CURBLNK.OFF - rts do not Light if screen is not active - -CURBLNK1 lda CURON - bne CURBLNK.OFF - - jsr GetCharAtCurPos - sta CURCHAR - and #$80 - eor #" " - bra CUREXIT - -CURBLNK.OFF lda CURCHAR - -CUREXIT jsr SetCharAtCurPos - - lda CURON - eor #CURSOR.BLINK.SPEED - sta CURON -CUREXIT.RTS rts -*-------------------------------------- -SetCharAtCurPos ldy CH - ldx CV -*-------------------------------------- -SetCharAtYX cmp #$40 - bcc .10 - cmp #$5F - bcs .10 - and #$3F - -.10 pha - - jsr SETUP.L1X - - tya - lsr - tay - - pla - bcs .1 - -* php -* sei - sta SETWRITEAUX -.1 sta (ZPBaseL1),y - sta CLRWRITEAUX -* plp - rts - -*.1 sta (ZPBaseL1),y -* rts -*-------------------------------------- -GetCharAtCurPos ldy CH - ldx CV -*-------------------------------------- -GetCharAtYX jsr SETUP.L1X - - tya - lsr - tay - - bcs .1 - -* php -* sei - sta SETREADAUX -.1 lda (ZPBaseL1),y - sta CLRREADAUX -* plp - rts - -*.1 lda (ZPBaseL1),y -* rts -*-------------------------------------- -SETUP.L1X lda BASEL,x - sta ZPBaseL1 - lda BASEH,x - sta ZPBaseL1+1 - rts -*-------------------------------------- -COPY.XtoL1 lda BASEL,x - sta ZPBaseL2 - lda BASEH,x - sta ZPBaseL2+1 - -* php -* sei - sta SETWRITEAUX - sta SETREADAUX - - jsr .1 - - sta CLRWRITEAUX - sta CLRREADAUX -* plp - -.1 ldy #39 - -.2 lda (ZPBaseL2),y - sta (ZPBaseL1),y - dey - bpl .2 - rts -*-------------------------------------- -Decimal.Out stz ZPTmpWord - stz ZPTmpWord+1 - - ldx #8 - sed - - tay - -.1 tya - asl - tay - lda ZPTmpWord - adc ZPTmpWord - sta ZPTmpWord - lda ZPTmpWord+1 - adc ZPTmpWord+1 - sta ZPTmpWord+1 - dex - bne .1 - - cld - - stz ZPTmpBool No leading 0 - - lda ZPTmpWord+1 - and #$0f - beq .2 - - dec ZPTmpBool non zero, print everything - - jsr Char.Out.Put30 - -.2 lda ZPTmpWord - lsr - lsr - lsr - lsr - bne .3 - - bit ZPTmpBool Print this digit ? - bpl .4 - -.3 jsr Char.Out.Put30 - -.4 lda ZPTmpWord - and #$0f -*-------------------------------------- -Char.Out.Put30 ora #$30 -Char.Out.Put pha - lda OutPtr - clc - adc OutCnt - and #OUTBUF.MAXLEN-1 - tax - pla - sta OutBuffer,x - inc OutCnt - rts -*-------------------------------------- -Char.Out.Get sec - lda OutCnt - beq .9 - dec OutCnt - ldx OutPtr - lda OutBuffer,x - pha - txa - inc - and #OUTBUF.MAXLEN-1 - sta OutPtr - pla - clc -.9 rts -*-------------------------------------- -GetPtrsAndCnt ldy #S.IOCTL.BUFPTR - lda (ZPIOCTL),y - sta ZPBufPtr - iny - lda (ZPIOCTL),y - sta ZPBufPtr+1 - -* ldy #S.IOCTL.BYTECNT - iny - - lda (ZPIOCTL),y - eor #$ff - sta ZPCount - iny - lda (ZPIOCTL),y - eor #$ff - sta ZPCount+1 - rts -*-------------------------------------- -DRV.CS.END -*-------------------------------------- -BASEL .HS 00.80.00.80.00.80.00.80.28.A8.28.A8.28.A8.28.A8.50.D0.50.D0.50.D0.50.D0 -BASEH .HS 04.04.05.05.06.06.07.07.04.04.05.05.06.06.07.07.04.04.05.05.06.06.07.07 -*-------------------------------------- -CtrlChars .HS 05080A0C0D151B -CtrlChars.Cnt .EQ *-CtrlChars -*-------------------------------------- -EscCodes .AZ "MDc" -EscCodes.Cnt .EQ *-EscCodes -EscSeqCmds .AS "hlmnrKH" -EscSeqCmds.Cnt .EQ *-EscSeqCmds -ENQ.String .AZ "XTERM" -*-------------------------------------- -KeyRemapped .HS 05080A0B0D15 L,D,U,CR,R -KeyRemappedIdx .HS 050004080C0F -KeyRemappedTbl .EQ * -KeyRemappedLEFT .HS 1B5B4400 esc[D -KeyRemappedDOWN .HS 1B5B4200 esc[B -KeyRemappedUP .HS 1B5B4100 esc[A -KeyRemappedCR .HS 0D0A00 crlf -KeyRemappedRGHT .HS 1B5B4300 esc[C -*-------------------------------------- -TELOPS.STATUS -*-------------------------------------- -WILLDO .DA #TELOPT.BINARY,#TELOPT.SGA -WILLDO.CNT .EQ *-WILLDO -WILLDONT .DA #TELOPT.TSPEED,#TELOPT.LINEMODE,#TELOPT.STATUS -WILLDONT.CNT .EQ *-WILLDONT -DOWILL .DA #TELOPT.BINARY,#TELOPT.SGA,#TELOPT.TTYPE,#TELOPT.NAWS -DOWILL.CNT .EQ *-DOWILL -DOWONT .DA #TELOPT.ECHO,#TELOPT.NEWENVIRON,#TELOPT.XDISPLOC,#TELOPT.TSPEED,#TELOPT.LFLOW -DOWONT.CNT .EQ *-DOWONT -SB.IS.TTYPE .DA #IAC,#SB,#TELOPT.TTYPE,#SB.IS - .AS 'XTERM' - .DA #IAC,#SE -SB.IS.TTYPE.LEN .EQ *-SB.IS.TTYPE -SB.IS.NAWS .DA #IAC,#SB,#TELOPT.NAWS,#SB.IS - .DA 80 - .DA 24 - .DA #IAC,#SE -SB.IS.NAWS.LEN .EQ *-SB.IS.NAWS -*-------------------------------------- -DEVID .BS 1 -CH .BS 1 -CV .BS 1 -LWFLG .BS 1 -INVFLG .BS 1 -SCROLLTOP .BS 1 -SCROLLBOT .BS 1 -CURON .BS 1 -CURCHAR .BS 1 -OutBuffer .BS OUTBUF.MAXLEN -OutPtr .BS 1 -OutCnt .BS 1 -bIACMode .BS 1 -IACBuf .BS OUTBUF.MAXLEN+1 -bEscMode .BS 1 -bEscModeCSI .BS 1 -bEscSeqInNum .BS 1 -EscSeq .BS ESCSEQ.MAXLEN+1 -EscSeqParamCnt .BS 1 -EscSeqParam .BS 4 -*-------------------------------------- -DIB .DA #S.DIB.S.WRITE+S.DIB.S.READ - .DA #0,#0,#0 - >PSTR "ANSI 80c Console" - .DA #S.DIB.T.CHAR - .DA #0 - .DA K.VER -*-------------------------------------- -DRV.END -MAN -SAVE USR/SRC/DRV/CONSOLE.DRV.S -ASM diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 8b1c3dc6..e4b495a0 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -201,7 +201,7 @@ SYS.StrToF .EQ $76 SYS.StrToL .EQ $78 * .EQ $7A SYS.RealPath .EQ $7C -SYS.StrMatch .EQ $7E +* .EQ $7E *-------------------------------------- SYS.StrLen .EQ $80 SYS.StrCpy .EQ $82 diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index 57e0bb9e..d257dacd 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -76,7 +76,7 @@ K.SYSCALL.JMP .DA 0 $00 .DA K.StrToL .DA 0 .DA K.RealPath - .DA K.StrMatch + .DA 0 *-------------------------------------- * Bank 2 *-------------------------------------- diff --git a/SYS/KERNEL.S.STDLIB.txt b/SYS/KERNEL.S.STDLIB.txt index dc7ea8d8..28601b20 100644 --- a/SYS/KERNEL.S.STDLIB.txt +++ b/SYS/KERNEL.S.STDLIB.txt @@ -448,84 +448,6 @@ K.RealPath.RemoveAtX .8 plx rts -*/-------------------------------------- -* # StrMatch -* Compare a String against pattern (e.g. '*test?.txt') -* ## C -* `int * strmatch ( char * s, const char * pattern );` -* ## ASM -* **In:** -* `>PUSHWI pattern` -* `>LDYAI s` -* `>SYSCALL strmatch` -* ## RETURN VALUE -* CC : match -* CS : no match -*\-------------------------------------- -K.StrMatch jsr MEM.SPtr1PPtr2 - - lda (ZPPtr2) Get pattern 1st byte - beq .8 Match always if empty - - ldy #0 - - bra .21 - -.1 inc ZPPtr2 Make PTR2 (pattern) advance to next char - bne .2 - inc ZPPtr2+1 - -.2 lda (ZPPtr2) get pattern char - beq .41 end of pattern... - -.21 cmp #'*' - beq .5 - -.3 lda (ZPPtr1) we must match ? or regular char, check if at end of string - beq .9 no char left, exit with error - - lda (ZPPtr2) get back pattern char - cmp #'?' - beq .4 no need to compare, any char will match - cmp (ZPPtr1),y Regular Char, compare with string at Y - bne .9 no match, exit - -.4 iny advance to next char to compare - bra .1 continue if remaining char in pattern - -.41 lda (ZPPtr1),y end of pattern, but end of string ? - - beq .8 yes, string matched entirely -* no, remaining char in string, no match -.9 sec - rts - -.5 inc ZPPtr2 Make PTR2 advance to next char - bne .6 - inc ZPPtr2+1 - -.6 lda (ZPPtr2) we have '*', last char of pattern ? - beq .8 yes, match everything, including empty string - - lda (ZPPtr2) get next char of pattern - cmp #'*' another '*' ? - beq .5 yes, '**' = '*', go next char - cmp #'?' '*?' ? we must match a least one char - beq .3 - -.7 lda (ZPPtr1),y we need at least one remaining char in string, check if at end of string - beq .9 no chance to match ? or regular char - - iny - lda (ZPPtr2) get again char in pattern - cmp (ZPPtr1),y compare with char in string - bne .7 not equal to next non wildcard in pattern - - iny - bra .1 go check remaining char in pattern... - -.8 clc - rts *-------------------------------------- MAN SAVE USR/SRC/SYS/KERNEL.S.STDLIB diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index 0536771a..cb92de5a 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -25,12 +25,16 @@ A2osX.MAIN .PH $1480 .INB USR/SRC/SYS/KERNEL.S.CORE .INB USR/SRC/SYS/KERNEL.S.DRV .INB USR/SRC/SYS/KERNEL.S.TERM + .LIST ON Mem.MLoMem .EQ * + .LIST OFF .EP A2osX.AUX .PH $1000 .INB USR/SRC/SYS/KERNEL.S.OSD .INB USR/SRC/SYS/KERNEL.S.SLIST + .LIST ON Mem.XLoMem .EQ * + .LIST OFF .EP A2osX.GP .PH $BD00 .INB USR/SRC/SYS/KERNEL.S.GP @@ -42,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 @@ -59,7 +64,6 @@ A2osX.E0 .PH $E000 .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.FIO .INB USR/SRC/SYS/KERNEL.S.IO ********* TMP ***** go to A2osX.D2 .INB USR/SRC/SYS/KERNEL.S.MATH