NEW AUTO 3,1 .LIST OFF .OP 65C02 .OR $2000 .TF bin/csh *-------------------------------------- .INB inc/macros.i .INB inc/a2osx.i .INB inc/mli.i .INB inc/mli.e.i *-------------------------------------- CSH.T.VOID .EQ 0 CSH.T.UCHAR .EQ 1 CSH.T.SCHAR .EQ 2 CSH.T.UINT .EQ 3 CSH.T.SINT .EQ 4 CSH.T.ULONG .EQ 5 CSH.T.SLONG .EQ 6 CSH.T.FLOAT .EQ 7 CSH.T.VARIADIC .EQ $FF *-------------------------------------- CSH.Q.POINTER .EQ %01000000 CSH.Q.PPOINTER .EQ %10000000 CSH.Q.PPPOINTER .EQ %11000000 CSH.Q.PCONST .EQ %00100000 CSH.Q.CONST .EQ %00010000 CSH.Q.FUNC .EQ %00001000 *-------------------------------------- * Zero Page Segment, up to 32 bytes *-------------------------------------- .DUMMY .OR ZPBIN ZS.START ZPCSHCode .BS 2 ZPCSHConst .BS 2 ZPCSHData .BS 2 ZPCSHStack .BS 2 ZPVarID .BS 2 ZPVarDef .EQ * ZPVarType .BS 1 ZPVarQual .BS 1 ZPVarSizeOf .BS 2 ZPVarDataPtr .BS 2 ZPInputBufPtr .BS 2 bFastCall .BS 1 bCompil .BS 1 hDefine .BS 1 hInclude .BS 1 ZPPtr1 .BS 2 ZPPtr2 .BS 2 ZPPtr3 .BS 2 ArgIndex .BS 1 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 #64 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.USAGE .DA MSG.USAGE L.MSG.ECHOCRLF .DA MSG.ECHOCRLF L.MSG.DEBUG .DA MSG.DEBUG L.MSG.ERR .DA MSG.ERR L.ENV.INCLUDE .DA ENV.INCLUDE L.CSH.BOPS .DA CSH.BOPS J.CSH.BOPS .DA CSH.BOPS.MUL .DA CSH.BOPS.DIV .DA CSH.BOPS.MOD .DA CSH.BOPS.ADD .DA CSH.BOPS.SUB .DA CSH.BOPS.SHL .DA CSH.BOPS.SHR .DA CSH.BOPS.L .DA CSH.BOPS.LE .DA CSH.BOPS.G .DA CSH.BOPS.GE .DA CSH.BOPS.EQ .DA CSH.BOPS.NE .DA CSH.BOPS.AND .DA CSH.BOPS.OR .DA CSH.BOPS.EOR .DA CSH.BOPS.LAND .DA CSH.BOPS.LOR L.CSH.FN .DA CSH.FN L.CSH.DIRS .DA CSH.DIRS L.CSH.KW .DA CSH.KW L.CSH.MTYPES .DA CSH.MTYPES L.CSH.TYPES .DA CSH.TYPES L.CSH.FTYPES .DA CSH.FTYPES J.CSH.DIRS .DA CSH.DIR.DEFINE .DA CSH.DIR.INCLUDE J.CSH.KW .DA CSH.IF .DA CSH.WHILE .DA CSH.ELSE .DA CSH.DO .DA CSH.FOR .DA CSH.SWITCH .DA CSH.CASE .DA CSH.BREAK .DA CSH.CONTINUE .DA CSH.SIZEOF *-------------------------------------- .DA CSH.TYPEDEF .DA CSH.STRUCT *-------------------------------------- J.CSH.MTYPES .DA CSH.CONST .DA CSH.SIGNED .DA CSH.UNSIGNED .DA CSH.SHORT J.CSH.TYPES .DA CSH.VOID .DA CSH.CHAR .DA CSH.INT .DA CSH.LONG .DA CSH.FLOAT J.CSH.UTYPES .DA CSH.UCHAR .DA CSH.UINT .DA CSH.ULONG J.CSH.STYPES .DA CSH.SCHAR .DA CSH.SINT .DA CSH.SLONG J.CSH.KW.END .DA CSH.IF.END .DA CSH.WHILE.END *-------------------------------------- J.CSH.EXEC .DA EXEC.log .DA EXEC.sqr .DA EXEC.exp .DA EXEC.cos .DA EXEC.sin .DA EXEC.tan .DA EXEC.atan .DA EXEC.getchar .DA EXEC.puts .DA EXEC.execl .DA EXEC.printf .DA EXEC.putenv .DA EXEC.setenv .DA EXEC.getenv .DA EXEC.unsetenv .DA EXEC.MD5 .DA EXEC.malloc .DA 0 *-------------------------------------- * Called once at process creation * Put code for loading LIB here *-------------------------------------- CS.INIT clc CS.INIT.RTS rts *-------------------------------------- * Called until exit with CS * if RUN exits with CC, RN entered again *-------------------------------------- CS.RUN >PUSHW L.MSG.GREETINGS >PUSHW A2osX.KVER >PUSHBI 2 >SYSCALL PrintF bcs CS.INIT.RTS jsr CS.RUN.ARGS bcs CS.INIT.RTS jsr CSH.Init bcs CS.INIT.RTS .1 >SLEEP >LDA.G bDebug bpl .2 jsr PrintDebugMsg .2 >LDA.G bTrace bpl .3 >LDYA ZPInputBufPtr jsr PrintTraceMsg .3 jsr CSH.Run bcc .1 cmp #MLI.E.EOF beq .8 pha jsr PrintErrMsg pla sec rts .8 lda #0 Exit Code = Success sec rts *-------------------------------------- CS.RUN.ARGS inc ArgIndex lda ArgIndex >SYSCALL ArgV bcs .7 >STYA ZPPtr1 lda (ZPPtr1) cmp #'-' bne .4 ldy #1 lda (ZPPtr1),y ldx #OptionVars-OptionList-1 .1 cmp OptionList,x beq .2 dex bpl .1 bra .90 .2 ldy OptionVars,x lda #$ff sta (pData),y bra CS.RUN.ARGS .4 >LDA.G hFileBuf bne .90 >LDYA ZPPtr1 jsr CS.RUN.LoadFile bcs .9 >STYA ZPInputBufPtr txa >STA.G hFileBuf bra CS.RUN.ARGS .7 >LDA.G hFileBuf beq .90 clc .9 rts .90 >PUSHW L.MSG.USAGE >PUSHBI 0 >SYSCALL PrintF lda #E.SYN sec QUIT Process rts *-------------------------------------- CS.RUN.LoadFile >SYSCALL LoadTxtFile bcs .9 phx txa >SYSCALL GetMemPtr plx .9 rts *-------------------------------------- CS.DOEVENT sec rts *-------------------------------------- CS.QUIT jsr CSH.Quit clc rts *-------------------------------------- PrintErrMsg lda hDefine beq .10 >LDYA.G CSH.SaveDefine >STYA ZPInputBufPtr .10 lda hInclude beq .11 bra .12 .11 >LDA.G hFileBuf .12 >SYSCALL GetMemPtr >STYA ZPPtr1 stz ZPPtr2 stz ZPPtr2+1 Line counter .1 inc ZPPtr2 bne .2 inc ZPPtr2+1 .2 >LDYA ZPPtr1 >STYA ZPPtr3 save line start .20 lda (ZPPtr1) beq .4 EoF inc ZPPtr1 bne .3 inc ZPPtr1+1 .3 cmp #C.CR bne .20 Scan until EoL ldx ZPPtr1 cpx ZPInputBufPtr lda ZPPtr1+1 sbc ZPInputBufPtr+1 bcc .1 not this line.... .4 >LDA.G bTrace bmi .5 jsr PrintTraceMsg.3 .5 lda ZPPtr3 cmp ZPInputBufPtr bne .6 lda ZPPtr3+1 cmp ZPInputBufPtr+1 beq .8 .6 >PUSHBI '-' ldy #S.PS.hStdErr lda (pPS),y >SYSCALL FPutC inc ZPPtr3 bne .5 inc ZPPtr3+1 bra .5 .8 ldy #S.PS.hStdErr lda (pPS),y >PUSHA >PUSHW L.MSG.ERR >PUSHW ZPPtr2 Line counter >PUSHBI 2 >SYSCALL FPrintF rts *-------------------------------------- PrintDebugMsg >LDYA pStack >STYA ZPPtr2 >PUSHW L.MSG.DEBUG >PUSHW ZPPtr2 >PUSHBI 2 >SYSCALL PrintF rts *-------------------------------------- PrintTraceMsg >STYA ZPPtr3 PrintTraceMsg.3 >PUSHBI '>' ldy #S.PS.hStdErr lda (pPS),y >SYSCALL FPutC ldy #$ff .1 iny lda (ZPPtr3),y beq .8 cmp #C.CR beq .8 phy >PUSHA ldy #S.PS.hStdErr lda (pPS),y >SYSCALL FPutC ply bra .1 .8 ldy #S.PS.hStdErr lda (pPS),y >PUSHA >PUSHW L.MSG.ECHOCRLF >PUSHBI 0 >SYSCALL FPrintF rts *-------------------------------------- .INB usr/src/bin/csh.s.core .INB usr/src/bin/csh.s.dir .INB usr/src/bin/csh.s.kw .INB usr/src/bin/csh.s.exp .INB usr/src/bin/csh.s.exec *-------------------------------------- CS.END *-------------------------------------- * Initialized DATA *-------------------------------------- MSG.GREETINGS .AZ "\r\nCSH-Shell %d.%d\r\n\r\n" MSG.USAGE .AS "Usage : CSH