10 ;BASIC PROFILER SOURCE CODE›20 ; BY STAN LACKEY›30 ;›40 ; 130XE VERSION BY ERIC WOODRUFF›50 ; (c) 1989, ANTIC PUBLISHING, INC.›60 ;›70 ;›80 ; DEFINITIONS:›90 STMCUR = $8A ;Pointer into user program.›0100 MEMPTR = $D0 ;Memory pointer.›0110 PROFEN = $04FE ;Profiler On/Off flag.›0120 PORTB = $D301›0130 ;›0140 *= $0600 ;Relocatable.›0150 ;›0160 ; SAMPLE is the timer interrupt›0170 ; routine. It takes the current›0180 ; line number, multiplies it by›0190 ; 2, and swaps in the correct›0200 ; bank of extended RAM to bump›0210 ; up the 16-bit line counter.›0220 ; With the extra 64K, each line›0230 ; (0-32767) has its own counter.›0240 ;›0250 SAMPLE›0260 LDA PROFEN ;Is profiler›0270 BEQ OUT ;active?›0280 ;If not, exit.›0290 ;›0300 SPL1›0310 TYA ;Must save Y.›0320 PHA ›0330 LDA PORTB ;Save PORTB.›0340 PHA ›0350 LDY #0 ;Get the›0360 LDA (STMCUR),Y ;line number.›0370 STA MEMPTR›0380 INY ›0390 LDA (STMCUR),Y ;High byte.›0400 BMI ERR ;Line # > 32767.›0410 ;Line ok, so increment counter.›0420 ;›0430 ASL A ;Multiply by›0440 CLC ;two to get›0450 ASL MEMPTR ;address in›0460 ADC #0 ;extended RAM.›0470 CMP #$40 ;Select bank 0?›0480 BCS SB1›0490 LDY #0›0500 BEQ SELC›0510 SB1 CMP #$80 ;Select bank 1?›0520 BCS SB2›0530 LDY #1›0540 BNE SELC›0550 SB2 CMP #$C0 ;Select bank 2?›0560 BCS SB3›0570 LDY #2›0580 BNE SELC›0590 SB3 LDY #3 ;Select bank 3.›0600 SELC AND #$3F›0610 ORA #$40 ;Find counter›0620 STA MEMPTR+1 ;in RAM.›0630 TYA ›0640 ASL A ;Bank * 4 + 193.›0650 ASL A›0660 CLC ›0670 ADC #193›0680 STA PORTB ;Switch to it.›0690 LDY #0 ;Increment the›0700 LDA (MEMPTR),Y ;line's›0710 CLC ;counter.›0720 ADC #1›0730 STA (MEMPTR),Y›0740 BCC EXIT›0750 INY ;Carry, so›0760 LDA (MEMPTR),Y ;increment›0770 ADC #0 ;high half.›0780 STA (MEMPTR),Y›0790 BNE EXIT ;Overflow test.›0800 ERR›0810 LDA #0 ;Stop: Overflow›0820 STA PROFEN ;or line>32767.›0830 EXIT›0840 PLA ›0850 STA PORTB ;Restore PORTB.›0860 PLA ›0870 TAY ;Restore Y reg.›0880 OUT PLA ›0890 RTI ;End of SAMPLE.›