Kernel 0.92 : SHELL, PUSHD,POPD added

This commit is contained in:
Rémy GIBERT 2018-11-26 17:36:55 +01:00
parent e1072d492f
commit df4e8f162d
5 changed files with 161 additions and 76 deletions

View File

@ -551,6 +551,13 @@ Load a file in AUX memory (Stock Objects)
Y,A = File Length
X = hMem of Loaded Object in AUX mem
# GetPSStat
**In:**
Y,A = Ptr to K.PS.MAX*2+1 bytes buffer
## RETURN VALUE
Buffer filled with PS stats
# ExecL
## C
@ -584,13 +591,6 @@ A = Child PSID
## RETURN VALUE
A = Status Byte
# GetPSStat
**In:**
Y,A = Ptr to K.PS.MAX*2+1 bytes buffer
## RETURN VALUE
Buffer filled with PS stats
# Stat
Return information about a file
@ -656,6 +656,20 @@ return a hFILE to a new FIFO
CC = OK, CS = ERROR
A = hFILE
# PutChar
Print A (char) to StdOut
## C
`int putchar ( int character );`
## ASM
**In:**
`lda caracter`
`>SYSCALL putchar`
## RETURN VALUE
CC = success
# FPutC
Print A (char) to hFILE
@ -671,20 +685,6 @@ Print A (char) to hFILE
## RETURN VALUE
CC = success
# PutChar
Print A (char) to StdOut
## C
`int putchar ( int character );`
## ASM
**In:**
`lda caracter`
`>SYSCALL putchar`
## RETURN VALUE
CC = success
# PutS
Write Str to StdOut, appends '\r\n'
@ -719,8 +719,8 @@ Prints C-Style String
## C
`int printf ( const char * format, ... );`
`int sprintf ( char * str, const char * format, ... );`
`int fprintf ( hFILE stream, const char * format, ... );`
`int sprintf ( char * str, const char * format, ... );`
## ASM
**In:**
@ -1109,6 +1109,22 @@ 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
@ -1152,22 +1168,6 @@ Copy string
## RETURN VALUE
Y,A = destination
# 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
# StrUpr/StrLwr
Convert string to UPPERCASE/lowercase

Binary file not shown.

View File

@ -17,6 +17,10 @@ CMD.Init >LDYAI 256
>STYA ZPArgVBuf
txa
>STA.G CMD.hArgVBuf
lda #PUSHD.STACK
tay
sta (pData),y
.9 rts
*--------------------------------------
@ -99,6 +103,53 @@ Cmd.INT.PWD ldy #S.PS.hPREFIX
>SYSCALL puts
rts
*--------------------------------------
Cmd.INT.PUSHD >LDA.G PUSHD.STACK
cmp #PUSHD.STACK+PUSHD.STACK.MAX
beq .9
ldy #S.PS.hPREFIX
lda (pPs),y
>SYSCALL GetMemPtr
>SYSCALL NewStr
bcs .99
>INC.G PUSHD.STACK
tay
txa
sta (pData),y
ldx #1
jsr Cmd.GetArgX
bcs .8
>SYSCALL RealPath
bcs .99
jmp Cmd.INT.CD.1
.8 clc
rts
.9 lda #E.SYNTAX
sec
.99 rts
*--------------------------------------
Cmd.INT.POPD >LDA.G PUSHD.STACK
cmp #PUSHD.STACK
beq .9
tay
lda (pData),y
jsr Cmd.SetPrefixA
>DEC.G PUSHD.STACK
clc
rts
.9 lda #E.SYNTAX
sec
rts
*--------------------------------------
Cmd.INT.CD ldx #1
jsr Cmd.GetArgX
bcs Cmd.INT.CD.HOME
@ -114,7 +165,9 @@ Cmd.INT.CD.HOME >LDYA L.ENV.HOME
>LDYA L.ENV.ROOT
>SYSCALL GetEnv
bcs Cmd.INT.PWD
bcc .1
jmp Cmd.INT.PWD
.1 >SYSCALL ExpandStr
bcs Cmd.INT.CD.RTS
@ -134,9 +187,13 @@ Cmd.INT.CD.1 >STYA ZPPtr1
>LDA.G CMD.Stat+S.STAT.P.TYPE
cmp #S.FI.T.DIR
bne Cmd.Exec.ERRSYN
beq .1
ldy #0
lda #E.SYNTAX
sec
bra .90
.1 ldy #0
.5 iny
lda (ZPPtr1),y
@ -156,8 +213,20 @@ Cmd.INT.CD.1 >STYA ZPPtr1
.8 >LDYA ZPPtr1
>SYSCALL NewStr
bcs .90
phx
txa
jsr Cmd.SetPrefixA
.90 php
pha
>LDA.G CMD.hCmdLine
>SYSCALL FreeMem
pla
plp
.9 rts
*--------------------------------------
Cmd.SetPrefixA pha
ldy #S.PS.hPREFIX
lda (pPs),y
>SYSCALL FreeMem
@ -166,15 +235,7 @@ Cmd.INT.CD.1 >STYA ZPPtr1
ldy #S.PS.hPREFIX
sta (pPs),y
jsr SetPWD.I
.90 php
pha
>LDA.G CMD.hCmdLine
>SYSCALL FreeMem
pla
plp
.9 rts
jmp SetPWD.I
*--------------------------------------
Cmd.Exec.ERRSYN lda #E.SYNTAX
sec
@ -508,12 +569,6 @@ Cmd.INT.RD ldx #1
>SYSCALL Remove
.99 rts
.9 jmp Cmd.Exec.ERRSYN
*--------------------------------------
Cmd.INT.PUSHD
.9 jmp Cmd.Exec.ERRSYN
*--------------------------------------
Cmd.INT.POPD
.9 jmp Cmd.Exec.ERRSYN
*--------------------------------------
Cmd.INT.BREAK

