A2osX/BIN/CSH.S.txt

223 lines
4.5 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
PREFIX
AUTO 4,1 Enable MASM3 auto line num
.LIST OFF
.OP 65C02 Target CPU, must match CPU level in header
.OR $2000 usualy $2000, but any value > $100 allowed
.TF BIN/CSH
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/MLI.I
.INB INC/MLI.E.I
*--------------------------------------
.INB USR/SRC/BIN/CSH.E
*--------------------------------------
* Zero Page Segment, up to 32 bytes
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZPPtr3 .BS 2
ZPFileBuf .BS 2
ZPFileBufPtr .BS 2
ZPFnDefPtr .BS 2
ZPCSHSymbols .BS 2
ZPCSHConst .BS 2
ZPCSHData .BS 2
ZPCSHValue .BS 2
ZPCSHStack .BS 2
ZS.END .ED
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA #0 S.PS.F.EVENT
.DA #0
.DA CS.END-CS.START Code Size (without Constants)
.DA DS.END-DS.START Data SegmentSize
.DA #16 Stack Size
.DA #ZS.END-ZS.START Zero Page Size
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG.GREETINGS .DA MSG.GREETINGS
L.MSG.ECHOCRLF .DA MSG.ECHOCRLF
L.MSG.ERR .DA MSG.ERR
.INB USR/SRC/BIN/CSH.R
.DA 0
*--------------------------------------
* Called once at process creation
* Put code for loading LIB here
*--------------------------------------
CS.INIT clc
rts
*--------------------------------------
* Called until exit with CS
* if RUN exits with CC, RN entered again
*--------------------------------------
CS.RUN >PUSHWI K.VER
>PUSHBI 2
>LDYA L.MSG.GREETINGS
>SYSCALL printf
bcs .99
jsr CSH.Init
bcs .99
ldy #S.PS.ARGC
lda (pPS),y
beq .90 no arg, usage
>PUSHWI 0 Aux type
>PUSHBI S.FI.T.TXT
>PUSHBI O.RDONLY
lda #1
>SYSCALL ArgV
>SYSCALL LoadTxtFile
bcs .99
txa
>STA.G hFileBuf
>SYSCALL GetMemPtr
>STYA ZPFileBuf
>STYA ZPFileBufPtr
.1 >SLEEP
jsr CSH.Run
bcc .1
cmp #MLI.E.EOF
beq .8
pha
jsr PrintErrMsg
pla
sec
rts
.8 lda #0
sec
rts
.90 lda #E.SYN Exit Code = Succes
sec QUIT Process
.99 rts
*--------------------------------------
* Called if option S.PS.F.EVENT enabled in Header
* Timer Event : every 10th seconds
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
* Called once, when RUN exited with CS
* Put code for unloading LIB here
*--------------------------------------
CS.QUIT jsr CSH.Quit
clc
rts
*--------------------------------------
PrintErrMsg >LDYA ZPFileBuf
>STYA ZPPtr1
lda #1
sta ZPPtr3
stz ZPPtr3+1
.1 >LDYA ZPPtr1
>STYA ZPPtr2 Save actual line start
inc ZPPtr3
bne .2
inc ZPPtr3+1
.2 lda (ZPPtr1)
beq .6 EoF
inc ZPPtr1
bne .3
inc ZPPtr1+1
.3 cmp #C.CR
bne .2 Scan until EoL
ldx ZPPtr1
cpx ZPFileBufPtr
lda ZPPtr1+1
sbc ZPFileBufPtr+1
bcc .1 not this line....
ldy #$ff
.5 iny
lda (ZPPtr2),y
beq .6
cmp #C.CR
beq .6
phy
>PUSHA
ldy #S.PS.hStdErr
lda (pPS),y
>SYSCALL fputc
ply
bra .5
.6 phy
>PUSHBI 0
>PUSHW L.MSG.ECHOCRLF
ldy #S.PS.hStdErr
lda (pPS),y
>SYSCALL fprintf
ply
beq .8
.7 phy
>PUSHBI '-'
ldy #S.PS.hStdErr
lda (pPS),y
>SYSCALL fputc
ply
dey
bne .7
.8 >PUSHW ZPPtr3
>PUSHBI 2
>PUSHW L.MSG.ERR
ldy #S.PS.hStdErr
lda (pPS),y
>SYSCALL fprintf
rts
*--------------------------------------
.INB USR/SRC/BIN/CSH.S.CORE
*--------------------------------------
CS.END
*--------------------------------------
* Initialized DATA
*--------------------------------------
MSG.Greetings .AZ "\r\nCSH-Shell %d.%d\r\n\r\n"
MSG.ECHOCRLF .AZ "\r\n"
MSG.ERR .AZ "^\r\nLine #%D:"
.INB USR/SRC/BIN/CSH.I
*--------------------------------------
.DUMMY
.OR 0
DS.START .INB USR/SRC/BIN/CSH.D
DS.END
.ED
*--------------------------------------
MAN
SAVE USR/SRC/BIN/CSH.S
ASM