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