Бейсики 2.5+ унаследовали от РКшного микрона неприятную особенность - после печати каждых 128 символов (если в конце PRINT стоит ";") происходит непрошеный перевод строки. А svofski нашел, когда это приводит к ошибке, но тот случай легко правится на уровне программы на бейсике. В качестве примера приложил простейшую программу, которая печатает "лабиринт" (на C64 гораздо больше похоже на лабиринт, т.к. там символы могут занимать все знакоместо без зазоров по горизонтали и вертикали). Если хочется без паразитных переводов строки, то можно попробовать эту программку в Basic-M
Это не все неприятности, касающиеся печати символов на экране. Дальше вспомнил, что функция POS() не соответствует описанию. Она не дает позицию курсора в строке, она возвращает номер напечатанного после перевода строки символа по модулю 128. Совпадение с позицией курсора будет при выполнении условий:
1. Был перевод строки и после этого печать с начала строки.
2. Напечатано не более 42 символов.
Это уже недоработка Темиразова и Соколова при адаптации микрона на вектор, в оригинальном РКшном POS() работает правильно. Проблема усугубляется тем, что авторы бейсика 2.5 в паре мест сами используют эти данные как горизонтальную позицию курсора.
В одном месте от РКшного бейсика-микрон осталась проверка которая не работает на векторе, т.к. не поменяли 64 символа в строке на 42.
В другом, там где обрабатывается запятая в PRINT, поменяли, но не совсем правильно.
Совокупность перечисленных причин приводит к довольно своеобразному "паттерну печати" при активном выводе символьной и числовой информации на экран с использованием разделителей "," и ";". Даже не знаю, стоит ли все это править в 2.9+ или считать все это фичами, а не багами. Или оставить доработки до гипотетического 3.0.
И еще нашел ошибку в 2.995 - не совсем корректно обрабатывается клавиша F5, это поправлю.




Ответить с цитированием