A2osX/SBIN/SHELL.S.txt

612 lines
10 KiB
Plaintext
Raw Normal View History

2015-03-14 21:48:35 +00:00
PR#3
PREFIX /A2OSX.BUILD
LOMEM $A00
2015-03-14 21:48:35 +00:00
INC 1
AUTO 6
2015-10-19 20:35:00 +00:00
.LIST OFF
2015-03-14 21:48:35 +00:00
.OP 65C02
.OR $2000
.TF /A2OSX.BUILD/SBIN/SHELL
2015-03-14 21:48:35 +00:00
*--------------------------------------
.INB /A2OSX.BUILD/INC/MACROS.I
.INB /A2OSX.BUILD/INC/A2OSX.I
.INB /A2OSX.BUILD/INC/MLI.ERR.I
2015-03-14 21:48:35 +00:00
*--------------------------------------
UsrBuf256 .EQ $200
*--------------------------------------
2015-03-14 21:48:35 +00:00
ZPPTR1 .EQ ZPBIN
ZPPTR2 .EQ ZPBIN+2
ZPCMDBuf .EQ ZPBIN+4
ZPCSHBufBase .EQ ZPBIN+6
ZPCSHBufPtr .EQ ZPBIN+8
ZPCSHSymbols .EQ ZPBIN+10
ZPCSHData .EQ ZPBIN+12
ZPCSHStack .EQ ZPBIN+14
2015-03-14 21:48:35 +00:00
*--------------------------------------
CmdLine.MAX .EQ 127
VarLen.MAX .EQ 15
CSH.Stack.MAX .EQ 15
CSH.Name.MAX .EQ 15
CSH.E.SYNTAX .EQ $7F
CSH.E.SOVERFLW .EQ $7E
CSH.E.NOVERFLW .EQ $7D
CSH.E.OOM .EQ $7C
CSH.E.DUP .EQ $7B
CSH.E.UNDEF .EQ $7A
CSH.E.TOOLONG .EQ $79
2015-03-14 21:48:35 +00:00
*--------------------------------------
2015-06-03 18:30:57 +00:00
* File Header (16 Bytes)
2015-03-14 21:48:35 +00:00
*--------------------------------------
CS.START cld
jmp (.1,x)
2015-06-03 18:30:57 +00:00
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
.DA 0
2015-06-03 18:30:57 +00:00
.DA 0
*--------------------------------------
* Relocation Table
2015-10-19 20:35:00 +00:00
*--------------------------------------
2015-03-14 21:48:35 +00:00
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
*--------------------------------------
L.MSG.GREETINGS .DA MSG.GREETINGS
L.MSG.PROMPT .DA MSG.PROMPT
L.MSG.ECHO .DA MSG.ECHO
L.MSG.ERROR .DA MSG.ERROR
L.MSG.PRINTENV .DA MSG.PRINTENV
L.MSG.CSHERR .DA MSG.CSHERR
2015-10-19 20:35:00 +00:00
L.ENV.PATH .DA ENV.PATH
L.ENV.PWD .DA ENV.PWD
L.ENV.PS1 .DA ENV.PS1
L.TIME .DA TIME
L.STAT .DA STAT
L.FMT.DATE .DA FMT.DATE
L.FMT.TIME .DA FMT.TIME
L.INTCMDS .DA INTCMDS
2016-08-17 06:25:58 +00:00
J.INTCMDS .DA Cmd.Exec.CD
.DA Cmd.Exec.DATE
.DA Cmd.Exec.ECHO
.DA Cmd.Exec.EXIT
.DA Cmd.Exec.PAUSE
.DA Cmd.Exec.PWD
2016-08-17 06:25:58 +00:00
.DA Cmd.Exec.READ
.DA Cmd.Exec.SET
.DA Cmd.Exec.SLEEP
2016-08-17 06:25:58 +00:00
.DA Cmd.Exec.STARTPROC
.DA Cmd.Exec.TIME
L.CSHCMDS .DA CSHCMDS
J.CSHCMDS .DA CSH.IF
.DA CSH.WHILE
.DA CSH.BREAK
.DA CSH.CONTINUE
.DA CSH.CHAR
.DA CSH.INT
.DA CSH.LONG
.DA CSH.FLOAT
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
2015-03-14 21:48:35 +00:00
.DA 0
*--------------------------------------
CS.INIT jsr SetPWD
jsr CMD.Init
bcs .9
lda (pPs)
ora #S.PS.F.EVENT Now accept events
sta (pPs)
ldy #S.PS.ARGC
lda (pPs),y
2015-10-19 20:35:00 +00:00
beq .1 no arg, continue starting interactive
jmp CSH.Init
.1 jsr HIS.Init
2015-10-19 20:35:00 +00:00
bcs .9
>LDYA L.MSG.GREETINGS
>SYSCALL PrintF.YA
.9 rts
2015-03-14 21:48:35 +00:00
*--------------------------------------
CS.RUN >LDA.G bReadMode READ Command ?
bne CS.RUN.READ
ldy #S.PS.RC
lda (pPs),y
beq .11
jsr IO.PrintErrMsg
bcs CS.RUN.EXIT.RTS
.11 >LDA.G bPause
bpl .13
>SYSCALL GetChar
bcs .8
.13 jsr CheckSleep
bne .8
>LDA.G CSH.hBuf batch mode ?
beq .10
jmp CS.RUN.BATCH
* Interactive Mode
.10 >LDA.G hCmdBuf Get the buffer
>SYSCALL GetMemPtr.A
>STYA ZPCMDBuf
lda #0 reset it
sta (ZPCMDBuf)
>STA.G bCmdBufexec
>STA.G bSecureRead Clear password mode
.12 jsr PrintPrompt
bcs CS.RUN.EXIT.RTS
.1 >SYSCALL Sleep
>SYSCALL GetChar
2017-01-12 17:43:45 +00:00
bcs .1 no char
2017-01-12 17:43:45 +00:00
jsr CS.CHARIN
>LDA.G bCmdBufexec Something to execute ?
2015-06-24 20:41:38 +00:00
bpl .1
jsr Cmd.Parse
>LDA.G CmdBuflen
beq .12 Empty line
2016-08-17 06:25:58 +00:00
jsr HIS.Add
jsr Cmd.Exec
ldy #S.PS.RC
sta (pPs),y
>LDA.G bExit
bne CS.RUN.EXIT
.8 clc
2015-03-14 21:48:35 +00:00
rts
CS.RUN.EXIT lda #0
CS.RUN.EXIT.ERR sec
CS.RUN.EXIT.RTS rts
*--------------------------------------
CS.RUN.READ >LDA.G hCmdBuf Get the buffer
>SYSCALL GetMemPtr.A
>STYA ZPCMDBuf
lda #0 reset it
sta (ZPCMDBuf)
.1 >SYSCALL Sleep
>SYSCALL GetChar
bcs .1 no char
jsr CS.CHARIN
>LDA.G bCmdBufexec
bpl .1
>PUSHW ZPCMDBuf
lda #CMD.VarName
clc
adc pData
tay
lda pData+1
adc #0
>PUSHYA
>SYSCALL SetEnv
rts
*--------------------------------------
CS.RUN.BATCH jsr CSH.Run
bcs .9
>LDA.G bCmdBufexec
bpl .8 Empty line....nothing to do....
jsr Cmd.Parse
lda (ZPCMDBuf)
beq .8
jsr Cmd.Exec
.8 ldy #S.PS.RC
sta (pPs),y
clc
rts
.9 cmp #MLI.ERR.EOF
bne .7
lda #0
sec
rts
.7 pha
ldy #CSH.BufPtr+1
>PUSHB (pData),y
dey
>PUSHB (pData),y
>LDYA L.MSG.CSHERR
>SYSCALL PrintF.YA
jsr CSH.RestorePtr
.90 jsr CSH.GetChar
bcs .92
>SYSCALL PutChar.A
.91 jsr CSH.GetNextChar
bcs .92
cmp #13
beq .92
>SYSCALL PutChar.A
bra .91
.92 pla
bra .99
.98 lda #0
.99 ldy #S.PS.RC
sta (pPs),y
pha
ldy #bExitOnEOF
lda (pData),y
asl CS if bExitOnEOF
pla
rts
2015-03-14 21:48:35 +00:00
*--------------------------------------
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
2015-12-13 21:29:51 +00:00
rts
2017-01-12 17:43:45 +00:00
*--------------------------------------
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
2015-12-13 21:29:51 +00:00
clc
rts
* interactive mode
.10 >LDA.G bEscMode
2015-12-13 21:29:51 +00:00
beq .13
2015-12-13 21:29:51 +00:00
cpx #'['
beq .8
2015-12-13 21:29:51 +00:00
lda #0
sta (pData),y Y=bEscMode
2015-12-13 21:29:51 +00:00
txa
ldx EscChars
.17 cmp EscChars,x
beq .18
dex
bne .17
bra .8
.18 lda EscAscii,x
2015-12-13 21:29:51 +00:00
tax
2015-12-13 21:29:51 +00:00
.13 cpx #$20
2015-06-03 18:30:57 +00:00
bcs .1
2017-01-12 17:43:45 +00:00
jsr CS.CHARIN.CTRL
2015-03-14 21:48:35 +00:00
bra .8
2015-06-03 18:30:57 +00:00
.1 cpx #$7f
2015-03-14 21:48:35 +00:00
bne .2
jsr CmdLine.DEL
2015-12-13 21:29:51 +00:00
clc
rts
2015-03-14 21:48:35 +00:00
.2 >LDA.G CmdBuflen
cmp #CmdLine.MAX
2015-03-14 21:48:35 +00:00
beq .8
pha
2015-06-03 18:30:57 +00:00
inc
sta (pData),y
txa
ply
sta (ZPCMDBuf),y
2015-06-03 18:30:57 +00:00
>LDA.G bSecureRead
bne .8
txa
>SYSCALL PutChar.A
2015-06-03 18:30:57 +00:00
.8 clc
2015-03-14 21:48:35 +00:00
rts
*--------------------------------------
2017-01-12 17:43:45 +00:00
CS.CHARIN.CTRL cpx #13 CR
2015-03-14 21:48:35 +00:00
bne .10
txa
>SYSCALL PutChar.A
lda #10
>SYSCALL PutChar.A
lda #$ff
>STA.G bCmdBufexec
2015-03-14 21:48:35 +00:00
clc
rts
2015-12-13 21:29:51 +00:00
.10 cpx #$1B esc
bne .11
lda #$ff
>STA.G bEscMode
2015-12-13 21:29:51 +00:00
clc
rts
.11 cpx #3 Ctrl-C
2015-03-14 21:48:35 +00:00
bne .1
jsr CmdLine.CLR
2015-03-14 21:48:35 +00:00
clc
rts
.1 cpx #8 BS (left arrow)
2015-03-14 21:48:35 +00:00
bne .2
jsr CmdLine.DEL
2015-03-14 21:48:35 +00:00
clc
rts
.2 cpx #10 LF (down arrow)
2015-03-14 21:48:35 +00:00
bne .3
2016-09-22 06:19:49 +00:00
jsr HIS.GetNext
2015-03-14 21:48:35 +00:00
clc
rts
.3 cpx #11 VT (up arrow)
2015-03-14 21:48:35 +00:00
bne .4
2016-09-22 06:19:49 +00:00
jsr HIS.GetPrev
2015-03-14 21:48:35 +00:00
clc
rts
.4 cpx #21 NAK (right arrow)
2015-03-14 21:48:35 +00:00
bne .8
2015-03-14 21:48:35 +00:00
clc
rts
.8 clc
2015-03-14 21:48:35 +00:00
rts
*--------------------------------------
2016-08-17 06:25:58 +00:00
CS.QUIT jsr HIS.Quit
jsr CSH.Quit
clc
2015-03-14 21:48:35 +00:00
rts
*--------------------------------------
CheckSleep ldy #Sleep+3
lda (pData),y
dey
ora (pData),y
dey
ora (pData),y
dey
ora (pData),y
rts
2015-03-14 21:48:35 +00:00
*--------------------------------------
SetPWD ldy #S.PS.hPREFIX
lda (pPs),y
>SYSCALL GetMemPtr.A
>PUSHYA
>PUSHW L.ENV.PWD
>SYSCALL SetEnv
rts
*--------------------------------------
PrintPrompt >LDYA L.ENV.PS1
>SYSCALL GetEnv.YA
>SYSCALL ExpandStr.YA
phx
>PUSHYA
>LDYA L.MSG.PROMPT
>SYSCALL PrintF.YA
plx
php
pha
txa
>SYSCALL FreeMem.A
pla
plp
.9 rts
*--------------------------------------
CmdLine.CLR ldy #0
.1 lda (ZPCMDBuf),y
beq .9
lda #8
sta (pData),y
iny
bne .1
jsr CmdLine.SET
lda #0
sta (ZPCMDBuf)
.9 rts
2015-03-14 21:48:35 +00:00
*--------------------------------------
CmdLine.DEL >LDA.G CmdBuflen
2015-03-14 21:48:35 +00:00
beq .9
dec
sta (pData),y
tay
lda #0
sta (pData),y
2015-03-14 21:48:35 +00:00
lda #8
>SYSCALL PutChar.A
2015-03-14 21:48:35 +00:00
.9 rts
*--------------------------------------
CmdLine.SET >LDYA ZPCMDBuf
>SYSCALL PrintF.YA
rts
2015-10-19 20:35:00 +00:00
*--------------------------------------
.INB /A2OSX.SRC/SBIN/SHELL.S.CMD
.INB /A2OSX.SRC/SBIN/SHELL.S.CSH
.INB /A2OSX.SRC/SBIN/SHELL.S.IO
.INB /A2OSX.SRC/SBIN/SHELL.S.HIS
2015-03-14 21:48:35 +00:00
*--------------------------------------
CS.END
*--------------------------------------
ENV.PATH >CSTR "PATH"
ENV.PWD >CSTR "PWD"
ENV.PS1 >CSTR "PS1"
*--------------------------------------
INTCMDS >CSTR "CD"
>CSTR "DATE"
>CSTR "ECHO"
>CSTR "EXIT"
>CSTR "PAUSE"
>CSTR "PWD"
>CSTR "READ"
>CSTR "SET"
>CSTR "SLEEP"
>CSTR "STARTPROC"
>CSTR "TIME"
2015-10-19 20:35:00 +00:00
.HS 00
CSHCMDS >PSTR "IF"
>PSTR "WHILE"
>PSTR "BREAK"
>PSTR "CONTINUE"
>PSTR "CHAR"
>PSTR "INT"
>PSTR "LONG"
>PSTR "FLOAT"
.HS 00
2015-03-14 21:48:35 +00:00
*--------------------------------------
MSG.GREETINGS >CSTR "\r\nA2osX-Shell\r\n\r\n"
MSG.PROMPT >CSTR "%s$ "
MSG.ECHO >CSTR ">%s\r\n"
MSG.ERROR >CSTR "[$%h]:%S.\r\n"
MSG.PRINTENV >CSTR "%s=%s\r\n"
MSG.CSHERR >CSTR "Pos %D:"
FMT.DATE >CSTR "%A, %B %d %Y"
FMT.TIME >CSTR "%H:%M:%S (%I:%M:%S%p)"
*--------------------------------------
.INB /A2OSX.SRC/X.ERRORS.S
*--------------------------------------
EscChars >PSTR "DBAC"
2015-12-13 21:29:51 +00:00
EscAscii .HS 04080A0B15
TIME .BS S.TIME
STAT .BS S.STAT
CSH.TSIZE .HS 0001020405 00,CHAR,INT,LONG,FLOAT....
CSH.ACCT .BS 1
CSH.ACC .BS 5
CSH.ARGT .BS 1
CSH.ARG .BS 5
2015-03-14 21:48:35 +00:00
*--------------------------------------
2015-06-03 18:30:57 +00:00
.DUMMY
.OR 0
2015-03-14 21:48:35 +00:00
DS.START
hCmdBuf .BS 1
CmdBuflen .BS 1
bCmdBufexec .BS 1
2015-12-13 21:29:51 +00:00
bEscMode .BS 1
bPause .BS 1
bExit .BS 1
2016-01-10 22:19:11 +00:00
bEcho .BS 1
2015-12-13 21:29:51 +00:00
bExitOnEOF .BS 1
bReadMode .BS 1
bSecureRead .BS 1
Sleep .BS 4
CMD.hCmdLine .BS 1
CMD.hFullpath .BS 1
CMD.hExtCmdLine .BS 1
CMD.bStartProc .BS 1
CMD.VarName .BS VarLen.MAX+1
CMD.Stat .BS S.STAT
HIS.hBuf .BS 1
HIS.BufIndex .BS 1
HIS.BufEnd .BS 1
IO.hIn .BS 1
IO.hOut .BS 1
IO.hErr .BS 1
CSH.hBuf .BS 1
CSH.BufPtr .BS 2
CSH.BufLen .BS 2
CSH.BufPtrSave .BS 2
CSH.hSymbols .BS 1
CSH.SymbolsPtr .BS 1
CSH.hData .BS 1
CSH.DataPtr .BS 1
CSH.hStack .BS 1
CSH.StackPtr .BS 1
CSH.CmdSave .BS 1
CSH.Name .BS CSH.Name.MAX+1
DS.END .ED
2015-03-14 21:48:35 +00:00
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SBIN/SHELL.S
2015-03-14 21:48:35 +00:00
ASM