; CODE IN DATA STATEMENTS›; AT LINES 32700-32704›;›; SEARCH THE BASIC PROGRAM›; FOR ERRORS AND VARIABLES›;›; SET UP EQUATES›;›VARTAB=134 ;Var valu table›NUMVAR=205 ;For BASIC›STMTAB=136 ;BASIC's start›NEXLINE=209 ;Storage›ERRFLG=207 ;For BASIC›POINTER=203 ;BAS zero page›ERROR=55 ;BOO-BOO›;›; POINT TO STATEMENTS›;› *=1664 ;ASM use only› PLA ;Don't need› LDA STMTAB ;Set up zero› STA POINTER ; page pointers› LDA STMTAB+1 ; for BASIC› STA POINTER+1 ; search.›;›; LAST LINE?›;›NEXT LDY #1 ;End loop if we› LDA (POINTER),Y ; reached the› BMI RETURN ; last line.›;›; GET NEXTLINE POINTER›;›GETNEXT INY ;Point to next› LDA (POINTER),Y ; NEXTLINE byte› STA NEXLINE ; and keep it.›;›; CHECK FOR ERROR›;› LDY #4 ;COMMAND offset› LDA (POINTER),Y ;Point to it› CMP #ERROR ;Error?› BEQ RETURN2 ;Yes-Return a 2›;›; UPDATE POINTER›;› CLC ;No error so› LDA NEXLINE ; let's get the› ADC POINTER ; next line's› STA POINTER ; address and› BCC NEXT ; go back to› INC POINTER+1 ; check some› BNE NEXT ; more.›;›; WE FOUND AN ERROR›;›RETURN2 LDA #2 ;Tell BASIC we› STA ERRFLG ; goofed. (POKE› RTS ; 207,2)-- exit›;›; NO ERROR›;›RETURN LDA #1 ;Tell BASIC no› STA ERRFLG ; boo-boo's.›;›; HOW MANY VARIABLES?›;› LDA VARTAB ;Set up zero› STA POINTER ; page pointers› LDA VARTAB+1 ; for variable› STA POINTER+1 ; search.›;›; INITIALIZE›;› LDA #0 ;Put a zero in› STA NUMVAR ; our counter›;›; LAST VARIABLE?›;›NEXTVAR LDA POINTER ;Last one› CMP STMTAB ; yet?› BNE INCREM ;No add 1 more› LDA POINTER+1 ;How about› CMP STMTAB+1 ; now?› BNE INCREM ;No add 1 more› RTS ;Now you may go›;›; GET NEXTVAR POINTER›;›INCREM INC NUMVAR ;Add 1 more› CLC ;Get set to add› LDA #8 ;Var # offset› ADC POINTER ;Let's update› STA POINTER ; our pointers› BCC NEXTVAR ; and continue› INC POINTER+1 ; our search.› BNE NEXTVAR ;Uncond. branch›