A2osX/SBIN/SHELL.S.txt

640 lines
11 KiB
Plaintext
Raw Normal View History

2015-03-14 21:48:35 +00:00
PR#3
PREFIX /A2OSX.BUILD
2015-03-14 21:48:35 +00:00
NEW
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
*--------------------------------------
ZPPTR1 .EQ ZPBIN
ZPPTR2 .EQ ZPBIN+2
ZPPTR3 .EQ ZPBIN+4
ZPBufBase .EQ ZPBIN+6
ZPBufPtr .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
CSHERR.SYNTAX .EQ $7F
CSHERR.SOVERFLW .EQ $7E
CSHERR.NOVERFLW .EQ $7D
CSHERR.OOM .EQ $7C
CSHERR.DUP .EQ $7B
CSHERR.UNDEF .EQ $7A
CSHERR.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
.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.PSTRCR .DA MSG.PSTRCR
L.MSG.PSTR .DA MSG.PSTR
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
2016-08-17 06:25:58 +00:00
L.CMD .DA CMD
L.ARGS .DA ARGS
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
lda (pPs)
ora #S.PS.F.EVENT Now accept events
sta (pPs)
>SYSCALL GetArgC
2016-08-17 06:25:58 +00:00
cmp #1
2015-10-19 20:35:00 +00:00
beq .1 no arg, continue starting interactive
2016-08-17 06:25:58 +00:00
>PUSHWI 0 Aux type
>PUSHBI 4 S.FILEINFO.TYPE.TXT
>PUSHBI SYS.FOpen.R
2016-08-17 06:25:58 +00:00
lda #1
>SYSCALL GetArgA
>PUSHYA
>SYSCALL LoadFile
bcs .9
2015-10-19 20:35:00 +00:00
phy
ldy #CSH.BufLen+1
sta (pData),y
dey
pla
sta (pData),y
txa
ldy #CSH.hBuf
sta (pData),y
ldy #bExitOnEOF
lda #$FF
sta (pData),y
jmp CSH.Init
.1 jsr HIS.Init
2015-10-19 20:35:00 +00:00
bcs .9
>LDYA L.MSG.GREETINGS
>SYSCALL PrintFYA
2015-03-14 21:48:35 +00:00
* clc
2015-10-19 20:35:00 +00:00
.9 rts
2015-03-14 21:48:35 +00:00
*--------------------------------------
CS.RUN ldy #VarBuffer READ Command ?
lda (pData),y
bne CS.RUN.READ
ldy #S.PS.RC
lda (pPs),y
beq .11
jsr IO.PrintErrMsg
bcs CS.RUN.EXIT.RTS
.11 ldy #bPause
lda (pData),y
bpl .13
>SYSCALL GetChar
bcs .8
.13 jsr CheckSleep
bne .8
ldy #CSH.hBuf batch mode ?
lda (pData),y
beq .10
jmp CS.RUN.BATCH
.10 lda #0
sta (pData)
ldy #bSecureRead
sta (pData),y
.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
jsr CS.CHARIN
2015-06-24 20:41:38 +00:00
lda (pData)
bpl .1
2017-01-12 17:43:45 +00:00
and #$7F
2015-06-03 18:30:57 +00:00
sta (pData)
jsr Cmd.Normalize
2016-08-17 06:25:58 +00:00
lda (pData)
beq .12 Empty line
2016-08-17 06:25:58 +00:00
jsr HIS.Add
>LDYA pData
2016-08-17 06:25:58 +00:00
jsr Cmd.ExecYA
ldy #S.PS.RC
sta (pPs),y
2015-03-14 21:48:35 +00:00
ldy #bEXIT
2015-06-03 18:30:57 +00:00
lda (pData),y
bne CS.RUN.EXIT
2015-06-03 18:30:57 +00:00
.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 #0
sta (pData)
.1 >SYSCALL Sleep
>SYSCALL GetChar
bcs .1 no char
jsr CS.CHARIN
lda (pData)
bpl .1
and #$7F
sta (pData)
>PUSHW pData
lda #VarBuffer
clc
adc pData
tay
lda pData+1
adc #0
>PUSHYA
>SYSCALL SetEnv
php
pha
ldy #VarBuffer
lda #0
sta (pData),y
pla
plp
rts
*--------------------------------------
CS.RUN.BATCH jsr CSH.Run
bcs .9
lda (pData)
beq .8 Empty line....nothing to do....
jsr Cmd.Normalize
lda (pData)
beq .8
>LDYA pData
jsr Cmd.ExecYA
.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 PrintFYA
jsr CSH.RestorePtr
.90 jsr CSH.GetChar
bcs .92
>SYSCALL PutCharA
.91 jsr CSH.GetNextChar
bcs .92
cmp #13
beq .92
>SYSCALL PutCharA
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
ldy #CSH.hBuf Batch mode ?
lda (pData),y
beq .10
2015-12-13 21:29:51 +00:00
* Batch Mode
cpx #3 test Ctrl-c
bne .12
ldy #bExitOnEOF
lda (pData),y
ldy #bExit
sta (pData),y
clc
rts
.12 cpx #19 test Ctrl-s
bne .8
ldy #bPause
lda #$80
sta (pData),y
2015-12-13 21:29:51 +00:00
clc
rts
* interactive mode
.10 ldy #bEscMode
lda (pData),y
beq .13
cpx #'['
beq .8
lda #0
sta (pData),y
txa
ldx EscChars
.17 cmp EscChars,x
beq .18
dex
bne .17
bra .8
2015-12-13 21:29:51 +00:00
.18 lda EscAscii,x
tax
.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
2015-06-03 18:30:57 +00:00
.2 lda (pData) CmdBuffer
cmp #CmdLine.MAX
2015-03-14 21:48:35 +00:00
beq .8
2015-06-03 18:30:57 +00:00
inc
sta (pData)
tay
txa
sta (pData),y
tax
ldy #bSecureRead
lda (pData),y
bne .8
txa
>SYSCALL PutCharA
2015-03-14 21:48:35 +00:00
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 PutCharA
lda #10
>SYSCALL PutCharA
2015-06-03 18:30:57 +00:00
lda (pData) CmdBuffer
2015-03-14 21:48:35 +00:00
ora #$80
2015-06-03 18:30:57 +00:00
sta (pData)
2015-03-14 21:48:35 +00:00
clc
rts
2015-12-13 21:29:51 +00:00
.10 cpx #$1B esc
bne .11
ldy #bEscMode
lda #$ff
sta (pData),y
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
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 GetMemPtrA
>PUSHYA
>PUSHW L.ENV.PWD
>SYSCALL SetEnv
rts
*--------------------------------------
PrintPrompt >LDYA L.ENV.PS1
>SYSCALL GetEnvYA
>SYSCALL ExpandPStrYA
phx
>PUSHYA
>LDYA L.MSG.PROMPT
>SYSCALL PrintFYA
plx
php
pha
txa
>SYSCALL FreeMemA
pla
plp
.9 rts
*--------------------------------------
CmdLine.CLR lda (pData)
beq .9
tay
lda #8
.1 sta (pData),y
dey
bne .1
jsr CmdLine.SET
lda #0
sta (pData)
.9 rts
2015-03-14 21:48:35 +00:00
*--------------------------------------
CmdLine.DEL lda (pData)
2015-03-14 21:48:35 +00:00
beq .9
2015-03-14 21:48:35 +00:00
lda #8
>SYSCALL PutCharA
2015-06-03 18:30:57 +00:00
lda (pData)
dec
sta (pData)
2015-03-14 21:48:35 +00:00
.9 rts
*--------------------------------------
CmdLine.SET >PUSHW pData
>LDYA L.MSG.PSTR
>SYSCALL PrintfYA
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 >PSTR "PATH"
ENV.PWD >PSTR "PWD"
ENV.PS1 >PSTR "PS1"
INTCMDS >PSTR "CD"
>PSTR "DATE"
>PSTR "ECHO"
>PSTR "EXIT"
>PSTR "PAUSE"
>PSTR "PWD"
>PSTR "READ"
>PSTR "SET"
>PSTR "SLEEP"
>PSTR "STARTPROC"
>PSTR "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.PSTRCR >CSTR "%S\r\n"
MSG.PSTR >CSTR "%S"
MSG.ERROR >CSTR "Err:%S [%h]\r\n"
MSG.PRINTENV >CSTR "%S=%S\r\n"
MSG.CSHERR >PSTR "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
2016-08-17 06:25:58 +00:00
CMD .BS 256
ARGS .BS 256
TIME .BS S.TIME
STAT .BS S.STAT
bStartProc .BS 1
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
CmdBuffer .BS CmdLine.MAX+1 (pData)
VarBuffer .BS VarLen.MAX+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
bSecureRead .BS 1
2015-12-13 21:29:51 +00:00
bExitOnEOF .BS 1
Sleep .BS 4
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