NEW AUTO 3,1 .LIST OFF *-------------------------------------- KW.ADDINT KW.APPEND KW.BYTE KW.CLEAR KW.CLOCK KW.CLOSE KW.COPY KW.CREATE KW.ECHO KW.EDIT lda #E.CSYN sec rts *-------------------------------------- KW.FILL KW.FLAG lda #E.CSYN sec rts *-------------------------------------- * FOR var = exp1 TO exp2 STEP exp3 ... NEXT *-------------------------------------- KW.FOR jsr CORE.GetNextCharNB bcs .98 jsr CORE.CreateOrGetVar bcs .99 lda VAR.TYPE bne .97 jsr CORE.GetNextCharNB bcs .98 cmp #'=' bne .98 jsr KW.GetIntExp bcs .99 jsr CODE.LDVARDDRI ldx #RT.IntSet.ID jsr CODE.JSRRT set var = START value >LDYA L.ACOS.KW jsr CORE.LookupSkip bcs .98 cpx #KWID.TO bne .98 *-------------------------------------- jsr KW.PushCodePtr2CCS NEXT will JMP back here *-------------------------------------- jsr CODE.LDVARDDRI ldx #RT.IntGet.ID jsr CODE.JSRRT get var value on stack jsr KW.GetIntExp get exp2 on stack bcs .99 ldx #FPU.iNE var value = exp 2 ? jsr CODE.FPUCALL jsr CODE.TESTTRUE jsr KW.FalseJMP2CCS if false, exit after NEXT >LDYA L.ACOS.KW jsr CORE.Lookup bcs .98 cpx #KWID.STEP bne .1 lda #4 jsr CORE.SkipA skip "STEP" jsr KW.GetIntExp get exp3 value on stack bcs .99 bra .2 .1 ldy #1 push 1 on stack ldx #0 jsr CODE.PUSHYXI .2 ldy VAR.ADDR push Address to update by NEXT ldx VAR.ADDR+1 jsr CODE.PUSHYXI clc lda #KWID.FOR jmp KW.PushA2CCS .97 lda #E.TMISMATCH sec rts .98 lda #E.CSYN sec .99 rts *-------------------------------------- KW.NEXT ldy pCCS bmi .98 lda (pdata),y cmp #KWID.FOR bne .98 jsr CODE.PULLYX pull var address from stack ldx #RT.IntGet.ID will set VAR.ADDR jsr CODE.JSRRT get var value on stack ldx #FPU.iADD new value = value + STEP (on stack) jsr CODE.FPUCALL ldx #RT.IntUpd.ID jsr CODE.JSRRT set var = new value ldy pCCS iny pull JMP FALSE address lda (pData),y sta ZPPtr1 iny lda (pData),y sta ZPPtr1+1 lda #$4C JMP abs ... jsr CODE.EmitByte iny ...to loop address lda (pData),y jsr CODE.EmitByte iny lda (pData),y jsr CODE.EmitByte lda ZPCodeBufPtr and finally update JMP FALSE sta (ZPPtr1) lda ZPCodeBufPtr+1 ldy #1 sta (ZPPtr1),y lda pCCS clc adc #5 sta pCCS clc rts .98 KW.TO KW.STEP lda #E.NOFOR sec rts *-------------------------------------- KW.FREE lda #E.CSYN sec rts *-------------------------------------- KW.GET jsr CORE.GetNextCharNB bcs .9 jsr CORE.CreateOrGetVar bcs .99 ldx #RT.GET.ID jsr CODE.JSRRT jsr CODE.LDVARDDRI ldx #RT.StrSet.ID clc jmp CODE.JSRRT .9 lda #E.CSYN sec .99 rts *-------------------------------------- KW.GOSUB lda #$20 JSR abs bra KW.GOTO1 *-------------------------------------- KW.GOTO lda #$4C JMP abs KW.GOTO1 jsr CODE.EmitByte jsr CORE.GetNextCharNB bcs .90 jsr CORE.GetLabel bcc .1 jsr CORE.AddFWRef bcs .99 .1 lda VAR.ADDR jsr CODE.EmitByte lda VAR.ADDR+1 clc jmp CODE.EmitByte .90 lda #E.CSYN .99 rts *-------------------------------------- KW.HOME ldx #8 CLRSCR jsr CODE.LDXI ldx #RT.OUTX.ID clc jmp CODE.JSRRT *-------------------------------------- * IF exp THEN st1 ELSE st2 *-------------------------------------- KW.IF jsr EXP.Eval bcs .99 lda EXP.TYPE bne .98 jsr CODE.TESTTRUE jsr KW.FalseJMP2CCS lda #KWID.IF clc jmp KW.PushA2CCS .98 lda #E.TMISMATCH sec .99 rts *-------------------------------------- KW.ENDIF sec .HS 90 BCC *-------------------------------------- KW.ELSE clc ldy pCCS bmi .9 lda (pData),y eor #KWID.IF bne .9 iny lda (pData),y sta ZPPtr1 iny lda (pData),y sta ZPPtr1+1 ZPPtr1 = JMP if FALSE bcs .5 ENDIF lda #$4C JMP abs jsr CODE.EmitByte ldy pCCS iny lda ZPCodeBufPtr sta (pData),y iny lda ZPCodeBufPtr+1 sta (pData),y lda ZPCodeBufPtr clc adc #2 sta ZPCodeBufPtr bcc .1 inc ZPCodeBufPtr+1 .1 lda ZPCodeBufPtr sta (ZPPtr1) lda ZPCodeBufPtr+1 ldy #1 sta (ZPPtr1),y clc rts .5 lda ZPCodeBufPtr sta (ZPPtr1) ldy #1 lda ZPCodeBufPtr+1 sta (ZPPtr1),y lda pCCS clc adc #3 sta pCCS clc rts .9 lda #E.NOIF sec rts *-------------------------------------- KW.INFO lda #E.CSYN sec rts *-------------------------------------- KW.INPUT stz hIn Defaut to Keyboard jsr CORE.GetNextCharNB bcs .9 cmp #'"' bne .5 jsr EXP.CreateStrConst bcs .99 ldx #RT.StrOut.ID jsr CODE.JSRRT .5 jsr CORE.CreateOrGetVar bcs .99 ldx #RT.INPUT.ID jsr CODE.JSRRT jsr CODE.LDVARDDRI ldx #RT.StrSet.ID clc jmp CODE.JSRRT .9 lda #E.CSYN sec .99 rts *-------------------------------------- KW.KILL KW.LINK KW.LOG KW.MARK KW.MODEM KW.MOVE KW.MSG lda #E.CSYN sec rts *-------------------------------------- KW.NIBBLE KW.NOT KW.ON KW.NOCAR lda #E.CSYN sec rts *-------------------------------------- KW.OPEN lda #E.CSYN sec rts *-------------------------------------- KW.POKE KW.POP KW.POSITION lda #E.CSYN sec rts *-------------------------------------- KW.PRINT stz ZPPtr2 put ending CR stz hOut Default to screen jsr CORE.GetCharNB bcs .8 .11 cmp #'\' bne .13 .12 ldx #RT.OUTCRLF.ID jsr CODE.JSRRT bra .72 .13 jsr CORE.IsEndInst bcs .8 jsr CORE.IsKW bcc .8 stz ZPPtr2 put ending CR jsr EXP.Eval bcs .99 lda EXP.TYPE beq .6 ldx #RT.StrOut.ID bra .7 .6 ldx #RT.IntOut.ID .7 jsr CODE.JSRRT *-------------------------------------- jsr CORE.GetCharNB bcs .8 .70 cmp #'\' beq .12 jsr CORE.IsEndInst bcs .8 jsr CORE.IsKW bcc .8 lda (ZPInputBufPtr) cmp #',' bne .71 tax jsr CODE.PutChar bra .72 go skip .71 cmp #';' bne .90 ror ZPPtr2 suppress ending CR .72 jsr CORE.GetNextCharNB skip "/", ";" or "," bcc .11 .8 bit ZPPtr2 bmi .80 ldx #RT.OUTCRLF.ID jsr CODE.JSRRT .80 clc rts .90 lda #E.CSYN sec .99 rts *-------------------------------------- KW.PUBLIC KW.PUSH KW.RAM KW.RAM2 KW.READ KW.READY lda #E.CSYN sec rts *-------------------------------------- KW.RETURN * TODO : check context KW.END lda #$60 RTS clc jmp CODE.EmitByte *-------------------------------------- KW.REWIND KW.RIPCO KW.SET KW.SETINT KW.TEXT lda #E.CSYN sec rts *-------------------------------------- KW.THEN ldy pCCS lda (pData),y eor #KWID.IF bne .9 clc rts .9 lda #E.NOIF sec rts *-------------------------------------- KW.TONE KW.UPDATE KW.USE KW.WHENd KW.WRITE lda #E.CSYN sec rts *-------------------------------------- KW.GetIntExp jsr CORE.GetNextCharNB bcs .98 jsr EXP.Eval bcs .99 lda EXP.TYPE beq .99 lda #E.TMISMATCH sec rts .98 lda #E.CSYN * sec .99 rts *-------------------------------------- KW.PushA2CCS ldy pCCS dey sta (pData),y sty pCCS rts *-------------------------------------- KW.FalseJMP2CCS jsr KW.PushCodePtr2CCS lda ZPCodeBufPtr clc adc #2 sta ZPCodeBufPtr bcc .8 inc ZPCodeBufPtr+1 .8 rts *-------------------------------------- KW.PushCodePtr2CCS ldy pCCS dey lda ZPCodeBufPtr+1 sta (pData),y dey lda ZPCodeBufPtr sta (pData),y sty pCCS rts *-------------------------------------- MAN SAVE usr/src/bin/acos.s.kw LOAD usr/src/bin/acos.s ASM