Még rágódom rajta, valóban egy kicsit bonyolult. Azt a részt nem nagyon értem, hogy honnan tudni, hogy a buffer tele van? Hiszen a nulla is egy gombnak az értéke, praktikusan a nulláé
azért van a BUFFERFULL flag, ami jelzi ezt. Ha akarsz
ITT belenézhetsz. keyboard_101.zip
Bocs, de napok óta nem ültem gép előtt.
Én nem olyan profi, cserébe egyszerű módszert szoktam használni. Elindítom a billentyűzet beolvasását mátrixból 12 lépésben. Első sor olvasásához kimenet bekapcsol, majd egyenként nézem a bemeneteket. Ha van találat, bekapcsolok egy beírok egy értéket egy változóba (az adott gomb értékét), kiugrok az olvasási rutinból a beírási rutinba. Ott először ellenőrzök egy bitet, ami azt mondja meg, volt-e már itt a program. Ha volt kiugrok onnan, és megy a program a dolgára. Ha nem volt, először bekapcsolom ezt a bitet, majd elvégzem amit kell a vátozóba írt adattal, majd megy tovább a program. A bit akkor törlődik, ha a beolvasás lefutott és nem talált megnyomott gombot.
Megintcsak köszönöm mindkettőtöknek!

Nagyon jó ötleteket adtatok. Végül egy talán nem túl elegáns, de egyszerű megoldást találtam ki. A gombok értékei felülírják a váltózó értékét, 0-12 közötti értékkel. A változó értékének legfelső bitjét 1-be állítom a gombok rutinjának elején, utána ezt ellenőrzöm a kiértékelés során. Ha egy maradt, akkor nem volt gombnyomás, ha nulla, akkor megnézem milyen érték íródott bele.