0100 ;TIMER 2›0110 ;BY FRED PINHO›0120 ;(c) 1985, ANTIC PUBLISHING›0160     *=  $0600   ;RELOCATABLE›0170 ;SINCE MAC/65 USES PAGE 6, ASSEMBLE TO DISK. RECOVER FILE WITH DOS.›0180 ;FOR DEBUGGING, ASSEMBLE WITH AN OFFSET VIA THE .SET AND .OPT DIRECTIVES.›0190     .TITLE "LISTING 2"›0200     .TAB 14,18,26›0210     .SET 1,4›0220 SETVBV = $E45C›0230 XITVBV = $E462›0240     CLD         ;MUST BE DONE›0250     LDA 1021    ;TIMER ACTIVATED?›0260     BNE GOON    ;YES. SKIP AROUND›0270     LDA #1      ;NO. SET DELAY FOR IMMEDIATE DISPLAY›0280     STA 1028›0290     LDA #255    ;SET TO INDICATE ACTIVE TIMER›0300     STA 1021›0310     STA 558     ;SET TIMER FLAG›0320     LDY 1025    ;DESIRED TIME,LOW›0330     LDX 1026    ;HIGH›0340     LDA #5      ;TIMER 5 TO BE ENABLED›0350     JSR SETVBV  ;DOES THE JOB›0360 GOON DEC 1028   ;CALCULATE TIME?›0370     BNE EXIT    ;NOT YET. BYPASS ROUTINE›0380     LDA #10     ;YES. RESET DELAY COUNTER›0390     STA 1028›0400     LDA 544     ;GET TIMER LO BYTE›0410     STA 1022›0420     LDA 545     ;HI BYTE›0430 DIVIDE LDX #8   ;DIVIDE BY 60›0440 LOOP1 ASL 1022  ;TO GET TOTAL SECONDS›0450     ROL A›0460     CMP #60›0470     BCC BRCH1›0480     SBC #60›0490     INC 1022›0500 BRCH1 DEX ›0510     BNE LOOP1›0520     STA 1023›0530 ;TOTAL SECONDS STORED IN REGISTER 1022›0540     LDX #8      ;DIVIDE BY 60›0550     LDA #0      ;TO GET MINUTES›0560 LOOP2 ASL 1022›0570     ROL A›0580     CMP #60›0590     BCC BRCH2›0600     SBC #60›0610     INC 1022›0620 BRCH2 DEX ›0630     BNE LOOP2›0640     STA 1023›0650 ;MINUTES IN 1022,REMAINING SECONDS IN 1023›0660 ;NOW DIVIDE BY 10 TO GET HI AND LO DIGITS OF DECIMAL NUMBER›0670     LDX #8›0680     LDA #0›0690 LOOP3 ASL 1023›0700     ROL A›0710     CMP #10›0720     BCC BRCH3›0730     SBC #10›0740     INC 1023›0750 BRCH3 DEX ›0760     BNE LOOP3›0770     STA 1024›0780 ;SECONDS(TENS PLACE) IN 1023›0790 ;SECONDS(UNIT PLACE) IN 1024›0800 DISPLAY CLC     ;STORE 3 DIGITS INTO DISPLAY AREA›0810     LDY #0›0820     LDA 1022    ;MINUTES›0830     ADC #16     ;CONVERT TO SCREEN CODE›0840     STA (208),Y ;STORE›0850     INY ›0860     LDA #26     ;SCREEN CODE FOR ':'›0870     STA (208),Y›0880     INY ›0890     LDA 1023    ;SECONDS(HI)›0900     ADC #16›0910     STA (208),Y›0920     INY ›0930     LDA 1024    ;SECONDS(LO)›0940     ADC #16›0950     STA (208),Y›0960     LDA 558     ;TIMER DONE?›0970     BEQ DISABLE ;YES›0980 EXIT JMP XITVBV ;NO. JUST RETURN TO VBI›0990 DISABLE LDA #$62 ;RESTORE ORIGINAL VBI VECTOR›1000     STA 548›1010     LDA #$E4›1020     STA 549›1030     JMP XITVBV  ;EXIT›1040     .END ›