Kernel 0.9.1 : Shell, CSH, bug-fix added Ctrl-C....

This commit is contained in:
Rémy GIBERT 2017-11-09 17:39:01 +01:00
parent a894e55476
commit 0eed73230f
5 changed files with 143 additions and 137 deletions

Binary file not shown.

Binary file not shown.

View File

@ -21,6 +21,85 @@ CL.PrintPrompt >LDYA L.ENV.PS1
plp
rts
*--------------------------------------
CL.CHARIN tax
>LDA.G bEscMode
beq .13
cpx #'['
beq .9
lda #0
sta (pData),y Y=bEscMode
txa
ldx #EscChars.count-1
.17 cmp EscChars,x
beq .18
dex
bpl .17
clc
rts
.18 txa
asl
tax
jmp (J.ESC,x)
*--------------------------------------
.13 cpx #$20
bcc CL.CHARIN.CTRL
.1 cpx #$7f
bne .2
jmp CL.DEL
.2 jmp CL.Insert
.9 clc
rts
*--------------------------------------
CL.CHARIN.CTRL cpx #13 CR
bne .10
txa
>SYSCALL PutChar.A
lda #10
>SYSCALL PutChar.A
>LDA.G CmdBufPtr
tay
lda #0
sta (ZPCMDBuf),y
tya
>STA.G CmdBuflen
lda #$ff
>STA.G bCmdBufexec
clc
rts
.10 cpx #$1B esc
bne .11
lda #$ff
>STA.G bEscMode
clc
rts
.11 cpx #3 Ctrl-C
bne .12
jmp CL.CLR
.12 cpx #24 Ctrl-X
bne .13
jmp CL.SUPPR
.13 clc
rts
*--------------------------------------
CL.Insert >LDA.G CmdBuflen
cmp #CmdLine.MAX
beq .9 Buffer full, discard...

View File

@ -5,10 +5,15 @@ INC 1
AUTO 6
.LIST OFF
*--------------------------------------
CSH.TYPE.CHAR .EQ 1
CSH.TYPE.INT .EQ 2
CSH.TYPE.LONG .EQ 3
CSH.TYPE.FLOAT .EQ 4
CSH.TQ.POINTER .EQ %10000000
CSH.TQ.CONST .EQ %01000000
CSH.TQ.SIGNED .EQ %00100000
CSH.T.CHAR .EQ 1
CSH.T.INT .EQ 2
CSH.T.LONG .EQ 3
CSH.T.FLOAT .EQ 4
CSH.T.VARIADIC .EQ $FF
*--------------------------------------
CSH.Init lda #$FF
>STA.G bExitOnEOF
@ -283,13 +288,13 @@ CSH.CONTINUE
sec
rts
*--------------------------------------
CSH.CHAR lda #CSH.TYPE.CHAR
CSH.CHAR lda #CSH.T.CHAR
bra CSH.TYPE
CSH.INT lda #CSH.TYPE.INT
CSH.INT lda #CSH.T.INT
bra CSH.TYPE
CSH.LONG lda #CSH.TYPE.LONG
CSH.LONG lda #CSH.T.LONG
bra CSH.TYPE
CSH.FLOAT lda #CSH.TYPE.FLOAT
CSH.FLOAT lda #CSH.T.FLOAT
CSH.TYPE >STA.G CSH.ACCT
@ -488,7 +493,7 @@ CSH.Lookup phy Y = len
rts
*--------------------------------------
CSH.GetNumInACC >LDA.G CSH.ACCT
cmp #CSH.TYPE.FLOAT
cmp #CSH.T.FLOAT
bcc .1
>PUSHWI ZPCSHBufPtr
@ -721,7 +726,7 @@ CSH.StoreACCToVar
rts
*--------------------------------------
CSH.IsACC0 >LDA.G CSH.ACCT
cmp #CSH.TYPE.FLOAT
cmp #CSH.T.FLOAT
bne .1 char,int,long
>LDA.G CSH.ACC
bne .9
@ -756,7 +761,7 @@ CSH.BOPS.ADD
CSH.BOPS.SUB >LDA.G CSH.ACCT
cmp #CSH.TYPE.FLOAT
cmp #CSH.T.FLOAT
beq .8
@ -796,27 +801,26 @@ CSH.BOPS.LOR
*--------------------------------------
CSH.Push pha
>LDA.G CSH.StackPtr
inc
beq .9
sta (pData),y
dec
tay
pla
sta (ZPCSHStack),y
iny
beq .9
tya
>STA.G CSH.StackPtr
sta (pData),y
clc
rts
.9 lda #CSH.E.SOVERFLW
.9 pla
lda #CSH.E.SOVERFLW
sec
rts
*--------------------------------------
CSH.Pop >LDA.G CSH.StackPtr
beq .9
dec
tay
sta (pData),y
tay
lda (ZPCSHStack),y
clc
rts
@ -825,12 +829,12 @@ CSH.Pop >LDA.G CSH.StackPtr
sec
rts
*--------------------------------------
CSH.CheckStack pha
CSH.CheckStack tax
>LDA.G CSH.StackPtr
beq .9
dec
tay
pla
txa
cmp (ZPCSHStack),y
bne .9

