NEW AUTO 3,1 .LIST OFF .OP 65C02 .OR $2000 .TF bin/acos *-------------------------------------- CODESEG .EQ 4096 DATASEG .EQ 256 STRVSEG .EQ 8192 FWREF .EQ 1024 EXP.DEPTH.MAX .EQ 16 CCS.MAX .EQ 128 *-------------------------------------- .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 ZPCodeBufPtr .BS 2 ZPDataBufPtr .BS 2 ZPFWRefBufPtr .BS 2 STRID .BS 2 VAR.ID .BS 2 VAR.ADDR .BS 2 VAR.TYPE .BS 1 hStrings .BS 1 EXP.ADDR .BS 2 EXP.TYPE .BS 1 EXP.AOP .BS 1 ZPStrBuf1 .BS 2 ZPStrBuf2 .BS 2 hIn .BS 1 hOut .BS 1 ZPPtr1 .BS 2 ZPPtr2 .BS 2 ArgIndex .EQ * pCCS .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 #256 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.COMPILING .DA MSG.COMPILING L.MSG.DEBUG .DA MSG.DEBUG L.MSG.TRACE .DA MSG.TRACE L.MSG.ERROR .DA MSG.ERROR L.MSG.FWREF .DA MSG.FWREF L.MSG.FWREFERR .DA MSG.FWREFERR L.MSG.RUN .DA MSG.RUN L.MSG.STR .DA MSG.STR L.MSG.INT16 .DA MSG.INT16 L.OUT .DA OUT.ELW .DA OUT.DLW .DA OUT.CRLF .DA OUT.BSSPBS .DA OUT.CLRSCR L.FMT.DATE .DA FMT.DATE L.FMT.TIME .DA FMT.TIME *-------------------------------------- L.ACOS.AOPS .DA ACOS.AOPS L.ACOS.LOPS .DA ACOS.LOPS 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.ELSE .DA KW.END .DA KW.FILL .DA KW.FLAG KWID.FOR .EQ *-J.ACOS.KW .DA KW.FOR .DA KW.FREE .DA KW.GET .DA KW.GOSUB .DA KW.GOTO .DA KW.HOME KWID.IF .EQ *-J.ACOS.KW .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 KWID.STEP .EQ *-J.ACOS.KW .DA KW.STEP .DA KW.TEXT .DA KW.THEN KWID.TO .EQ *-J.ACOS.KW .DA KW.TO .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.CHRd .DA FN.CLOCK .DA FN.DATEd .DA FN.FLAG .DA FN.INFO .DA FN.INSTR .DA FN.KEY .DA FN.LEFTd .DA FN.LEN .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 *-------------------------------------- J.RT RT.GET.ID .EQ *-J.RT .DA RT.GET RT.INPUT.ID .EQ *-J.RT .DA RT.INPUT *-------------------------------------- RT.DATEd.ID .EQ *-J.RT .DA RT.DATEd RT.LEFTd.ID .EQ *-J.RT .DA RT.LEFTd RT.LEN.ID .EQ *-J.RT .DA RT.LEN RT.MIDd.ID .EQ *-J.RT .DA RT.MIDd RT.RIGHTd.ID .EQ *-J.RT .DA RT.RIGHTd RT.STRd.ID .EQ *-J.RT .DA RT.STRd RT.TIMEd.ID .EQ *-J.RT .DA RT.TIMEd RT.VAL.ID .EQ *-J.RT .DA RT.VAL *-------------------------------------- RT.NOT.ID .EQ *-J.RT .DA RT.NOT RT.StrAdd.ID .EQ *-J.RT .DA RT.StrAdd RT.StrCmp.ID .EQ *-J.RT .DA RT.StrCmp RT.StrSet.ID .EQ *-J.RT .DA RT.StrSet RT.StrOut.ID .EQ *-J.RT .DA RT.StrOut RT.IntSet.ID .EQ *-J.RT .DA RT.IntSet RT.IntUpd.ID .EQ *-J.RT .DA RT.IntUpd RT.IntGet.ID .EQ *-J.RT .DA RT.IntGet RT.IntOut.ID .EQ *-J.RT .DA RT.IntOut RT.OUTCRLF.ID .EQ *-J.RT .DA RT.OUTCRLF RT.OUTX.ID .EQ *-J.RT .DA RT.OUTX .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 File name >PUSHBI 2 >SYSCALL PrintF bcs CS.INIT.RTS CS.RUN.LOOP >SLEEP >LDA.G bDebug bpl .2 jsr PrintDebugMsg .2 jsr CS.RUN.FGetS bcs .4 >LDA.G bTrace bpl .3 jsr PrintTraceMsg .3 jsr CORE.Compile bcc CS.RUN.LOOP cmp #MLI.E.EOF beq CS.RUN.LOOP .4 cmp #MLI.E.EOF bne .9 lda #$60 RTS sta (ZPCodeBufPtr) lda #0 sta (ZPFWRefBufPtr) jsr CS.FClose jsr CORE.FWREF bcs .99 jsr CORE.Run bcc .8 .9 pha jsr PrintErrorMsg pla sec rts .8 lda #0 Exit Code = Success sec .99 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 hFile bne .90 >LDYA ZPPtr1 >STYA ZPPtr2 for printing later jsr CS.RUN.FOpen bcc CS.RUN.ARGS .9 rts .7 >LDA.G hFile beq .90 clc rts .90 >PUSHW L.MSG.USAGE >PUSHBI 0 >SYSCALL PrintF lda #E.SYN sec QUIT Process rts *-------------------------------------- CS.RUN.FOpen >PUSHYA >PUSHBI O.RDONLY >PUSHBI S.FI.T.TXT >PUSHWZ Aux type >SYSCALL FOpen bcs .9 >STA.G hFile >LDYAI 256 >SYSCALL GetMem bcs .9 >STYA.G InputBufPtr txa >STA.G hInputBuf .9 rts *-------------------------------------- CS.RUN.FGetS >LDYA.G InputBufPtr >STYA ZPInputBufPtr >INCW.G LineCounter >PUSHB.G hFile >PUSHW ZPInputBufPtr >PUSHWI 256 >SYSCALL FGetS rts *-------------------------------------- CS.DOEVENT sec rts *-------------------------------------- CS.QUIT jsr CORE.Quit CS.FClose >LDA.G hFile beq .1 >SYSCALL FClose >STZ.G hFile .1 >LDA.G hInputBuf beq .8 >SYSCALL FreeMem >STZ.G hInputBuf .8 * clc rts *-------------------------------------- PrintDebugMsg >PUSHW L.MSG.DEBUG >PUSHW ZPCodeBufPtr >PUSHW ZPDataBufPtr lda pStack clc adc #6 pha lda pStack+1 adc #0 >PUSHA pla >PUSHA >PUSHBI 6 >SYSCALL PrintF rts *-------------------------------------- PrintTraceMsg ldy #S.PS.hStdErr lda (pPS),y >PUSHA >PUSHW L.MSG.TRACE >PUSHW.G LineCounter >PUSHW.G InputBufPtr >PUSHBI 4 >SYSCALL FPrintF rts *-------------------------------------- PrintErrorMsg >LDA.G bTrace bmi .1 jsr PrintTraceMsg .1 lda ZPInputBufPtr sec >SBC.G InputBufPtr tax >LDYA.G InputBufPtr >STYA ZPInputBufPtr txa beq .3 ldy #0 lda #'-' .2 sta (ZPInputBufPtr),y iny dex bne .2 txa .3 sta (ZPInputBufPtr),y .8 ldy #S.PS.hStdErr lda (pPS),y >PUSHA >PUSHW L.MSG.ERROR >PUSHW ZPInputBufPtr >PUSHBI 2 >SYSCALL FPrintF rts *-------------------------------------- .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.rt *-------------------------------------- CS.END *-------------------------------------- * Pre-compiled code *-------------------------------------- CCODE.PUSHYA >PUSHYA CCODE.PUSHYA.LEN .EQ *-CCODE.PUSHYA *-------------------------------------- CCODE.TESTTRUE lda (pStack) inc pStack ora (pStack) php inc pStack plp .1 bne .1+5 .HS 4C JMP abs CCODE.TESTTRUE.LEN .EQ *-CCODE.TESTTRUE *-------------------------------------- * Initialized DATA *-------------------------------------- MSG.GREETINGS .AZ "\r\nACOS-Shell %d.%d\r\n\r\n" MSG.USAGE .AS "Usage : ACOS