Ewgeny7 писал(а): 05.03.2016,20:55
Забавные вещи на версии 2.0 бейсика продолжаются.
Оказывается не работают команды DRAW O и DRAW M. На первой версии Бейсика всё работает согласно описания.
А в версии 2, несмотря на описание их в документации, команды дохлые.
Подтверждаю, тоже с этим столкнулся. Судя по всему разработчики забыли обновлять счётчик глобальной точки после каждого нового вызова DRAW M. (В прошивке не копался, просто наблюдение.)
Так или иначе, в BASIC v.2.0 каждый новый вызов DRAW M не учитывает предыдущие вызовы этого оператора (хотя должен!), а вместо этого всегда начинает отрисовку с глобальной точки (x, y).
Т.е. берём простейшую программу:
Код: Выделить всё
10 CLS
15 LOCATE 15, 0
20 DRAWM FF FF FF FF FF FF FF FF
30 DRAWM FF FF FF FF FF FF FF FF
BASIC v.1.0 «запомнит», что в строке 20 мы отобразили 8 сегментов, т. е. дошли до точки (15, 7), и выполнение строки 30 начнёт уже со следующей точки — (15, 8). BASIC v.2.0, в свою очередь, выполнение строки 30 снова начнёт с точки (15, 0), т. е. «забывает», что перед этим x и у изменились.
Это можно исправить, если после каждого вызова DRAW M принудительно корректировать текущую точку через LOCATE:
Код: Выделить всё
10 CLS
15 LOCATE 15, 0
20 DRAWM FF FF FF FF FF FF FF FF
25 LOCATE 15, 8
30 DRAWM FF FF FF FF FF FF FF FF
Но, конечно, это «костыль». А на самом деле логика оператора DRAW M была сломана и не соответствует документации.
Вообще у меня сложилось впечатление, что каждая новая «фича» ВАСИКа 2.0 вместе с собой добавляла два новых «бага». Вроде бы по сравнению с v. 1.0 много новых функций, но всё очень ненадёжно работает. Кстати, в v.1.0 реализация DRAW M тоже не идеальная: там допущена утечка памяти, так что если выполнение оператора зациклить, то через пару итераций вся свободная память израсходуется.
Ну а целом чем больше МК-90 я занимался, тем сильнее в нём разочаровывался.