View File

@ -236,6 +236,9 @@ Mem.NextSlot lda ZPMemMgrSPtr
* none.
* (X unmodified)
*\--------------------------------------
K.FreeMem.ERRBAD .AZ "FreeMem:$%h=Bad hMem,BIN=%s\r\n"
K.FreeMem.ERRFREED .AZ "FreeMem:$%h=already freed,BIN=%s\r\n"
*--------------------------------------
K.FreeMem.BAD pha
ldy #S.PS.hARGV
lda (pPS),y
@ -251,18 +254,39 @@ K.FreeMem.BAD pha
>DEBUGOA
sec
rts
*--------------------------------------
K.FreeMem.FREED ldy #S.PS.hARGV
lda (pPS),y
jsr K.GetMemPtr
>PUSHYA
pla
>PUSHA
>PUSHBI 3
phx
>LDYAI K.FreeMem.ERRFREED
>SYSCALL printf
plx
sec
rts
*--------------------------------------
K.FreeMem tay
beq K.FreeMem.BAD Slot=0, reserved by Kernel
* cpy #$23
* bne .11
* >DEBUG
*.11
cmp Mem.LastSlot
bcc .10
bne K.FreeMem.BAD
.10 jsr K.GetMemByID X unmodified
.10 pha
jsr K.GetMemByID X unmodified
lda (ZPMemMgrSPtr)
bpl K.FreeMem.FREED In use ?
pla
ldy #S.MEM.REFCNT
lda (ZPMemMgrSPtr),y Get count of those referencing this hMem
dec only one left ?
@ -313,22 +337,6 @@ K.FreeMem tay
>STYA Mem.Free
clc
rts
*--------------------------------------
K.FreeMem.FREED ldy #S.PS.hARGV
lda (pPS),y
jsr K.GetMemPtr
>PUSHYA
>PUSHBI 2
phx
>LDYAI K.FreeMem.ERRFREED
>SYSCALL printf
plx
>DEBUGOA
sec
rts
*--------------------------------------
K.FreeMem.ERRBAD .AZ "FreeMem:%h=Bad hMem,BIN=%s\r\n"
K.FreeMem.ERRFREED .AZ "FreeMem:hMem already freed,BIN=%s\r\n"
*/--------------------------------------
* # GetMemPtr
* A = hMem

View File

@ -24,11 +24,22 @@ ERR.Codes .DA #MLI.E.IO
.DA #E.OOH
.DA #E.INVH
.DA #E.BUF
.DA #E.BADPATH
.DA #E.BADARG
.DA #E.NSP
.DA #E.SYN
.DA #E.ENVF
.DA #E.IBIN
.DA #E.FTB
.DA #3 Ctrl-C
*--------------------------------------
.DA #E.SYNTAX
.DA #E.STKOVERFLOW
.DA #E.NOWHILE
.DA #E.NOFOR
.DA #E.NOIF
.DA #E.BADEXP
.DA #E.BADFTYPE
*--------------------------------------
ERR.Count .EQ *-ERR.Codes
*--------------------------------------
@ -53,11 +64,22 @@ ERR.Messages >PSTR "I/O Error"
>PSTR "Out Of Memory Handle"
>PSTR "Invalid Handle"
>PSTR "Buffer Overflow"
>PSTR "Bad Path"
>PSTR "Bad API Argument"
>PSTR "No Such Process"
>PSTR "Syntax Error"
>PSTR "Env Is Full"
>PSTR "Invalid BIN format"
>PSTR "File Too Big"
>PSTR "User Interrupt"
*--------------------------------------
>PSTR "Script Syntax Error"
>PSTR "Stack Overflow"
>PSTR "LOOP Without WHILE"
>PSTR "NEXT Without FOR"
>PSTR "FI/ELSE Without IF"
>PSTR "Bad Expression"
>PSTR "Bad File Type"
*--------------------------------------
>PSTR "Unknown Error"
*--------------------------------------