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.
Back to previous page