
PROGRAM LISTING: 85-09/TIMER2.ASM
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
Back to previous page