*--------------------------------------------------------------- * timertest3.asm - Program to test timer routines. * * This version uses the general routine setup_periodic_alarm * defined in "timer.asm" to set 5 periodic alarms with varying * periods. Each of them controls a different letter which moves * across the LCD screen, each at a different speed. *---------------------------------------------------------------- *#include "ascii.asm" #include "registers.asm" #include "buffalo.asm" org $2000 jmp main #include "lcd.asm" *#include "keypad.asm" #include "timer.asm" glyph_table equ 0 ; No glyph table SPINNER equ 5 ; Slowdown factor for all periodic timers main: sei jsr init_LCD ldaa #DISP_ONOFF|D_DISP ; No blink/cursor jsr send_cmd ldaa #SPINNER staa acount staa bcount staa ccount staa dcount staa ecount ldaa #0 ; Select alarm #0 (really this means OC1). ldx #suba ; Select subroutine "suba" (below). ldy #$9000 ; Select my delay value. jsr setup_periodic_alarm ; Call mysub every mydel timer ticks. ldaa #1 ; Select alarm #1 (really this means OC2). ldx #subb ; Select subroutine "subb" (below). ldy #$b000 ; Select my delay value. jsr setup_periodic_alarm ; Call mysub every mydel timer ticks. ldaa #2 ; Select alarm #2 (really this means OC3). ldx #subc ; Select subroutine "subc" (below). ldy #$d000 ; Select my delay value. jsr setup_periodic_alarm ; Call mysub every mydel timer ticks. ldaa #3 ; Select alarm #3 (really this means OC4). ldx #subd ; Select subroutine "subd" (below). ldy #$f000 ; Select my delay value. jsr setup_periodic_alarm ; Call mysub every mydel timer ticks. ldaa #4 ; Select alarm #4 (really this means OC5). ldx #sube ; Select subroutine "subd" (below). ldy #$ffff ; Select my delay value. jsr setup_periodic_alarm ; Call mysub every mydel timer ticks. cli ; Enable interrupts spin: wai jmp spin xa: fcb 0 xb: fcb 0 xc: fcb 0 xd: fcb 0 xe: fcb 0 clear: ldaa #SPACE jsr write_lcd incamod20: inca cmpa #20 bne incamod20_end clra incamod20_end: rts acount: fcb 0 suba: dec acount bne return ldaa xa ldab #0 jsr gotoxy jsr clear ldaa xa jsr incamod20 staa xa ldab #0 jsr gotoxy ldaa #'A jsr write_lcd ldaa #SPINNER staa acount return: rts bcount: fcb 0 subb: dec bcount bne return ldaa xb ldab #1 jsr gotoxy jsr clear ldaa xb jsr incamod20 staa xb ldab #1 jsr gotoxy ldaa #'B jsr write_lcd ldaa #SPINNER staa bcount rts ccount: fcb 0 subc: dec ccount bne return ldaa xc ldab #2 jsr gotoxy jsr clear ldaa xc jsr incamod20 staa xc ldab #2 jsr gotoxy ldaa #'C jsr write_lcd ldaa #SPINNER staa ccount rts dcount: fcb 0 subd: dec dcount bne return ldaa xd ldab #3 jsr gotoxy jsr clear ldaa xd jsr incamod20 staa xd ldab #3 jsr gotoxy ldaa #'D jsr write_lcd ldaa #SPINNER staa dcount rts ecount: fcb 0 sube: dec ecount bne rete ldaa xe ldab #3 jsr gotoxy jsr clear ldaa xe deca bpl okd ldaa #19 okd: staa xe ldab #3 jsr gotoxy ldaa #'E jsr write_lcd ldaa #SPINNER staa ecount rete: rts