Эээ. Ммм. Итак, программы у меня выстраиваются в виде карусели из модулей (подпрограмм), если не использую простеньку кооперативную RTOS-ку. Все разделил на модули. Нужен - подключаю, не нужен - не подключаю.
Main:
wdr
rcall Service_Timers // system_timer.inc
rcall Drv_Lcd // lcd_char_display.inc
rcall KBD_DRV // kbd_drv.inc
rcall Proc_Game // proc_game.inc
rjmp Main
Реализация КА в fsm.inc. Чтобы не плодить переход по индексу на каждый автомат, сделал макрос и 1 функцию, которая вызывается при индексном переходе.