Code asm:
dbict equ $10 ;debounce Inactive count dbact equ $20 ;debounce Active count swtank ds.b 1 ;btns/sws input tank swprev ds.b 1 ;previous sw state for debouncing Sw_In: psha mov PTAD,swtank ;get current Sw state lda swtank cmp swprev ;current=previous: Xit beq SWIXit mov #dbict,dbIctr ;load debounce Inactive counter SwDbLL: mov #dbact,dbActr ;load debounce Active counter mov swtank,swprev ;put current->previous dbnz dbIctr,SwDbLD ;only load active debounce N times bra SWIXit ;Not full active == off SwDbLD: bsr SwRead ;get current Sw state lda swtank cmp swprev ; :: previous bne SwDbLL ;Any bounce to different state resets counter dbnz dbActr,SwDbLD ;must stay on for #dbact counter loops SWIXit: pula rts