NEW AUTO 3,1 .LIST OFF .OP 65C02 .OR $2000 .TF bin/acos *-------------------------------------- CODESEG .EQ 4096 CONSTSEG .EQ 1024 DATASEG .EQ 256 FWREF .EQ 1024 EXP.DEPTH.MAX .EQ 16 *-------------------------------------- .INB inc/macros.i .INB inc/a2osx.i .INB inc/mli.i .INB inc/mli.e.i *-------------------------------------- * Zero Page Segment, up to 32 bytes *-------------------------------------- .DUMMY .OR ZPBIN ZS.START ZPInputBufPtr .BS 2 ZPSID .BS 2 ZPADDR .BS 2 ZPTYPE .BS 1 .BS 1 ZPPtr1 .BS 2 ZPPtr2 .BS 2 ZPPtr3 .BS 2 hIn .BS 1 hOut .BS 1 ZPCodeBufPtr .BS 2 ZPConstBufPtr .BS 2 ZPDataBufPtr .BS 2 ZPFWRefBufPtr .BS 2 EXP.ADDR .BS 2 EXP.TYPE .BS 1 EXP.AOPS .BS 1 ArgIndex .BS 1 bFlag .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 #128 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.COMPILING .DA MSG.COMPILING L.MSG.DEBUG .DA MSG.DEBUG L.MSG.ERR .DA MSG.ERR L.MSG.RUN .DA MSG.RUN L.MSG.FWREFERR .DA MSG.FWREFERR L.MSG.STR .DA MSG.STR L.MSG.INT32 .DA MSG.INT32 *-------------------------------------- L.ACOS.AOPS .DA ACOS.AOPS J.ACOS.AOPS .DA EXP.ADD .DA EXP.SUB .DA EXP.MUL .DA EXP.DIV .DA EXP.MOD L.ACOS.BOPS .DA ACOS.BOPS L.ACOS.KW .DA ACOS.KW J.ACOS.KW .DA KW.ADDINT .DA KW.APPEND .DA KW.BYTE .DA KW.CLEAR .DA KW.CLOCK .DA KW.CLOSE .DA KW.COPY .DA KW.CREATE .DA KW.ECHO .DA KW.EDIT .DA KW.END .DA KW.FILL .DA KW.FLAG .DA KW.FOR .DA KW.FREE .DA KW.GET .DA KW.GOSUB .DA KW.GOTO .DA KW.HOME .DA KW.IF .DA KW.INFO .DA KW.INPUT .DA KW.KILL .DA KW.LINK .DA KW.LOG .DA KW.MARK .DA KW.MODEM .DA KW.MOVE .DA KW.MSG .DA KW.NEXT .DA KW.NIBBLE .DA KW.NOT .DA KW.ON .DA KW.NOCAR .DA KW.OPEN .DA KW.POKE .DA KW.POP .DA KW.POSITION .DA KW.PRINT .DA KW.PUBLIC .DA KW.PUSH .DA KW.RAM .DA KW.RAM2 .DA KW.READ .DA KW.READY .DA KW.RETURN .DA KW.REWIND .DA KW.RIPCO .DA KW.SET .DA KW.SETINT .DA KW.TEXT .DA KW.THEN .DA KW.TONE .DA KW.UPDATE .DA KW.USE .DA KW.WHENd .DA KW.WRITE *-------------------------------------- L.ACOS.FN .DA ACOS.FN J.ACOS.FN .DA FN.BYTE .DA FN.CLOCK .DA FN.DATEd .DA FN.FLAG .DA FN.CHRd .DA FN.INSTR .DA FN.KEY .DA FN.LEN .DA FN.LEFTd .DA FN.MIDd .DA FN.PDL .DA FN.PEEK .DA FN.RANDOM .DA FN.RIGHTd .DA FN.RNDd .DA FN.STRd .DA FN.TIMEd .DA FN.VAL .DA FN.WHENd .DA FN.WIDTH .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 CORE.Init bcs CS.INIT.RTS >PUSHW L.MSG.COMPILING >PUSHW ZPPtr2 >PUSHBI 2 >SYSCALL PrintF 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 CORE.Compile bcc .1 cmp #MLI.E.EOF bne .9 jsr CORE.FWREF bcs .9 jsr CORE.Run bcc .8 .9 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 >STYA ZPPtr2 form printing later 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 CORE.Quit clc rts *-------------------------------------- PrintErrMsg >LDA.G hFileBuf >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 >PUSHW ZPCodeBufPtr >PUSHBI 4 >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 *-------------------------------------- CCODE.PUSHLYA >STYA ZPADDR ldy #3 .1 lda (ZPADDR),y >PUSHA dey bpl .1 CCODE.PUSHLYA.LEN .EQ *-CCODE.PUSHLYA *-------------------------------------- CCODE.PULLLYA >STYA ZPADDR ldy #0 .1 >PULLA sta (ZPADDR),y iny cpy #4 bcc .1 CCODE.PULLLYA.LEN .EQ *-CCODE.PULLLYA *-------------------------------------- CCODE.PUSHA >PUSHA CCODE.PUSHA.LEN .EQ *-CCODE.PUSHA *-------------------------------------- CCODE.PULLA >PULLA CCODE.PULLA.LEN .EQ *-CCODE.PULLA *-------------------------------------- CCODE.FPRINTSTR pha >PUSHW L.MSG.STR pla >PUSHA tya >PUSHA >PUSHBI 2 >SYSCALL PrintF CCODE.FPRINTSTR.LEN .EQ *-CCODE.FPRINTSTR *-------------------------------------- CCODE.FPRINTL >PUSHW L.MSG.INT32 ldx #4 ldy #5 .1 lda (pStack),y >PUSHA dex bne .1 >PUSHBI 4 >SYSCALL PrintF >POP 4 Discard long on stack CCODE.FPRINTL.LEN .EQ *-CCODE.FPRINTL *-------------------------------------- .INB usr/src/bin/acos.s.code .INB usr/src/bin/acos.s.core .INB usr/src/bin/acos.s.exp .INB usr/src/bin/acos.s.fn .INB usr/src/bin/acos.s.kw .INB usr/src/bin/acos.s.str *-------------------------------------- CS.END *-------------------------------------- * Initialized DATA *-------------------------------------- MSG.GREETINGS .AZ "\r\nACOS-Shell %d.%d\r\n\r\n" MSG.USAGE .AS "Usage : ACOS