* timertest.asm * Test our ability to move characters around the display at will * under control of the HC11 timer. #include "ascii.asm" #include "registers.asm" #include "buffalo.asm" org JTOC1 jmp myISR org $2000 jmp main #include "lcd.asm" glyph_table equ 0 ; No glyph table xcoord: rmb 1 ycoord: rmb 1 mydel: rmb 2 main: jsr init_LCD ldaa #DISP_ONOFF|D_DISP ; No blink/cursor jsr send_cmd ldaa #0 ; Write an "A" in upper-left corner of display. ldab #0 staa xcoord stab ycoord ldaa #'A jsr write_lcd ldx #$ffff stx mydel * Initialize timer alarm setting ldd TCNTH ; Load current timer value addd mydel ; Add my delay std TOC1H ; Set timer output compare 1 ldx #msg3 ; Some diagnostic messages jsr outstrg ldx #TCNTH jsr out2bsp ldx #msg4 jsr outstrg ldx #TOC1H jsr out2bsp jsr outcrlf * Turn on TOC1 interrupt * ldx #myISR ; My ISR * stx JTOC1+1 ; Store in jumptable for TOC1. ldx #msg5 jsr outstrg ldx #JTOC1+1 jsr out2bsp jsr outcrlf ldaa #OC1I ; Select output compare 1 interrupt staa TMSK1 ; Set it in timer interrupt mask 1 register staa TFLG1 ; Clear OC1 flag cli ; Enable interrupts inf: ldx #0 jsr dloop ldx #msg2 jsr outstrg bra inf msg1: fcc "We're in the ISR." fcb EOT msg2: fcc "Main loop running." fcb EOT msg3: fcc "Initial timer setting: " fcb EOT msg4: fcc "TOC1 alarm set to: " fcb EOT msg5: fcc "Jumptable entry set to: " fcb EOT myISR: ldd TOC1 ; Load current alarm setting addd mydel ; Add my delay std TOC1 ; Set timer output compare 1 * ldx #msg1 * jsr outstrg ldaa xcoord ldab ycoord jsr gotoxy ldaa #SPACE jsr write_lcd ldab ycoord incb cmpb #4 bne yok ldab #0 stab ycoord ldaa xcoord inca cmpa #20 bne xok ldaa #0 xok: staa xcoord * jsr adjust_delay yok: stab ycoord ldaa xcoord ldab ycoord jsr gotoxy ldaa #'A jsr write_lcd ldx #TFLG1 bset 0,x OC1F rti adjust_delay: ldd mydel lsra ; shift D right rorb std mydel ldx #mydel jsr out2bsp jsr outcrlf rts