A2osX/SBIN/SHELL.S.txt

478 lines
8.5 KiB
Plaintext
Raw Normal View History

2015-03-14 21:48:35 +00:00
PR#3
2015-06-03 18:30:57 +00:00
PREFIX /A2OSX.SRC
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
2015-06-03 18:30:57 +00:00
.TF /A2OSX.BOOT/SBIN/SHELL
2015-03-14 21:48:35 +00:00
*--------------------------------------
.INB INC/MACROS.I
.INB INC/PRODOS.I
2015-06-03 18:30:57 +00:00
.INB INC/A2OSX.I
2015-03-14 21:48:35 +00:00
.INB INC/LIBSTR.I
*--------------------------------------
ZPPTR1 .EQ ZPBIN
ZPPTR2 .EQ ZPBIN+2
ZPPTR3 .EQ ZPBIN+4
*--------------------------------------
CmdBuffer.MAX .EQ 127
*--------------------------------------
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.LIBSTR .DA LIBSTR
L.MSG.GREETINGS .DA MSG.GREETINGS
L.MSG.ERROR .DA MSG.ERROR
2015-10-19 20:35:00 +00:00
L.ENV.PATH .DA ENV.PATH
2016-08-17 06:25:58 +00:00
L.CMD .DA CMD
L.ARGS .DA ARGS
L.CMDS .DA CMDS
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.READ
.DA Cmd.Exec.SET
.DA Cmd.Exec.STARTPROC
.DA Cmd.Exec.TIME
.DA Cmd.Exec.TYPE
2015-03-14 21:48:35 +00:00
.DA 0
*--------------------------------------
CS.INIT >LDYA L.LIBSTR
>SYSCALL SYS.LoadLibYA
2015-10-19 20:35:00 +00:00
bcs .9
2015-03-14 21:48:35 +00:00
sta hLIBSTR
2016-08-17 06:25:58 +00:00
>SYSCALL SYS.GetArgC
cmp #1
2015-10-19 20:35:00 +00:00
2016-08-17 06:25:58 +00:00
beq CS.INIT.INTERACTIVE no arg, continue starting interactive
lda #1
>SYSCALL SYS.GetArgA
jsr TXT.OpenFileYA
bcs .9
2015-10-19 20:35:00 +00:00
ldy #bExitOnEOF
lda #$FF
sta (pData),y
2015-10-19 20:35:00 +00:00
clc
.9 rts
*--------------------------------------
CS.INIT.INTERACTIVE
2016-08-17 06:25:58 +00:00
jsr HIS.Init
2015-10-19 20:35:00 +00:00
bcs .9
2015-03-14 21:48:35 +00:00
ldy #S.PS.hINDEV
2015-06-03 18:30:57 +00:00
lda (pPs),y
2015-03-14 21:48:35 +00:00
>PUSHA
>LDYA L.MSG.GREETINGS
>SYSCALL SYS.PSTROutYA
2015-03-14 21:48:35 +00:00
2015-06-03 18:30:57 +00:00
lda (pPs)
2015-03-14 21:48:35 +00:00
ora #S.PS.F.EVENT Now accept events
2015-06-03 18:30:57 +00:00
sta (pPs)
2015-10-19 20:35:00 +00:00
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
*--------------------------------------
2015-06-03 18:30:57 +00:00
CS.RUN lda #0
sta (pData)
2016-08-17 06:25:58 +00:00
.11 ldy #bPause
lda (pData),y
bpl .10
clc
rts
2015-03-14 21:48:35 +00:00
.10 ldy #hInputFile batch mode ?
lda (pData),y
bne .2
jsr PrintPrompt
bcs .99
.1 >SYSCALL SYS.Sleep
2015-06-24 20:41:38 +00:00
lda (pData)
bpl .1
2015-03-14 21:48:35 +00:00
and #$7F
2015-06-03 18:30:57 +00:00
sta (pData)
bra .3
2016-08-17 06:25:58 +00:00
.2 jsr TXT.ReadFile
bcs .81
2016-08-17 06:25:58 +00:00
.3 jsr CmdBuffer.Normalize
lda (pData)
beq .11 Empty line
2016-08-17 06:25:58 +00:00
ldy #hInputFile if batch mode, do not add to cmd history
lda (pData),y
2016-08-17 06:25:58 +00:00
bne .4
2016-08-17 06:25:58 +00:00
jsr HIS.Add
2016-08-17 06:25:58 +00:00
.4 >LDYA pData
jsr Cmd.ExecYA
bcc .8
2016-01-10 22:19:11 +00:00
tay
2016-08-17 06:25:58 +00:00
beq .8
jsr PrintError
2015-03-14 21:48:35 +00:00
.8 ldy #bEXIT
2015-06-03 18:30:57 +00:00
lda (pData),y
2015-03-14 21:48:35 +00:00
bne .99
2015-06-03 18:30:57 +00:00
2015-03-14 21:48:35 +00:00
clc
rts
2016-08-17 06:25:58 +00:00
.81 jsr TXT.CloseFile
ldy #bExitOnEOF
lda (pData),y
beq .8
lda #0
2015-03-14 21:48:35 +00:00
.99 sec
rts
*--------------------------------------
2015-06-03 18:30:57 +00:00
CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
2015-03-14 21:48:35 +00:00
lda (pEvent),y
ldy #S.PS.hINDEV
2015-06-03 18:30:57 +00:00
cmp (pPs),y
2015-03-14 21:48:35 +00:00
bne .9
2015-03-14 21:48:35 +00:00
lda (pEvent)
and #S.EVT.F.KEY is it a KEY event?
beq .9
ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
lda (pEvent),y
bne .9
ldy #S.EVT.DATALO
lda (pEvent),y
2015-06-03 18:30:57 +00:00
tax
ldy #bPause
lda (pData),y
bpl .11
lda #0
sta (pData),y
2015-12-13 21:29:51 +00:00
clc
rts
.9 sec
rts
.11 ldy #hInputFile Batch mode ?
lda (pData),y
beq .10
2015-12-13 21:29:51 +00:00
* Batch Mode
cpx #3 test Ctrl-c
bne .12
2016-08-17 06:25:58 +00:00
jsr TXT.CloseFile
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
2015-03-14 21:48:35 +00:00
jsr CS.EVENT.CTRL.CHAR
bra .8
2015-06-03 18:30:57 +00:00
.1 cpx #$7f
2015-03-14 21:48:35 +00:00
bne .2
jsr CmdBuffer.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 #CmdBuffer.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
>SYSCALL SYS.COutA
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
*--------------------------------------
CS.EVENT.CTRL.CHAR
cpx #13 CR
2015-03-14 21:48:35 +00:00
bne .10
txa
>SYSCALL SYS.COutA
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
2015-03-14 21:48:35 +00:00
jsr CmdBuffer.CLR
clc
rts
.1 cpx #8 BS (left arrow)
2015-03-14 21:48:35 +00:00
bne .2
jsr CmdBuffer.DEL
clc
rts
.2 cpx #10 LF (down arrow)
2015-03-14 21:48:35 +00:00
bne .3
2016-08-17 06:25:58 +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-08-17 06:25:58 +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
ldy #hInputFile
lda (pData),y
beq .1
>SYSCALL SYS.MLICloseA
.1 ldy #hInputBuffer
lda (pData),y
beq .2
>SYSCALL SYS.FreeMemA
.2 lda hLIBSTR
2016-08-17 06:25:58 +00:00
beq .8
2015-03-14 21:48:35 +00:00
>SYSCALL SYS.UnloadLibA
2016-08-17 06:25:58 +00:00
.8 clc
2015-03-14 21:48:35 +00:00
rts
*--------------------------------------
* PRIVATE
*--------------------------------------
PrintPrompt lda #'$'
>SYSCALL SYS.COutA
bcs .9
lda #' '
>SYSCALL SYS.COutA
.9 rts
*--------------------------------------
PrintError pha
>PUSHA
>LDYA L.MSG.ERROR
>SYSCALL SYS.PSTROutYA
pla
rts
*--------------------------------------
2016-08-17 06:25:58 +00:00
* 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
*--------------------------------------
2015-06-03 18:30:57 +00:00
CmdBuffer.PRINT ldy #0
.1 iny
lda (pData),y
>SYSCALL SYS.COutA
2015-06-03 18:30:57 +00:00
tya
cmp (pData)
2015-03-14 21:48:35 +00:00
bne .1
rts
*--------------------------------------
CmdBuffer.CLR jsr CmdBuffer.DEL
bne CmdBuffer.CLR
2015-10-19 20:35:00 +00:00
rts
2015-03-14 21:48:35 +00:00
*--------------------------------------
2015-06-03 18:30:57 +00:00
CmdBuffer.DEL lda (pData)
2015-03-14 21:48:35 +00:00
beq .9
lda #8
>SYSCALL SYS.COutA
2015-06-03 18:30:57 +00:00
lda (pData)
dec
sta (pData)
2015-03-14 21:48:35 +00:00
.9 rts
2015-10-19 20:35:00 +00:00
*--------------------------------------
.INB SBIN/SHELL.S.CMD
.INB SBIN/SHELL.S.HIS
2016-08-17 06:25:58 +00:00
.INB SBIN/SHELL.S.TXT
2015-03-14 21:48:35 +00:00
*--------------------------------------
CS.END
*--------------------------------------
2015-10-19 20:35:00 +00:00
ENV.PATH >PSTRING "PATH"
2015-03-14 21:48:35 +00:00
CMDS >PSTRING "CD"
2015-10-19 20:35:00 +00:00
>PSTRING "DATE"
>PSTRING "ECHO"
>PSTRING "EXIT"
>PSTRING "PAUSE"
>PSTRING "READ"
>PSTRING "SET"
2016-03-13 21:53:55 +00:00
>PSTRING "STARTPROC"
>PSTRING "TIME"
>PSTRING "TYPE"
2015-10-19 20:35:00 +00:00
.HS 00
2015-03-14 21:48:35 +00:00
*--------------------------------------
LIBSTR >PSTRING "libstr.o"
MSG.GREETINGS >PSTRING "\nA2osX-Shell on Dev=%h\n\n"
MSG.ERROR >PSTRING "[%h]\n"
2015-12-13 21:29:51 +00:00
EscChars >PSTRING "DBAC"
EscAscii .HS 04080A0B15
2016-08-17 06:25:58 +00:00
CMD .BS 256
ARGS .BS 256
2015-06-03 18:30:57 +00:00
hLIBSTR .BS 1
hNEWPATH .BS 1
2016-08-17 06:25:58 +00:00
hCmdLine .BS 1
Cmd.Exec.Mode .BS 1
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
2015-12-13 21:29:51 +00:00
CmdBuffer .BS CmdBuffer.MAX+1 (pData)
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
2015-06-24 20:41:38 +00:00
hCmdHistory .BS 1
2015-10-19 20:35:00 +00:00
CmdHistory.IDX .BS 1
2015-12-13 21:29:51 +00:00
CmdHistory.END .BS 1
hInputFile .BS 1
hInputArgs .BS 1
hInputBuffer .BS 1
2015-03-14 21:48:35 +00:00
DS.END
2015-06-03 18:30:57 +00:00
.ED
2015-03-14 21:48:35 +00:00
*--------------------------------------
MAN
SAVE SBIN/SHELL.S
ASM