сходу заметил в подпрограмме "INITIALIZE GENERAL PURPOSE FLAGS":
AY0 = IO(DIRS);
AY0 = 0x000F; <- потеряется исходное значение DIRS
AR = AY0 OR AY0; <- зачем? (0x000F+(лог.ИЛИ)0x000F=0x000F)
IO(DIRS) = AR;
хотя данный глюк, на работу не влияет, но вероятно есть еще ошибки, вам нужно детально смотреть настройки регистров и сам код