0100 ; BASIC PROFILER SOURCE CODE¢0110 ; BY STAN LACKEY¢0120 ; (c)1988, ANTIC PUBLISHING INC.¢0150 ;¢0160 ; Definitions:¢0180 TEMP1 = $CB ; Temps used in routines¢0190 TEMP2 = $CD¢0200 TEMP3 = $CF¢0210 STMCUR = 138 ; Pointer into user program¢0220 RAMTOP = 106¢0250 ;¢0260 *= $9F00¢0270 ;¢0280 PROFEN¢0285 .BYTE 0 ; Flag to enable Profiler¢0290 ;¢0300 ; SAMPLE is the timer interrupt¢0310 ; routine. It takes the current¢0320 ; line number, divides it by 10¢0330 ; and increments that 16-bit¢0340 ; location in the RAM above¢0345 ; RAMTOP.¢0350 ;¢0360 SAMPLE¢0365 LDA PROFEN ; Sense enable¢0370 BNE SPL1¢0375 ;¢0380 PLA ; It's off...¢0390 RTI ; just return.¢0395 ;¢0400 SPL1¢0401 TYA ¢0410 PHA ; Must save Y¢0420 LDY #0¢0430 LDA (STMCUR),Y ; Get line #¢0440 STA TEMP1¢0450 INY ; Point to high¢0460 LDA (STMCUR),Y¢0470 STA TEMP1+1¢0480 BMI EXIT ; Exit if line¢0490 ; num is neg.¢0500 ; Now, divide line number by 10¢0510 LDA # <20480 ; Divisor:¢0520 STA TEMP2 ; #10, Shifted¢0530 LDA # >20480¢0540 STA TEMP2+1¢0550 LDA #0¢0560 STA TEMP3 ; Clear quotient¢0570 STA TEMP3+1¢0580 LDY #11 ; Loop count¢0590 DIVLP¢0595 SEC ¢0600 LDA TEMP1¢0610 SBC TEMP2¢0620 STA TEMP4 ; 16-bit subtr,¢0630 LDA TEMP1+1 ; ddnd-dvsr¢0640 SBC TEMP2+1¢0650 STA TEMP4+1¢0660 CLC ; Init.¢0670 BMI NOBIT ; Shift 0 in¢0680 ; dvsr > ddnd¢0690 LDA TEMP4¢0700 STA TEMP1 ; ddnd > dvsr¢0710 LDA TEMP4+1 ; Copy new ddnd¢0720 STA TEMP1+1¢0730 SEC ; Shift 1 in¢0740 NOBIT¢0745 ROL TEMP3 ; Shift into¢0750 ROL TEMP3+1 ; quotient¢0760 LSR TEMP2+1 ; Shift dvsr¢0770 ROR TEMP2¢0780 DEY ¢0790 BPL DIVLP ; Loop next bit¢0795 ;¢0800 ; Result is left in TEMP3.¢0810 ; Add that result to RAMTOP.¢0820 ASL TEMP3 ; 2x result for¢0830 ROL TEMP3+1 ; 2-byte access¢0840 CLC ¢0850 LDA TEMP3+1¢0860 ADC RAMTOP ; TEMP3 is now¢0870 ADC #4 ; the pointer¢0880 STA TEMP3+1 ; into the RAM.¢0890 LDY #0¢0900 CLC ¢0910 LDA (TEMP3),Y ; Get cell to¢0920 ADC #1 ; increment¢0930 STA (TEMP3),Y¢0940 BNE EXIT ; If inc. to 0,¢0945 ;¢0950 INY ¢0960 CLC ¢0970 LDA (TEMP3),Y ; incr high¢0980 ADC #1 ; half¢0990 STA (TEMP3),Y¢1000 BPL EXIT ; Test overflow¢1005 ;¢1010 LDA #0 ; Stop prof¢1020 STA PROFEN ; on overflow¢1030 EXIT¢1035 PLA ¢1040 TAY ; Restore Y¢1050 PLA ; and A¢1060 RTI ; End of SAMPLE¢1065 ;¢1070 TEMP4¢1075 .WORD 0 ; Temp used in division¢əəəəəəəəə