*Software debouncing af taster koblet til PortA
*konstanter
regbase         equ     $1000           ;base address for registre
keybd           equ     $00             ;port for kontakter
ten_ms          equ     2000            ;gennemloeb til forsinkelse

tastenter       equ     %00000001       ;mapping af enter
tastesc         equ     %00000010       ;mapping af esc
tastop          equ     %00000100       ;mapping af op
tastned         equ     %00001000       ;mapping af ned

tasthusk        rmb     1               ;gammelt tastetryk
                                        ;bruges af kbd_scan
****************************************************
*start paa kodesegment
        org     $f800
        ldx     #regbase                ;laeg baseadresse i x-register
*******************************************
main                                    ;eksempel paa en main_ der laeser
                                        ;fra tastaturet
        jsr     kbd_dbnc
        bmi     main                    ;start forfra hvis bare prel
        jsr     kbd_scan                ;Hvis ikke, spring til flankedetect
        beq     main                    ;start forfra hvis ikke opflanke

                                        ;hvis vi er naet saa langt har vi
                                        ;haft en op-flanke

        ;OPSAETNING AF TASTER I DENNE RUTINE*
        brset   keybd,x tastenter main_ent
        brset   keybd,x tastesc main_esc
        bra     main

main_ent
        ldaa    $04,x
        coma
        staa    $04,x
        bra     main

main_esc
        ldaa    $04,x
        coma
        staa    $04,x
        bra     main

kbd_scan
        pshb
        psha
        ldab    keybd,x                     ;aflaes taster
        ldaa    tasthusk                    ;hent forrige taster
        stab    tasthusk                    ;husk de aktuelle
        coma
        anda    tasthusk
        pula
        pulb
        rts                             ;returner, oplysning ligger i Z flag

*********Debounce rutine - Andrer Z-flag*********
kbd_dbnc
        pshy
        pshx
        psha

        ldy     #regbase
        ldx     #ten_ms
kbd_wait    nop                             ;vent i 10 ms
        nop
        dex
        bne     kbd_wait
        ldaa    keybd,y                 ;tjek tasten igen

        pula
        pulx
        puly

        rts
