Classic Computer Magazine Archive PROGRAM LISTING: 85-09/TIMER4.ASM


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

Back to previous page