mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-25 20:33:13 +00:00
Kernel version 0.9 : SHELL, enhancement in Batch mode....(Cont.)
This commit is contained in:
parent
417fcfe9aa
commit
7e0fb2e663
@ -148,6 +148,15 @@ Prints Pascal/C-Style String
|
||||
+ CC : success
|
||||
+ CS : I/O error from COut
|
||||
|
||||
# AToI
|
||||
Convert String to 32 bit int
|
||||
|
||||
## In:
|
||||
+ PUSHW PTR to target buffer DWORD
|
||||
+ PUSHW Source String (PSTR)
|
||||
|
||||
## Out:
|
||||
|
||||
# GetDevByIDA
|
||||
|
||||
## IN:
|
||||
|
Binary file not shown.
Binary file not shown.
@ -1,6 +1,6 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
LOMEM $A00
|
||||
LOMEM $900
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
@ -211,7 +211,7 @@ SYS.PPrintFYA .EQ $44
|
||||
SYS.CPrintFYA .EQ $46
|
||||
* .EQ $48
|
||||
* .EQ $4A
|
||||
* .EQ $4C
|
||||
SYS.AToI .EQ $4C
|
||||
* .EQ $4E
|
||||
*--------------------------------------
|
||||
SYS.NewPStrYA .EQ $50
|
||||
|
@ -5,6 +5,60 @@ INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* Remove extra SPACE & comment
|
||||
*--------------------------------------
|
||||
Cmd.Normalize >LDYA pData
|
||||
>STYA ZPPtr1
|
||||
|
||||
lda (pData) empty line...quit
|
||||
beq .9
|
||||
|
||||
tax Char count
|
||||
|
||||
ldy #0
|
||||
|
||||
.1 jsr Cmd.Normalize.Next
|
||||
beq .8 no more char, exit
|
||||
|
||||
cmp #' ' skip leading spaces
|
||||
beq .1
|
||||
|
||||
cmp #'#' Comment ?
|
||||
beq .8 ignore remaining chars
|
||||
|
||||
.3 iny add char to buffer
|
||||
sta (pData),y
|
||||
|
||||
jsr Cmd.Normalize.Next
|
||||
beq .8
|
||||
|
||||
cmp #' '
|
||||
bne .3
|
||||
|
||||
iny add One SPACE to buffer
|
||||
sta (pData),y
|
||||
|
||||
.5 jsr Cmd.Normalize.Next
|
||||
beq .8
|
||||
cmp #' '
|
||||
beq .5 skip additional spaces
|
||||
bne .3 no more space, add next word...
|
||||
|
||||
.8 tya
|
||||
sta (pData)
|
||||
|
||||
.9 rts
|
||||
|
||||
Cmd.Normalize.Next
|
||||
txa
|
||||
beq .8
|
||||
dex
|
||||
inc ZPPtr1
|
||||
bne .1
|
||||
inc ZPPtr1+1
|
||||
.1 lda (ZPPtr1)
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
* Y,A -> Command line (formatted & not empty)
|
||||
*--------------------------------------
|
||||
Cmd.ExecYA stz bStartProc
|
||||
@ -536,6 +590,24 @@ Cmd.Exec.READ lda ARGS
|
||||
clc
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
Cmd.Exec.SLEEP lda ARGS
|
||||
beq .9
|
||||
|
||||
lda #Sleep
|
||||
clc
|
||||
adc pData
|
||||
tay
|
||||
lda /Sleep
|
||||
adc pData+1
|
||||
>PUSHYA
|
||||
>PUSHW L.ARGS
|
||||
>SYSCALL AToI
|
||||
|
||||
bcs .9
|
||||
|
||||
rts
|
||||
.9 jmp Cmd.Exec.ERRSYN
|
||||
*--------------------------------------
|
||||
Cmd.Exec.PAUSE ldy #bPause
|
||||
lda #$80
|
||||
sta (pData),y
|
||||
|
@ -271,6 +271,64 @@ CSH.CONTINUE
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.ExpEval stz CSH.ACC
|
||||
stz CSH.ACC+1
|
||||
stz CSH.ACC+2
|
||||
stz CSH.ACC+3
|
||||
|
||||
ldy #0
|
||||
|
||||
jsr CSH.GetCharNB
|
||||
>DEBUG
|
||||
bcs .9
|
||||
cmp #')'
|
||||
beq .8
|
||||
|
||||
jsr CSH.IsLetter Fnc or Var ?
|
||||
bcs .1
|
||||
|
||||
bra .9
|
||||
|
||||
.1 jsr CSH.IsDigit number ?
|
||||
bcs .9
|
||||
|
||||
jsr CSH.GetNumInACC
|
||||
bcs .9
|
||||
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.9 lda #CSHERR.SYNTAX
|
||||
sec
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
CSH.GetNumInACC ldy #0
|
||||
|
||||
.1 iny
|
||||
cpy #10
|
||||
beq .9
|
||||
|
||||
sta (pData),y
|
||||
|
||||
jsr CSH.GetNextChar
|
||||
bcs .8
|
||||
jsr CSH.IsDigit
|
||||
bcc .1
|
||||
|
||||
.8 tya
|
||||
sta (pData)
|
||||
|
||||
>PUSHW pData
|
||||
>PUSHW L.CSH.ACC
|
||||
>SYSCALL AToI
|
||||
bcs .9
|
||||
rts
|
||||
|
||||
.9 lda #CSHERR.SYNTAX
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.Push pha
|
||||
ldy #CSH.StackPtr
|
||||
lda (pData),y
|
||||
@ -325,33 +383,6 @@ CSH.CheckStack pha
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.ExpEval stz CSH.ACC
|
||||
stz CSH.ACC+1
|
||||
stz CSH.ACC+2
|
||||
stz CSH.ACC+3
|
||||
|
||||
jsr CSH.GetCharNB
|
||||
bcs .9
|
||||
cmp #')'
|
||||
beq .8
|
||||
|
||||
jsr CSH.IsLetter Fnc or Var ?
|
||||
bne .1
|
||||
|
||||
|
||||
.1
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.9 lda #CSHERR.SYNTAX
|
||||
sec
|
||||
rts
|
||||
*---------------------------------------
|
||||
CSH.IsLetterOrDigit
|
||||
jsr CSH.IsDigit
|
||||
bcc CSH.IsLetterRTS
|
||||
*--------------------------------------
|
||||
CSH.GetCharNB jsr CSH.GetChar
|
||||
bcs CSH.GetNextCharNB.RTS
|
||||
jsr CSH.CheckCharNB
|
||||
@ -410,6 +441,10 @@ CSH.GetChar lda ZPBufPtr
|
||||
clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
CSH.IsLetterOrDigit
|
||||
jsr CSH.IsDigit
|
||||
bcc CSH.IsLetterRTS
|
||||
*---------------------------------------
|
||||
CSH.IsLetter cmp #'A'
|
||||
bcc .9
|
||||
|
||||
|
121
SBIN/SHELL.S.txt
121
SBIN/SHELL.S.txt
@ -70,6 +70,7 @@ J.INTCMDS .DA Cmd.Exec.CD
|
||||
.DA Cmd.Exec.PWD
|
||||
.DA Cmd.Exec.READ
|
||||
.DA Cmd.Exec.SET
|
||||
.DA Cmd.Exec.SLEEP
|
||||
.DA Cmd.Exec.STARTPROC
|
||||
.DA Cmd.Exec.TIME
|
||||
L.CSHCMDS .DA CSHCMDS
|
||||
@ -79,15 +80,16 @@ J.CSHCMDS .DA CSH.IF
|
||||
.DA CSH.CONTINUE
|
||||
J.CSHCMDS.END .DA CSH.IF.END
|
||||
.DA CSH.WHILE.END
|
||||
L.CSH.ACC .DA CSH.ACC
|
||||
L.ERR.Codes .DA ERR.Codes
|
||||
L.ERR.Messages .DA ERR.Messages
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
CS.INIT jsr SetPWD
|
||||
|
||||
* lda (pPs)
|
||||
* ora #S.PS.F.EVENT Now accept events
|
||||
* sta (pPs)
|
||||
lda (pPs)
|
||||
ora #S.PS.F.EVENT Now accept events
|
||||
sta (pPs)
|
||||
|
||||
>SYSCALL GetArgC
|
||||
cmp #1
|
||||
@ -130,11 +132,7 @@ CS.INIT jsr SetPWD
|
||||
* clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CS.RUN ldy #bPause
|
||||
lda (pData),y
|
||||
bmi .8
|
||||
|
||||
ldy #VarBuffer READ Command ?
|
||||
CS.RUN ldy #VarBuffer READ Command ?
|
||||
lda (pData),y
|
||||
bne CS.RUN.READ
|
||||
|
||||
@ -145,7 +143,17 @@ CS.RUN ldy #bPause
|
||||
jsr ERR.Print
|
||||
bcs CS.RUN.EXIT.RTS
|
||||
|
||||
.11 ldy #CSH.hBuf batch mode ?
|
||||
.11 ldy #bPause
|
||||
lda (pData),y
|
||||
bpl .13
|
||||
|
||||
>SYSCALL GetC
|
||||
bcs .8
|
||||
|
||||
.13 jsr CheckSleep
|
||||
bne .8
|
||||
|
||||
ldy #CSH.hBuf batch mode ?
|
||||
lda (pData),y
|
||||
beq .10
|
||||
|
||||
@ -172,7 +180,7 @@ CS.RUN ldy #bPause
|
||||
and #$7F
|
||||
sta (pData)
|
||||
|
||||
jsr CmdBuffer.Normalize
|
||||
jsr Cmd.Normalize
|
||||
lda (pData)
|
||||
beq .12 Empty line
|
||||
|
||||
@ -184,11 +192,11 @@ CS.RUN ldy #bPause
|
||||
ldy #S.PS.RC
|
||||
sta (pPs),y
|
||||
|
||||
.8 ldy #bEXIT
|
||||
ldy #bEXIT
|
||||
lda (pData),y
|
||||
bne CS.RUN.EXIT
|
||||
|
||||
clc
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
CS.RUN.EXIT lda #0
|
||||
@ -234,7 +242,7 @@ CS.RUN.READ lda #0
|
||||
CS.RUN.BATCH jsr CSH.Exec
|
||||
bcs .9
|
||||
|
||||
jsr CmdBuffer.Normalize
|
||||
jsr Cmd.Normalize
|
||||
lda (pData)
|
||||
beq .8 Empty line....nothing to do....
|
||||
|
||||
@ -286,7 +294,25 @@ CS.RUN.BATCH jsr CSH.Exec
|
||||
pla
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.DOEVENT sec
|
||||
CS.DOEVENT lda (pEvent)
|
||||
bpl .9
|
||||
|
||||
|
||||
jsr CheckSleep
|
||||
beq .9
|
||||
|
||||
* ldy #Sleep already set by CheckSleep
|
||||
clc
|
||||
ldx #4
|
||||
|
||||
.1 lda (pData),y
|
||||
sbc #0
|
||||
sta (pData),y
|
||||
iny
|
||||
dex
|
||||
bne .1
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.CHARIN tax
|
||||
@ -442,7 +468,15 @@ CS.QUIT jsr HIS.Quit
|
||||
.8 clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
CheckSleep ldy #Sleep+3
|
||||
lda (pData),y
|
||||
dey
|
||||
ora (pData),y
|
||||
dey
|
||||
ora (pData),y
|
||||
dey
|
||||
ora (pData),y
|
||||
rts
|
||||
*--------------------------------------
|
||||
SetPWD ldy #S.PS.hPREFIX
|
||||
lda (pPs),y
|
||||
@ -468,61 +502,6 @@ PrintPrompt >LDYA L.ENV.PS1
|
||||
plp
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* Remove extra SPACE & comment
|
||||
*--------------------------------------
|
||||
CmdBuffer.Normalize
|
||||
>LDYA pData
|
||||
>STYA ZPPtr1
|
||||
|
||||
lda (pData) empty line...quit
|
||||
beq .9
|
||||
|
||||
tax Char count
|
||||
|
||||
ldy #0
|
||||
|
||||
.1 jsr CmdBuffer.Normalize.Next
|
||||
beq .8 no more char, exit
|
||||
|
||||
cmp #' ' skip leading spaces
|
||||
beq .1
|
||||
|
||||
cmp #'#' Comment ?
|
||||
beq .8 ignore remaining chars
|
||||
|
||||
.3 iny add char to buffer
|
||||
sta (pData),y
|
||||
|
||||
jsr CmdBuffer.Normalize.Next
|
||||
beq .8
|
||||
|
||||
cmp #' '
|
||||
bne .3
|
||||
|
||||
iny add One SPACE to buffer
|
||||
sta (pData),y
|
||||
|
||||
.5 jsr CmdBuffer.Normalize.Next
|
||||
beq .8
|
||||
cmp #' '
|
||||
beq .5 skip additional spaces
|
||||
bne .3 no more space, add next word...
|
||||
|
||||
.8 tya
|
||||
sta (pData)
|
||||
|
||||
.9 rts
|
||||
|
||||
CmdBuffer.Normalize.Next
|
||||
txa
|
||||
beq .8
|
||||
dex
|
||||
inc ZPPtr1
|
||||
bne .1
|
||||
inc ZPPtr1+1
|
||||
.1 lda (ZPPtr1)
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
CmdBuffer.CLR jsr CmdBuffer.DEL
|
||||
bne CmdBuffer.CLR
|
||||
rts
|
||||
@ -554,6 +533,7 @@ INTCMDS >PSTR "CD"
|
||||
>PSTR "PWD"
|
||||
>PSTR "READ"
|
||||
>PSTR "SET"
|
||||
>PSTR "SLEEP"
|
||||
>PSTR "STARTPROC"
|
||||
>PSTR "TIME"
|
||||
.HS 00
|
||||
@ -598,6 +578,7 @@ bExitOnEOF .BS 1
|
||||
hCmdHistory .BS 1
|
||||
CmdHistory.IDX .BS 1
|
||||
CmdHistory.END .BS 1
|
||||
Sleep .BS 4
|
||||
CSH.hBuf .BS 1
|
||||
CSH.BufPtr .BS 2
|
||||
CSH.BufLen .BS 2
|
||||
|
@ -494,7 +494,7 @@ CIO.GetCharAtPtr1Y
|
||||
beq .9
|
||||
iny advance to next char...
|
||||
bne .9
|
||||
inc ZPPtr1+1 Allow >256 CStrings
|
||||
inc ZPPtr1+1 Allow >256 CStrings
|
||||
rts
|
||||
|
||||
|
||||
@ -506,6 +506,52 @@ CIO.GetCharAtPtr1Y
|
||||
|
||||
.9 clc no error, but end of string
|
||||
rts
|
||||
*/--------------------------------------
|
||||
* # AToI
|
||||
* Convert String to 32 bit int
|
||||
* ## In:
|
||||
* PUSHW PTR to target buffer DWORD
|
||||
* PUSHW Source String (PSTR)
|
||||
* ## Out:
|
||||
*\--------------------------------------
|
||||
K.AToI jsr PullPtr1Ptr2 PSTR in Ptr1,buffer in Ptr2
|
||||
|
||||
stz ASCBUF
|
||||
|
||||
lda (ZPPtr1)
|
||||
beq .2
|
||||
|
||||
ldx #0
|
||||
ldy #0
|
||||
|
||||
.1 iny
|
||||
lda (ZPPtr1),y
|
||||
|
||||
cmp #'0'
|
||||
bcc .2
|
||||
cmp #'9'+1
|
||||
bcs .2
|
||||
|
||||
inx
|
||||
sta ASCBUF,x
|
||||
cpx #10
|
||||
beq .2
|
||||
tya
|
||||
cmp (ZPPtr1)
|
||||
bne .1
|
||||
|
||||
.2 stx ASCBUF
|
||||
jsr DEC2HEX
|
||||
|
||||
ldy #3
|
||||
|
||||
.3 lda HEXBUF,y
|
||||
sta (ZPPtr2),y
|
||||
dey
|
||||
bpl .3
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
TYPES .AS "-dbclssp"
|
||||
ACCESS .AS "rwxrwxrwx"
|
||||
|
@ -60,6 +60,9 @@ DEC2HEX stz HEXBUF
|
||||
stz HEXBUF+2
|
||||
stz HEXBUF+3
|
||||
|
||||
lda ASCBUF
|
||||
beq .8
|
||||
|
||||
ldx #0
|
||||
|
||||
.1 lda HEXBUF+3 save HEXBUF for 4+1
|
||||
@ -109,7 +112,8 @@ DEC2HEX stz HEXBUF
|
||||
|
||||
.2 cpx ASCBUF
|
||||
bne .1
|
||||
rts
|
||||
|
||||
.8 rts
|
||||
|
||||
*.9 pla discard saved HEXBUF
|
||||
* pla
|
||||
|
@ -13,7 +13,7 @@ Kernel.Init2 sei
|
||||
>STYA ZPPtr1
|
||||
>LDYAI A2osX.SYSCALL
|
||||
>STYA ZPPtr2
|
||||
>LDYAI A2osX.GP.S^$FFFF
|
||||
>LDYAI A2osX.D1-A2osX.GP^$FFFF
|
||||
>STYA ZPPtr3
|
||||
jsr Kernel.Move
|
||||
|
||||
@ -30,7 +30,7 @@ Kernel.Init2 sei
|
||||
>STYA ZPPtr1
|
||||
>LDYAI $D000
|
||||
>STYA ZPPtr2
|
||||
>LDYAI A2osX.D2.S^$FFFF
|
||||
>LDYAI A2osX.E0-A2osX.D2^$FFFF
|
||||
>STYA ZPPtr3
|
||||
jsr Kernel.Move
|
||||
|
||||
@ -47,7 +47,7 @@ Kernel.Init2 sei
|
||||
>STYA ZPPtr1
|
||||
>LDYAI $D000
|
||||
>STYA ZPPtr2
|
||||
>LDYAI A2osX.D1.S^$FFFF
|
||||
>LDYAI A2osX.D2-A2osX.D1^$FFFF
|
||||
>STYA ZPPtr3
|
||||
jsr Kernel.Move
|
||||
|
||||
@ -64,7 +64,7 @@ Kernel.Init2 sei
|
||||
>STYA ZPPtr1
|
||||
>LDYAI $E000
|
||||
>STYA ZPPtr2
|
||||
>LDYAI A2osX.E0.S^$FFFF
|
||||
>LDYAI A2osX.E0.E-A2osX.E0^$FFFF
|
||||
>STYA ZPPtr3
|
||||
jsr Kernel.Move
|
||||
|
||||
|
@ -52,7 +52,7 @@ K.SYSCALL.JMP .DA K.FileSearch $00
|
||||
.DA K.CPrintFYA
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA K.AToI
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA K.NewPStrYA $50
|
||||
|
@ -34,15 +34,13 @@ ZPPtr4 .EQ ZPKERNEL+6
|
||||
>DEBUGOA
|
||||
jmp Kernel.Init3
|
||||
|
||||
.INB /A2OSX.SRC/X.PRINTF.S
|
||||
.INB /A2OSX.SRC/SYS/KERNEL.S.INIT2
|
||||
.INB /A2OSX.SRC/SYS/KERNEL.S.INIT3
|
||||
.INB /A2OSX.SRC/X.PRINTF.S
|
||||
|
||||
A2osX.GP .PH $BD00
|
||||
.INB /A2OSX.SRC/SYS/KERNEL.S.GP
|
||||
.EP
|
||||
A2osX.GP.E .EQ *
|
||||
|
||||
A2osX.D1 .PH $D000
|
||||
.DA #RRAMWRAMBNK1
|
||||
.INB /A2OSX.SRC/SYS/KERNEL.S.FIO
|
||||
@ -51,12 +49,9 @@ A2osX.D1 .PH $D000
|
||||
.INB /A2OSX.SRC/SYS/KERNEL.S.TIME
|
||||
.INB /A2OSX.SRC/SYS/KERNEL.S.FILE
|
||||
.INB /A2OSX.SRC/SYS/KERNEL.S.DIR
|
||||
|
||||
.INB /A2OSX.SRC/SYS/KERNEL.S.PFT
|
||||
.INB /A2OSX.SRC/SYS/KERNEL.S.BIN
|
||||
.EP
|
||||
A2osX.D1.E .EQ *
|
||||
|
||||
A2osX.D2 .PH $D000
|
||||
.DA #RRAMWRAMBNK2
|
||||
.INB /A2OSX.SRC/SYS/KERNEL.S.CIO
|
||||
@ -65,14 +60,11 @@ A2osX.D2 .PH $D000
|
||||
.INB /A2OSX.SRC/SYS/KERNEL.S.PS
|
||||
.INB /A2OSX.SRC/SYS/KERNEL.S.ARG
|
||||
.INB /A2OSX.SRC/SYS/KERNEL.S.ENV
|
||||
|
||||
.INB /A2OSX.SRC/SYS/KERNEL.S.CNV
|
||||
.INB /A2OSX.SRC/SYS/KERNEL.S.RUN
|
||||
.INB /A2OSX.SRC/SYS/KERNEL.S.EVT
|
||||
.INB /A2OSX.SRC/SYS/KERNEL.S.TSK
|
||||
.EP
|
||||
A2osX.D2.E .EQ *
|
||||
|
||||
A2osX.E0 .PH $E000
|
||||
.INB /A2OSX.SRC/SYS/KERNEL.S.JMP
|
||||
.INB /A2OSX.SRC/SYS/KERNEL.S.DAT
|
||||
@ -84,17 +76,13 @@ A2osX.E0 .PH $E000
|
||||
A2osX.E0.E .EQ *
|
||||
* CONTROL SECTION :
|
||||
.LIST ON
|
||||
A2osX.GP.S .EQ A2osX.GP.E-A2osX.GP
|
||||
A2osX.D1.S .EQ A2osX.D1.E-A2osX.D1
|
||||
A2osX.D2.S .EQ A2osX.D2.E-A2osX.D2
|
||||
A2osX.E0.S .EQ A2osX.E0.E-A2osX.E0
|
||||
.DO A2osX.GP.S>$200
|
||||
.DO A2osX.D1-A2osX.GP>$200
|
||||
* ERROR:GP too big
|
||||
.FIN
|
||||
.DO A2osX.D1.S>$1000
|
||||
.DO A2osX.D2-A2osX.D1>$1000
|
||||
* ERROR:BNK1 too big
|
||||
.FIN
|
||||
.DO A2osX.D2.S>$1000
|
||||
.DO A2osX.E0-A2osX.D2>$1000
|
||||
* ERROR:BNK2 too big
|
||||
.FIN
|
||||
.LIST OFF
|
||||
|
Loading…
Reference in New Issue
Block a user