Если кто коллекционирует баги в синклер-бейсике - то вот им для полноты коллекции еще один, найденный мною
Этот баг заключается в том, что остаток строки после REM бейсиком должен игнорироваться, однако в некоторых случаях он не игнорируется, а выполняется.
Знание этого бага будет особенно полезно тем, кто смешивает код на бейсике и на ассемблере (размещая его в REM).
Ситуации таких три: NEXT, DATA и DEF FN.
Например, запустив программу:
10 FOR i=10 TO 1
20 PRINT "Skipped loop"
30 REM: NEXT i: PRINT "Ku-ku!": STOP
40 NEXT i
50 PRINT "Correct"
Получим сообщение:
Ku-ku
9 STOP statement, 30:4
----
Пример с DATA:
10 REM: DATA "Ku-ku!"
20 DATA "Correct"
30 READ a$: PRINT a$
В результате работы программы получится "Ku-ku!"
---------
Пример с DEF FN:
10 REM: DEF FN a(x)=0
20 PRINT FN a(0)
Вместо сообщения "P FN without DEF, 20:1" программа выведет сообщение "Q Parameter error, 20:1".
--------
Я когда-то точно нашел в прошивке бейсика, где находится и как можно пофиксить этот баг. Сейчас уже забыл, но примерно помню, что там есть процедура поиска оператора (вызывается во всех вышеперечисленных случаях), и эта процедура не учитывает, что оператор REM не заканчивается двоеточием.