;Keybrd.asm ******************************************************************************* *REVISION HISTORY: * *DATE REV. NO. DESCRIPTION * *March 3, 2000 V1.00 *Written by Exequiel Rarama for the ADAPT 912 ******************************************************************************** ;Keyboard LEFT equ 1 RIGHT equ 2 UP equ 3 DOWN equ 4 DEL equ 7 BS equ 8 CR equ $13 ESC equ $1b ALT equ $11 CTRL equ $14 F1 equ $05 ENTER equ CR EXIT equ ESC ;Keyboard variables are define in "MAIN.ASM" ;keybd_char rmb 1 ;keybd_value rmb 6 ;keybd_count rmb 1 ;keybd_flag rmb 1 ;keybd_timer rmb 1 ;release_flag rmb 1 ;keybd_state rmb 1 ;key_ptr rmb 2 ;keyp_timer rmb 2 ;keyp_flag rmb 1 ;clr_flag rmb 1 ;============================================================================== ; Keyboard Routines ; ----------------- keybd_init bset TSCR,TEN ;Enable timer bset TMSK1,%1000 ;Enable input capture 3 bset TFLG1,%1000 ;Clear input capture 3 interrupt bset TCTL4,%10000000 ;Capture on Falling edge bclr TCTL4,%01000000 ;Capture on Falling edge ldaa #11 staa keybd_count ldx #0 stx keybd_value stx keyp_timer clear_key clr keybd_flag clr release_flag clr keybd_char clr keybd_state clr keyp_flag clr keybd_timer clr clr_flag ldx #disp_buffer+20 stx key_ptr rts keybrd_int ldaa #10 staa keybd_timer ldaa PORTT rola ldd keybd_value rora rorb std keybd_value bset TFLG1,%00001000 ;Clear input capture 3 interrupt dec keybd_count bne keyex ldaa #11 staa keybd_count inc keybd_flag ldx keybd_value+2 stx keybd_value+3 ldaa keybd_value rol keybd_value+1 rola rol keybd_value+1 rola staa keybd_value+2 keyex rti ; get_key ldaa keybd_flag lbeq gky90 ldx #keybd_value+2-1 sei ldab keybd_flag abx ldab 0,x dec keybd_flag cli cmpb #$e0 ;skip if alternate? prefix beq gky90 cmpb #$f0 ;skip if release prefix bne gky10 inc release_flag bra gky90 gky10 ldaa release_flag beq gky20 clr release_flag cmpb #ALT bne gky15 bclr keybd_state,%10 bra gky90 gky15 cmpb #CTRL bne gky90 bclr keybd_state,%01 bra gky90 gky20 tstb bmi gky90 gky30 ldx #key_table_at abx ldaa 0,x staa keybd_char ldaa #1 staa keyp_flag ldaa clr_flag bne gky90 ldaa #0 staa drow_var jsr drow ldx #MSG10 jsr dstr inc clr_flag ldaa #1 staa drow_var jsr drow ldx #MSG9 jsr dstr ldaa #2 staa drow_var jsr drow ldx #MSG9 jsr dstr ldaa #3 staa drow_var jsr drow ldx #MSG9 jsr dstr gky90 clra gkyex rts key_table_at fcb 0,0,0,0,0,F1,0,0,0,0,0,0,0,0,0,0 fcb 0,ALT,0,0,CTRL fcc 'Q1' fcb 0,0,0 fcc 'ZSAW2' fcb 0 fcb 0 fcc 'CXDE43' fcb 0,0 fcc ' VFTR5' fcb 0 fcb 0 fcc 'NBHGY6' fcb 0,0,0 fcc 'MJU78' fcb 0 fcb 0 fcc ',KIO09' fcb 0,0 fcc './L' fcb $38 fcc 'P-' fcb 0 fcb 0,0,0,0 fcc '[=' fcb 0,0,0,0,CR fcc ']' fcb 0,0,0,0 fcb 0,0,0,0,0,0,BS,0,0,0,0,0,0,0,0,0 fcb 0,0,0,0,0,0,ESC,0,0,0,0,0,0,0,0,0 key_char_disp jsr get_key ;get keyboard value ldaa keyp_flag ;display value to lcd beq disp_ex ldaa keybd_char ldy key_ptr cpy #disp_buffer+40 beq line1 cpy #disp_buffer+80 beq line0 bra line2 line0 psha ldaa #1 staa drow_var jsr drow ldx #MSG9 jsr dstr ldaa #2 staa drow_var jsr drow ldx #MSG9 jsr dstr pula ldy #disp_buffer+20 sty key_ptr bra line2 line1 psha ldaa #2 staa drow_var jsr drow ldx #MSG9 jsr dstr ldaa #3 staa drow_var jsr drow ldx #MSG9 jsr dstr pula ldy #disp_buffer+40 sty key_ptr line2 staa 0,y iny sty key_ptr ldaa #1 staa disp_flag clr keybd_char ldx #disp_menu4 stx lcd_state ldx #61*30 ;30 second time out if no key press stx keyp_timer clr keyp_flag disp_ex rts