A2osX/BIN/SH.S.txt

783 lines
14 KiB
Plaintext
Raw Normal View History

2017-12-22 21:24:30 +00:00
NEW
2019-07-07 20:48:57 +00:00
AUTO 4,1
2015-10-19 20:35:00 +00:00
.LIST OFF
2015-03-14 21:48:35 +00:00
.OP 65C02
.OR $2000
2019-02-07 16:52:25 +00:00
.TF BIN/SH
2018-11-10 14:30:09 +00:00
*--------------------------------------
2019-04-01 06:07:56 +00:00
HISTORY.MAX .EQ 256
2019-04-01 15:24:01 +00:00
CORE.STACK.MAX .EQ 128
2019-07-31 05:42:04 +00:00
PUSHD.STACK.MAX .EQ 4
*--------------------------------------
2019-04-03 11:46:50 +00:00
C... .EQ 0
C.. .EQ 1
C.CD .EQ 2
C.NOHUP .EQ 3
C.DATE .EQ 4
C.ECHO .EQ 5
C.EXIT .EQ 6
C.GETKEY .EQ 7
C.MD .EQ 8
C.PAUSE .EQ 9
C.PWD .EQ 10
C.RD .EQ 11
C.READ .EQ 12
C.REN .EQ 13
C.SET .EQ 14
C.SLEEP .EQ 15
C.SHIFT .EQ 16
C.TIME .EQ 17
C.PUSHD .EQ 18
C.POPD .EQ 19
C.FUNC .EQ 20
2019-04-04 15:44:20 +00:00
C.CALL .EQ 21
C.BREAK .EQ 22
C.SWITCH .EQ 23
C.CASE .EQ 24
C.DEFAULT .EQ 25
2019-04-01 06:07:56 +00:00
*--------------------------------------
2019-05-31 20:04:41 +00:00
C.FOR .EQ 26
2019-03-06 16:29:51 +00:00
C.FOR.LIST .EQ 0
C.FOR.FILE .EQ 2
C.FOR.EXEC .EQ 4
2019-05-31 20:04:41 +00:00
C.WHILE .EQ 27
C.IF .EQ 28
C.NEXT .EQ 29
C.LOOP .EQ 30
C.ELSE .EQ 31
C.FI .EQ 32
C.END .EQ 33
2018-11-19 16:15:16 +00:00
*--------------------------------------
2018-11-28 11:39:33 +00:00
E.CSYN .EQ $C0
2019-02-12 16:47:34 +00:00
E.ESYN .EQ $C1
E.STACKERROR .EQ $C2
2018-11-28 11:39:33 +00:00
E.STKOVERFLOW .EQ $C3
E.NOWHILE .EQ $C4
E.NOFOR .EQ $C5
E.NOIF .EQ $C6
E.BADEXP .EQ $C7
E.BADFTYPE .EQ $C8
2019-06-04 15:49:58 +00:00
E.FUNDEF .EQ $C9
2015-03-14 21:48:35 +00:00
*--------------------------------------
2018-07-23 15:28:42 +00:00
.INB INC/MACROS.I
.INB INC/A2OSX.I
2018-10-15 06:25:40 +00:00
.INB INC/MLI.I
2018-10-02 15:52:30 +00:00
.INB INC/MLI.E.I
2015-03-14 21:48:35 +00:00
*--------------------------------------
2019-01-21 06:52:04 +00:00
.DUMMY
2019-01-18 16:06:44 +00:00
.OR ZPBIN
ZS.START
ZPCLBuf .BS 2
2019-02-06 16:20:51 +00:00
ZPInputBuf .BS 2
2019-02-04 14:29:52 +00:00
ZPInputBufPtr .BS 2
2019-02-06 16:20:51 +00:00
ZPInputCmdPtr .BS 2
2019-01-26 21:46:39 +00:00
ZPArgVBuf .BS 2
2019-02-12 16:47:34 +00:00
ZPArgVBufPrev .BS 2
2019-02-03 21:58:26 +00:00
ZPArgVBufPtr .BS 2
2019-02-06 16:20:51 +00:00
ZPVarNamePtr .BS 2
2019-04-01 06:07:56 +00:00
2019-07-31 15:10:59 +00:00
CORE.IntCmd .BS 1
CORE.Operator .BS 1
CORE.LogicOp .BS 1
CORE.TestResult .BS 1
CORE.PrevTestResult .BS 1
2019-04-01 06:07:56 +00:00
M32.ACC .BS 4
2019-04-02 15:28:50 +00:00
ZPPtr1 .BS 2
ZPPtr2 .BS 2
2019-07-31 15:10:59 +00:00
ZPTmpW .BS 2
2019-04-02 15:28:50 +00:00
2019-01-18 16:06:44 +00:00
ZS.END .ED
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
2018-09-17 06:16:45 +00:00
.DA #S.PS.F.EVENT S.PS.F
.DA #0
2019-01-18 16:06:44 +00:00
.DA CS.END-CS.START Code Size (without Constants)
.DA DS.END-DS.START Data SegmentSize
.DA #64 Stack Size
.DA #ZS.END-ZS.START Zero Page Size
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
2019-05-12 20:45:11 +00:00
L.MSG.PROMPTCRLF .DA MSG.PROMPTCRLF
2018-11-10 14:30:09 +00:00
L.MSG.TRACE .DA MSG.TRACE
2018-09-09 08:11:42 +00:00
L.MSG.ECHOCRLF .DA MSG.ECHOCRLF
2019-06-04 15:49:58 +00:00
L.MSG.BATCHLINE .DA MSG.BATCHLINE
2018-11-10 14:30:09 +00:00
L.MSG.BATCHERR .DA MSG.BATCHERR
L.MSG.ERROR .DA MSG.ERROR
L.MSG.PRINTENV .DA MSG.PRINTENV
L.MSG.PID .DA MSG.PID
L.FMT.DATE .DA FMT.DATE
L.FMT.TIME .DA FMT.TIME
2019-01-23 16:26:48 +00:00
L.FMT.GETKEY .DA FMT.GETKEY
J.ESC .DA CL.BS left arrow
.DA HIS.GetNext
.DA HIS.GetPrev
2019-07-19 06:41:33 +00:00
.DA CL.NAK right arrow
2019-05-31 07:31:41 +00:00
L.IN .DA IN
2019-02-11 06:58:33 +00:00
L.CMD .DA CMD
2019-06-07 15:02:51 +00:00
L.ENDCMD .DA ENDCMD
2019-04-03 11:46:50 +00:00
J.CMD .DA CMD...
.DA CMD..
2019-02-01 16:32:29 +00:00
.DA CMD.CD
2019-04-03 11:46:50 +00:00
.DA CMD.NOHUP
2019-02-01 16:32:29 +00:00
.DA CMD.DATE
.DA CMD.ECHO
.DA CMD.EXIT
.DA CMD.GETKEY
.DA CMD.MD
.DA CMD.PAUSE
.DA CMD.PWD
.DA CMD.RD
.DA CMD.READ
.DA CMD.REN
.DA CMD.SET
.DA CMD.SLEEP
.DA CMD.SHIFT
.DA CMD.TIME
.DA CMD.PUSHD
.DA CMD.POPD
2019-03-08 16:36:21 +00:00
.DA CMD.FUNC
2019-04-01 06:07:56 +00:00
.DA CMD.CALL
2019-03-12 16:50:16 +00:00
.DA CMD.BREAK
2019-03-08 16:36:21 +00:00
.DA CMD.SWITCH
.DA CMD.CASE
.DA CMD.DEFAULT
2019-02-01 16:32:29 +00:00
.DA CMD.FOR
.DA CMD.WHILE
.DA CMD.IF
2019-03-04 16:44:33 +00:00
.DA CMD.NEXT
.DA CMD.LOOP
2019-02-01 16:32:29 +00:00
.DA CMD.ELSE
.DA CMD.FI
2019-05-31 20:04:41 +00:00
.DA CMD.END
2019-03-06 16:29:51 +00:00
J.NEXT .DA CMD.NEXT.LIST
.DA CMD.NEXT.FILE
.DA CMD.NEXT.EXEC
2019-02-11 06:58:33 +00:00
L.CORE.IO .DA CORE.IO
J.CORE.IO .DA CORE.IO.AMP
.DA CORE.IO.IN
.DA CORE.IO.OUTA
.DA CORE.IO.OUT
.DA CORE.IO.1OUTA
.DA CORE.IO.1OUT
.DA CORE.IO.2OUTA
.DA CORE.IO.2OUT
2019-02-01 16:32:29 +00:00
L.EXP.BEGIN .DA EXP.BEGIN
L.EXP.OP.UNARY .DA EXP.OP.UNARY
J.EXP.OP.UNARY .DA EXP.OP.UNARY.D
.DA EXP.OP.UNARY.E
.DA EXP.OP.UNARY.F
2019-02-14 14:51:24 +00:00
.DA EXP.OP.UNARY.N
.DA EXP.OP.UNARY.Z
2019-02-01 16:32:29 +00:00
L.EXP.OP.BINARY .DA EXP.OP.BINARY
L.EXP.OP.MATH .DA EXP.OP.MATH
2019-04-01 06:07:56 +00:00
L.EXP.OP.LOGIC .DA EXP.OP.LOGIC
2019-04-16 15:54:56 +00:00
L.HOME .DA HOME
2019-01-23 16:26:48 +00:00
L.HOME.PROFILE .DA HOME.PROFILE
2019-04-16 15:54:56 +00:00
L.PS1 .DA PS1
2018-11-22 16:39:41 +00:00
L.M32.Printf .DA M32.Printf
L.ERR.Codes .DA ERR.Codes
L.ERR.Messages .DA ERR.Messages
2015-03-14 21:48:35 +00:00
.DA 0
*--------------------------------------
2018-11-10 14:30:09 +00:00
CS.INIT clc
CS.INIT.RTS rts
*--------------------------------------
2019-02-01 16:32:29 +00:00
CS.RUN jsr CL.Init
jsr CORE.Init
2019-05-03 13:08:12 +00:00
2018-11-22 16:39:41 +00:00
ldy #S.PS.ARGC
lda (pPS),y
beq .1 no arg, continue starting interactive
2019-02-11 06:58:33 +00:00
2019-04-03 11:46:50 +00:00
lda #$ff
>STA.G bExitOnEOF
2019-04-02 15:28:50 +00:00
lda #0
jsr CMD.SHIFTA Remove $0=/bin/sh
ldy #S.PS.hARGV
lda (pPS),y
>SYSCALL GetMemPtr
2019-04-03 11:46:50 +00:00
2019-04-04 15:44:20 +00:00
jsr IO.Load
2019-04-01 06:07:56 +00:00
bcs CS.INIT.RTS
2019-04-04 15:44:20 +00:00
phx
ldy #S.PS.hARGV
lda (pPS),y
>SYSCALL GetMemPtr
plx
2019-08-05 13:30:58 +00:00
jsr CORE.Load.YAX
2018-11-10 14:30:09 +00:00
bra CS.RUN.LOOP
2019-05-03 13:08:12 +00:00
*--------------------------------------
2019-02-01 16:32:29 +00:00
.1 jsr CMD.CD.HOME
2018-11-21 13:08:11 +00:00
jsr HIS.Init
2018-11-10 14:30:09 +00:00
bcs CS.INIT.RTS
2018-08-25 11:23:59 +00:00
>PUSHWI K.VER
2018-08-22 15:23:27 +00:00
>PUSHBI 2
>LDYA L.MSG.GREETINGS
2018-06-21 15:12:10 +00:00
>SYSCALL printf
2019-01-23 16:26:48 +00:00
bcs CS.INIT.RTS
2019-07-19 14:05:22 +00:00
2019-01-30 16:23:00 +00:00
>PUSHEA.G StatBuf
2019-01-23 16:26:48 +00:00
>LDYA L.HOME.PROFILE
>SYSCALL STAT
2019-04-01 06:07:56 +00:00
bcs CS.RUN.LOOP no profile...
2019-01-23 22:03:10 +00:00
>LDYA L.HOME.PROFILE
2019-04-04 15:44:20 +00:00
jsr IO.Load
bcs CS.RUN.LOOP
>LDYA L.HOME.PROFILE
2019-08-05 13:30:58 +00:00
jsr CORE.Load.YAX exec profile and continue
2019-04-01 06:07:56 +00:00
* bcs CS.RUN.LOOP
2015-03-14 21:48:35 +00:00
*--------------------------------------
2019-02-21 14:34:35 +00:00
CS.RUN.LOOP >SLEEP
2019-02-21 14:34:35 +00:00
.1 jsr CheckSleep
beq .3
2019-04-03 15:52:24 +00:00
>LDA.G bSET.C
bne CS.RUN.LOOP
2019-02-21 16:26:21 +00:00
ldy #S.PS.hStdIn
lda (pPS),y
2019-02-21 14:34:35 +00:00
>SYSCALL feof
bcs .9
2018-11-12 14:48:28 +00:00
2019-02-21 14:34:35 +00:00
tay
2019-06-01 11:59:41 +00:00
bne CS.RUN.LOOP
2018-11-12 14:48:28 +00:00
2019-02-21 14:34:35 +00:00
>SYSCALL GetChar
bcs .9 I/O err
2018-11-12 14:48:28 +00:00
2019-02-21 14:34:35 +00:00
cmp #3 Ctrl-C
bne CS.RUN.LOOP
2019-01-23 16:26:48 +00:00
2019-04-05 05:59:06 +00:00
lda (pData) batch mode ?
2019-02-21 14:34:35 +00:00
beq CS.RUN.LOOP
>LDA.G bSET.C
beq .8
bra CS.RUN.LOOP
2018-11-12 14:48:28 +00:00
.3 >LDA.G bPause
bpl .6
2019-02-20 06:30:36 +00:00
.4 >SYSCALL GetChar
bcs .9 I/O err
2018-11-10 14:30:09 +00:00
2018-11-12 14:48:28 +00:00
.5 cmp #3 Ctrl-C
bne .60
2019-04-05 05:59:06 +00:00
lda (pData) batch mode ?
2019-01-23 16:26:48 +00:00
beq .61
>LDA.G bSET.C
beq .8
bra .61
2018-11-12 14:48:28 +00:00
2019-05-02 15:59:11 +00:00
.60 tax
>LDA.G bPause
asl
bpl .61 not from PAUSE command
cpx #C.CR
2018-11-12 14:48:28 +00:00
bne .4
2018-11-10 14:30:09 +00:00
.61 >STZ.G bPause
bra .62
2019-02-15 16:38:17 +00:00
.6 >LDA.G bReadMode read mode ?
2018-11-12 14:48:28 +00:00
bne .7
2019-04-05 05:59:06 +00:00
.62 lda (pData) batch mode ?
2018-12-03 06:59:30 +00:00
beq CS.RUN.INTERACTIVE
2019-04-05 13:02:42 +00:00
jmp CS.RUN.BATCH
2018-11-10 14:30:09 +00:00
.7 jmp CS.RUN.READ
2018-11-07 16:11:02 +00:00
2018-11-12 14:48:28 +00:00
.8 lda #3 User Interrupt
2019-02-20 06:30:36 +00:00
sec
.9 rts
2018-11-10 14:30:09 +00:00
*--------------------------------------
2018-12-03 06:59:30 +00:00
CS.RUN.INTERACTIVE
2019-04-05 13:02:42 +00:00
>LDA.G bExitOnEOF
beq .10
jmp CS.RUN.LOOP.EXIT
2019-02-19 11:30:45 +00:00
2019-02-26 16:50:42 +00:00
.10 jsr IO.Reset
jsr CL.Reset
2018-09-25 06:25:32 +00:00
jsr CL.PrintPrompt
bcs .9
2019-02-20 06:30:36 +00:00
.1 >SYSCALL GetChar
bcs .9 I/O error
2018-11-12 14:48:28 +00:00
.2 cmp #C.EOF ....or Ctrl-D
beq .9 CS
2018-09-19 15:25:42 +00:00
2018-07-19 15:33:55 +00:00
jsr CL.CHARIN
2017-01-12 17:43:45 +00:00
2019-02-06 16:20:51 +00:00
>LDA.G CL.bReady Something to execute ?
2015-06-24 20:41:38 +00:00
bpl .1
2019-02-18 12:52:10 +00:00
>PUSHBI 0
2019-05-12 20:45:11 +00:00
>LDYA L.MSG.PROMPTCRLF
2019-02-18 12:52:10 +00:00
>SYSCALL printf
bcs .9
lda (ZPCLBuf)
2018-11-12 14:48:28 +00:00
beq .8 Empty line
2018-10-29 08:41:10 +00:00
2018-10-23 15:36:57 +00:00
jsr HIS.Add
2019-02-04 14:29:52 +00:00
>LDYA ZPCLBuf
2019-02-06 16:20:51 +00:00
>SYSCALL strdup
bcs .8
2019-04-01 15:24:01 +00:00
2019-04-02 15:28:50 +00:00
phx
ldy #S.PS.hARGV
lda (pPS),y
>SYSCALL GetMemPtr Y,A =ARGV
plx
2019-08-05 13:30:58 +00:00
jsr CORE.Load.YAX X = Copy of CL
2019-02-04 14:29:52 +00:00
2019-02-19 11:30:45 +00:00
.6 jsr CORE.Run
2019-02-01 16:32:29 +00:00
2019-02-20 06:30:36 +00:00
.8 jmp CS.RUN.LOOP.END
.9 rts
*--------------------------------------
2019-02-06 16:20:51 +00:00
CS.RUN.READ jsr CL.RESET
2019-02-20 06:30:36 +00:00
.1 >SYSCALL GetChar
2019-02-21 14:34:35 +00:00
bcs CS.RUN.READ.9
2019-02-20 06:30:36 +00:00
jsr CL.CHARIN
2019-02-06 16:20:51 +00:00
>LDA.G CL.bReady
bpl .1
2019-03-06 16:29:51 +00:00
lda (ZPCLBuf)
bne .2
2019-02-15 16:38:17 +00:00
>LDYA ZPVarNamePtr
>SYSCALL UnSetEnv
bra .7
2018-09-17 06:16:45 +00:00
.2 >PUSHW ZPCLBuf
2019-02-15 16:38:17 +00:00
>LDYA ZPVarNamePtr
>SYSCALL SetEnv
2018-09-17 06:16:45 +00:00
.7 php
pha
2019-02-06 16:20:51 +00:00
2019-02-15 16:38:17 +00:00
>STZ.G bReadMode
>STA.G bREAD.S
pla
plp
2018-11-10 14:30:09 +00:00
.8 jmp CS.RUN.LOOP.END
2019-02-21 14:34:35 +00:00
CS.RUN.READ.9 rts
*--------------------------------------
2019-04-03 15:52:24 +00:00
CS.RUN.BATCH >LDA.G bSET.C
bne .2
2019-04-01 15:24:01 +00:00
ldy #S.PS.hStdIn
lda (pPS),y
>SYSCALL feof
bcs .2 unsupported
2019-02-21 14:34:35 +00:00
2019-04-01 15:24:01 +00:00
tay
2019-05-02 09:52:32 +00:00
bne .2
2019-02-21 14:34:35 +00:00
2019-04-01 15:24:01 +00:00
>SYSCALL GetChar
bcs CS.RUN.READ.9
2019-04-01 15:24:01 +00:00
cmp #3 test Ctrl-c
bne .1
2019-04-03 15:52:24 +00:00
bra CS.RUN.LOOP.END CS
2019-04-01 15:24:01 +00:00
.1 cmp #19 test Ctrl-s
bne .2
2019-04-01 15:24:01 +00:00
lda #$80
>STA.G bPause
clc
jmp CS.RUN.LOOP.END
2019-02-11 16:44:56 +00:00
.2 >LDA.G bSET.X
beq .5
2018-12-03 06:59:30 +00:00
2019-02-11 16:44:56 +00:00
ldy #$ff
.3 iny
lda (ZPInputBufPtr),y
sta (ZPArgVBuf),y
beq .4
eor #C.CR
bne .3
sta (ZPArgVBuf),y
.4 >PUSHW ZPArgVBuf
>PUSHBI 2
>LDYA L.MSG.TRACE
>SYSCALL printf
2019-02-20 16:07:43 +00:00
bcs CS.RUN.LOOP.RTS
2019-02-01 16:32:29 +00:00
2019-02-11 16:44:56 +00:00
.5 jsr CORE.Run
bcc CS.RUN.LOOP.END
2019-02-01 16:32:29 +00:00
2019-02-21 16:26:21 +00:00
tay 0 = EOF
bne CS.RUN.LOOP.END
2019-04-03 15:52:24 +00:00
2019-04-05 13:02:42 +00:00
lda #0
2019-04-01 06:07:56 +00:00
sec
2019-02-11 16:44:56 +00:00
2018-11-10 14:30:09 +00:00
CS.RUN.LOOP.END ldy #S.PS.RC
sta (pPs),y
2019-04-05 13:02:42 +00:00
bcc CS.RUN.LOOP.80
2019-02-04 14:29:52 +00:00
tay
2019-04-05 13:02:42 +00:00
beq CS.RUN.LOOP.80
2019-04-02 15:28:50 +00:00
>LDA.G bSET.E
2019-04-05 13:02:42 +00:00
bmi CS.RUN.LOOP.80
2018-11-10 14:30:09 +00:00
jsr IO.PrintBatchErrMsg
bcs CS.RUN.LOOP.RTS
2019-04-05 13:02:42 +00:00
ldy #S.PS.RC
2018-11-10 14:30:09 +00:00
lda (pPs),y
2018-11-10 14:30:09 +00:00
jsr IO.PrintErrMsg
bcs CS.RUN.LOOP.RTS
2019-04-05 13:02:42 +00:00
CS.RUN.LOOP.80 lda (pData)
bne .8
2019-02-06 16:20:51 +00:00
2019-04-05 13:02:42 +00:00
>LDA.G bExitOnEOF
bmi CS.RUN.LOOP.EXIT
.8 jmp CS.RUN.LOOP
2018-11-10 14:30:09 +00:00
2019-04-05 13:02:42 +00:00
CS.RUN.LOOP.EXIT
2018-12-05 15:12:10 +00:00
ldy #S.PS.RC
lda (pPs),y
sec
2018-11-10 14:30:09 +00:00
CS.RUN.LOOP.RTS 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
2018-11-12 14:48:28 +00:00
ldx #4
clc
.1 lda (pData),y
sbc #0
sta (pData),y
iny
2018-11-12 14:48:28 +00:00
dex
bne .1
.9 sec
2015-12-13 21:29:51 +00:00
rts
2017-01-12 17:43:45 +00:00
*--------------------------------------
2019-04-01 15:24:01 +00:00
CS.QUIT jsr HIS.Quit
2019-01-31 16:34:02 +00:00
jsr CL.Quit
2019-02-01 16:32:29 +00:00
jsr CORE.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
*--------------------------------------
2019-02-03 21:58:26 +00:00
RemoveStrFromArgV
>STYA ZPPtr1
>STYA ZPPtr2
2019-08-05 13:30:58 +00:00
jsr GetPtr1LenY
2019-02-03 21:58:26 +00:00
2019-07-31 05:42:04 +00:00
.2 jsr AddYp1Ptr1
2019-07-31 15:10:59 +00:00
jsr StrCpyPtr1Ptr2
2019-07-31 05:42:04 +00:00
2019-02-03 21:58:26 +00:00
tya
beq .8
2019-08-05 13:30:58 +00:00
jsr AddAp1Ptr2
2019-02-03 21:58:26 +00:00
bra .2
.8 rts
2019-03-05 16:49:34 +00:00
*--------------------------------------
2019-07-31 05:42:04 +00:00
GetPtr1Next lda (ZPPtr1)
2019-07-31 15:10:59 +00:00
beq IncPtr1.8
IncPtr1 inc ZPPtr1
bne IncPtr1.8
2019-07-31 05:42:04 +00:00
inc ZPPtr1+1
2019-07-31 15:10:59 +00:00
IncPtr1.8 rts
2019-07-31 05:42:04 +00:00
*--------------------------------------
2019-08-05 13:30:58 +00:00
GetPtr1LenY ldy #$ff
2019-07-31 05:42:04 +00:00
.1 iny
lda (ZPPtr1),y
bne .1
rts
*--------------------------------------
AddYp1Ptr1 tya
2019-07-31 15:10:59 +00:00
AddAp1Ptr1 sec
.HS 90 BCC
AddAPtr1 clc
2019-07-31 05:42:04 +00:00
adc ZPPtr1
sta ZPPtr1
bcc .8
inc ZPPtr1+1
.8 rts
*--------------------------------------
2019-08-05 13:30:58 +00:00
AddAp1Ptr2 sec
adc ZPPtr2
sta ZPPtr2
bcc .8
inc ZPPtr1+2
.8 rts
*--------------------------------------
2019-07-31 15:10:59 +00:00
StrCpyPtr1Ptr2 ldy #$ff
.1 iny
lda (ZPPtr1),y
sta (ZPPtr2),y
bne .1
rts
*--------------------------------------
2019-03-05 16:49:34 +00:00
ToUpperCase cmp #'a'
bcc .8
cmp #'z'+1
bcs .8
eor #$20
.8 clc exit CC to allow Jmp to
rts
*--------------------------------------
2019-02-08 16:13:43 +00:00
.INB USR/SRC/BIN/SH.S.CL
.INB USR/SRC/BIN/SH.S.HIS
.INB USR/SRC/BIN/SH.S.CORE
.INB USR/SRC/BIN/SH.S.IO
.INB USR/SRC/BIN/SH.S.CMD
.INB USR/SRC/BIN/SH.S.EXP
2015-03-14 21:48:35 +00:00
*--------------------------------------
CS.END
*--------------------------------------
2019-02-08 16:13:43 +00:00
MSG.GREETINGS .AZ "\r\nA2osX-SH %d.%d\r\n\r\n"
2019-05-25 19:24:07 +00:00
MSG.PROMPT .AZ "\e[?7h$ " Enable Line Wrap
MSG.PROMPTCRLF .AZ "\e[?7l\r\n" Disable Line Wrap
2019-06-04 15:49:58 +00:00
MSG.TRACE .AS ">"
MSG.BATCHLINE .AZ "%s\r\n"
MSG.BATCHERR .AZ "%s^\r\nLine #%D:"
2018-11-27 21:26:03 +00:00
MSG.ERROR .AS "[$%h]:%S."
MSG.ECHOCRLF .AZ "\r\n"
2018-11-20 15:54:49 +00:00
MSG.PRINTENV .AZ "%s = %s\r\n"
MSG.PID .AZ "PID=%d\r\n"
2018-09-17 06:16:45 +00:00
FMT.DATE .AZ "%A (%w), %B %d %Y"
FMT.TIME .AZ "%H:%M:%S (%I:%M:%S%p)"
2019-07-31 15:10:59 +00:00
FMT.GETKEY .AZ "%d"
M32.Printf .AZ "%L"
2018-09-17 06:16:45 +00:00
*--------------------------------------
2019-04-16 15:54:56 +00:00
HOME .AZ "${HOME}"
2019-01-23 16:26:48 +00:00
HOME.PROFILE .AZ "${HOME}PROFILE"
2019-04-16 15:54:56 +00:00
PS1 .AZ "${PS1}"
2019-04-02 15:28:50 +00:00
.HS 00 To Make It ArgV
*--------------------------------------
2019-07-31 15:10:59 +00:00
EscChars .AS 'DBAC'
EscChars.Cnt .EQ *-EscChars
EscChars.Remap .DA #C.BS,#C.VT,#C.LF,#C.FS
*--------------------------------------
2019-05-31 07:31:41 +00:00
IN .AZ "IN"
*--------------------------------------
2019-04-03 11:46:50 +00:00
CMD .AZ ".."
.AZ "."
2018-10-21 20:54:07 +00:00
.AZ "CD"
2019-04-03 11:46:50 +00:00
.AZ "NOHUP"
.AZ "DATE"
.AZ "ECHO"
.AZ "EXIT"
2019-01-23 16:26:48 +00:00
.AZ "GETKEY"
2018-11-10 14:30:09 +00:00
.AZ "MD"
.AZ "PAUSE"
.AZ "PWD"
2018-11-10 14:30:09 +00:00
.AZ "RD"
.AZ "READ"
2018-11-15 15:04:14 +00:00
.AZ "REN"
.AZ "SET"
.AZ "SLEEP"
2018-11-20 15:54:49 +00:00
.AZ "SHIFT"
.AZ "TIME"
2018-11-26 06:57:11 +00:00
.AZ "PUSHD"
.AZ "POPD"
2019-03-08 16:36:21 +00:00
.AZ "FUNC"
2019-04-01 06:07:56 +00:00
.AZ "CALL"
2019-03-12 16:50:16 +00:00
.AZ "BREAK"
2019-03-08 16:36:21 +00:00
.AZ "SWITCH"
.AZ "CASE"
.AZ "DEFAULT"
2018-11-26 06:57:11 +00:00
.AZ "FOR"
.AZ "WHILE"
.AZ "IF"
2019-03-04 16:44:33 +00:00
.AZ "NEXT"
.AZ "LOOP"
.AZ "ELSE"
.AZ "FI"
2019-06-07 15:02:51 +00:00
ENDCMD .AZ "END"
2015-10-19 20:35:00 +00:00
.HS 00
*--------------------------------------
2019-02-07 16:52:25 +00:00
* https://www.tldp.org/LDP/abs/html/io-redirection.html
*--------------------------------------
2019-02-11 06:58:33 +00:00
CORE.IO .AZ "&"
2019-02-07 16:52:25 +00:00
.AZ "<"
.AZ ">>"
.AZ ">"
.AZ "1>>"
.AZ "1>"
.AZ "2>>"
.AZ "2>"
.HS 00
*--------------------------------------
2019-02-01 16:32:29 +00:00
EXP.BEGIN .AZ "!["
.AZ "["
2018-11-09 15:59:04 +00:00
.HS 00
2019-02-12 16:47:34 +00:00
EXP.OP.UNARY .AZ "-D"
.AZ "-E"
.AZ "-F"
2019-02-14 14:51:24 +00:00
.AZ "-N"
.AZ "-Z"
2018-11-09 15:59:04 +00:00
.HS 00
2019-02-01 16:32:29 +00:00
EXP.OP.BINARY .AZ "="
.AZ "!="
2019-03-11 15:43:33 +00:00
.AZ ".<"
.AZ "<="
.AZ ".>"
.AZ ">="
2019-02-12 16:47:34 +00:00
.AZ "-EQ"
.AZ "-NE"
.AZ "-LT"
.AZ "-LE"
.AZ "-GT"
.AZ "-GE"
.HS 00
2019-02-01 16:32:29 +00:00
EXP.OP.BINARY.BITS
2019-03-11 15:43:33 +00:00
.DA #%010
.DA #%101
.DA #%100
.DA #%110
.DA #%001
.DA #%011
.DA #%010
2018-11-26 10:40:19 +00:00
.DA #%101
.DA #%100
.DA #%110
.DA #%001
.DA #%011
2019-02-01 16:32:29 +00:00
EXP.OP.MATH .AZ "+"
2018-11-26 06:57:11 +00:00
.AZ "-"
.AZ "*"
2019-04-01 06:07:56 +00:00
.AZ "/"
.AZ "MOD"
.HS 00
2019-07-10 15:39:02 +00:00
EXP.OP.MATH.FPU .DA #FPU.ADD32,#FPU.SUB32,#FPU.IMUL32,#FPU.IDIV32,#FPU.IMOD32
2019-04-06 18:54:36 +00:00
EXP.OP.LOGIC .AZ "AND"
.AZ "OR"
2018-11-26 06:57:11 +00:00
.HS 00
*--------------------------------------
2019-04-10 07:45:09 +00:00
.INB USR/SRC/SHARED/X.ERRORS.S
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
2019-01-30 16:23:00 +00:00
CORE.STACK .BS CORE.STACK.MAX+1 pData (0 = Stack Ptr)
2018-11-26 06:57:11 +00:00
PUSHD.STACK .BS PUSHD.STACK.MAX+1
2018-11-19 16:15:16 +00:00
2019-03-13 16:29:24 +00:00
hFuncList .BS 1
2019-04-01 06:07:56 +00:00
2019-02-15 16:38:17 +00:00
bReadMode .BS 1
2019-03-14 16:51:02 +00:00
bFuncMode .BS 1
2019-04-01 06:07:56 +00:00
bExitOnEOF .BS 1
2019-02-06 16:20:51 +00:00
2015-12-13 21:29:51 +00:00
bEscMode .BS 1
bPause .BS 1
2019-02-12 16:47:34 +00:00
2019-01-23 16:26:48 +00:00
bSET.C .BS 1
2019-04-02 15:28:50 +00:00
bSET.E .BS 1
2018-10-16 15:48:03 +00:00
bSET.X .BS 1
2019-02-12 16:47:34 +00:00
bREAD.S .BS 1
Sleep .BS 4
2019-02-04 14:29:52 +00:00
StatBuf .BS S.STAT
TimeBuf .BS S.TIME
2019-01-26 21:46:39 +00:00
CL.hCLBuf .BS 1
2018-11-10 14:30:09 +00:00
CL.Ptr .BS 1
CL.Len .BS 1
2019-02-06 16:20:51 +00:00
CL.bReady .BS 1
2018-11-10 14:30:09 +00:00
2019-01-30 16:23:00 +00:00
CORE.hArgVBuf .BS 1
2018-10-15 06:25:40 +00:00
2019-04-01 15:24:01 +00:00
CORE.PSFlags .BS 1
2018-11-09 15:59:04 +00:00
HIS.hBuf .BS 1
HIS.Count .BS 1
HIS.Index .BS 1
IO.hIn .BS 1
IO.hOut .BS 1
IO.hErr .BS 1
2019-06-02 08:58:46 +00:00
2019-07-31 15:10:59 +00:00
*M32.BUF .BS 12 -1234567890\0
2019-06-02 08:58:46 +00:00
M32.BUF .EQ *
2019-06-04 06:31:54 +00:00
IO.FIFO .BS 12 /DEV/FIFOxx\0
2019-01-21 06:52:04 +00:00
*--------------------------------------
DS.END .ED
2015-03-14 21:48:35 +00:00
*--------------------------------------
MAN
2019-02-08 16:13:43 +00:00
SAVE USR/SRC/BIN/SH.S
2015-03-14 21:48:35 +00:00
ASM