View File

@ -154,39 +154,37 @@ CS.RUN >LDA.G bReadMode READ Command ?
ldy #S.PS.RC
lda (pPs),y
beq .11
jsr IO.PrintErrMsg
bcs CS.RUN.EXIT.RTS
bcs .9
.11 >LDA.G bPause
bpl .13
>SYSCALL GetChar
bcs .8
>STZ.G bPause
.13 jsr CheckSleep
bne .8
>LDA.G CSH.hBuf batch mode ?
beq .10
jmp CS.RUN.BATCH
bne CS.RUN.BATCH
*--------------------------------------
.10 jsr CL.RESET reset CmdBuf
.10 jsr CL.RESET reset CmdBuf
.12 jsr CL.PrintPrompt
bcs CS.RUN.EXIT.RTS
bcs .9
.1 >SYSCALL Sleep
>SYSCALL GetChar
bcs .1 no char
jsr CS.CHARIN
jsr CL.CHARIN
>LDA.G bCmdBufExec Something to execute ?
bpl .1
>LDA.G CmdBuflen
beq .10 Empty line
jsr CMD.Parse
@ -204,14 +202,14 @@ CS.RUN >LDA.G bReadMode READ Command ?
sta (pPs),y
>LDA.G bExit
bne CS.RUN.EXIT
bne .80
.8 clc
rts
CS.RUN.EXIT lda #0
CS.RUN.EXIT.ERR sec
CS.RUN.EXIT.RTS rts
.80 lda #0
sec
.9 rts
*--------------------------------------
CS.RUN.READ lda #0 reset Buffer
sta (ZPCMDBuf)
@ -220,7 +218,7 @@ CS.RUN.READ lda #0 reset Buffer
>SYSCALL GetChar
bcs .1 no char
jsr CS.CHARIN
jsr CL.CHARIN
>LDA.G bCmdBufExec
bpl .1
@ -231,7 +229,24 @@ CS.RUN.READ lda #0 reset Buffer
>SYSCALL SetEnv
rts
*--------------------------------------
CS.RUN.BATCH jsr CSH.Run
CS.RUN.BATCH >SYSCALL GetChar
bcs .2
cmp #3 test Ctrl-c
bne .1
sec
rts
.1 cmp #19 test Ctrl-s
bne .2
lda #$80
>STA.G bPause
clc
rts
.2 jsr CSH.Run
bcc .7
cmp #MLI.E.EOF
@ -296,105 +311,6 @@ CS.DOEVENT lda (pEvent)
.9 sec
rts
*--------------------------------------
CS.CHARIN tax Save Char
>LDA.G CSH.hBuf Batch mode ?
beq .10
* Batch Mode
cpx #3 test Ctrl-c
bne .12
>LDA.G bExitOnEOF
>STA.G bExit
clc
rts
.12 cpx #19 test Ctrl-s
bne .8
lda #$80
>STA.G bPause
.8 clc
rts
*--------------------------------------
* interactive mode
.10 >LDA.G bEscMode
beq .13
cpx #'['
beq .9
lda #0
sta (pData),y Y=bEscMode
txa
ldx #EscChars.count-1
.17 cmp EscChars,x
beq .18
dex
bpl .17
clc
rts
.18 txa
asl
tax
jmp (J.ESC,x)
*--------------------------------------
.13 cpx #$20
bcc CS.CHARIN.CTRL
.1 cpx #$7f
bne .2
jmp CL.DEL
.2 jmp CL.Insert
.9 clc
rts
*--------------------------------------
CS.CHARIN.CTRL cpx #13 CR
bne .10
txa
>SYSCALL PutChar.A
lda #10
>SYSCALL PutChar.A
>LDA.G CmdBufPtr
tay
lda #0
sta (ZPCMDBuf),y
tya
>STA.G CmdBuflen
lda #$ff
>STA.G bCmdBufexec
clc
rts
.10 cpx #$1B esc
bne .11
lda #$ff
>STA.G bEscMode
clc
rts
.11 cpx #3 Ctrl-C
bne .12
jmp CL.CLR
.12 cpx #24 Ctrl-X
bne .13
jmp CL.SUPPR
.13 clc
rts
*--------------------------------------
CS.QUIT jsr HIS.Quit
jsr CSH.Quit
jsr CMD.Quit
@ -522,8 +438,15 @@ CSH.TYPES >PSTR "char"
*--------------------------------------
* int printf ( const char * format, ... );
CSH.FUNCTIONS >PSTR "printf"
.DA #CSH.T.INT returned value
.DA #CSH.TQ.CONST+CSH.T.CHAR+CSH.TQ.POINTER
.DA #CSH.T.VARIADIC
.DA #0
* float cos ( float x );
>PSTR "cos"
.DA #CSH.T.FLOAT
.DA #CSH.T.FLOAT
.DA #0
*--------------------------------------
MSG.GREETINGS >CSTR "\r\nA2osX-Shell 0.9.1\r\n\r\n"
MSG.PROMPT >CSTR "$ "