@Sikor, no to może jakiś taki zbieg właśnie u mnie zachodził. Ale u mnie kod żyje, a jak nad czymś siedzę, to po kilku godzinach mam już zupełnie coś innego niż miałem na początku, więc nawet nie mam już jak swojego błędu odtworzyć.
Natomiast odpaliłem Twój programik, zmodyfikowałem mu tylko linię, żeby po return wpisywał K=9.
1 DIM A$(1)
2 Z=0
10 GOSUB 100
12 GOTO 10
100 K=0
101 INPUT A$:IF A$="" THEN K=9
102 IF A$="X" THEN K=1
104 Z=Z+1:? A$,K,ASC(A$),Z
105 RETURN
READY
RUN
?X
X 1 88 1
?A
A 0 65 2
?
9 65 3
?I faktycznie to będzie ten problem.
Za pierwszym razem wpisałem X i się K ustawiło na 1,
za drugim razem wpisałem A i się K ustawiło na 0,
za trzecim razem dałem tylko return - i zadziałał warunek sprawdzający A$="", ale ASC(A$) pokazał kod poprzedniego klawisza, czyli A.
No i tu jest pies pogrzebany, mamy z jakiegoś powodu sytuację, że A$ jest jednocześnie pusty i niepusty. Nie mam pod ręką żywego Atari, żeby sprawdzić, czy też się tak zachowa. Testy robiłem na Altirra 3.20 w zwykłym Basicu.
@Pin, PROC i EXEC jest fajny, przejrzystość kodu bez dwóch zdań itd. Jak robisz pojedynczy skok, to też PROC EXEC zajmie Ci mniej pamięci niż GOSUB RETURN, bo PROC/ENDPROC zajmuje mniej niż RETURN. Ale za to EXEC zajmuje więcej niż GOSUB, więc jak masz do wykonania dziesiątki skoków do tego samego podprogramu, to każdy EXEC zajmuje więcej pamięci niż GOSUB i zaczyna program puchnąć. Akurat to co grzebię jest na tyle duże, że zależy mi na pamięci i każdy bajt się liczy, więc robię GOSUB.