Закрыл еще один детский гештальт связанный с векторовским бейсиком - быстрые PUT и GET. Это не замена полнофункционального 2.85, это ответвление, т.к. в 2.90 пришлось выпилить: быстрый набор (УС+СС и АР2), SCREEN5 (JCUKEN/QWERTY).
При ширине фрагмента <8 точек работает пиксельный вариант (скорость между 2.84 и 2.85).
При ширине фрагмента >=8 точек работает байтово-пиксельный вариант (в лучшем случае PUT быстрее 2.85 почти в 2 раза, быстрее 2.5 почти в 3 раза; GET примерно аналогично, не стал измерять).
Если добавить ограничений (чтобы ширина была четная или даже кратна 8 точкам), то можно было бы еще ускорить, но есть две причины, почему не стал:
1. Хотелось получить эффект для большинства существующих программ, а там нечетная ширина для GET/PUT встречается.
2. Свободного места для альтернативных вариантов совершенно не осталось.
Пара слов про особенности PUT.
В описании PUT сказано, что аргументы X и Y в диапазоне 0-255. На самом деле они трактуются как двухбайтные знаковые. Отрицатаельные значения позволяют при необходимости постепенно выдвигать картинку слева и/или снизу. Это, кстати, позволяет эмулировать и заворот - делаем 2 PUT одной картинки, один вариант с положительными координатами, другой - с отрицательными (ну и надо их конечно совместить).
У пиксельного PUT есть побочный эффект - цвет последней "значащей" (не фоновой) точки после PUT становится текущим цветом рисования и вывода символов. Повторить такое поведение в байтово-пиксельном варианте во всех случаях к сожалению невозможно - это съело бы весь выигрыш в скорости, да и места нет. К счастью это не критично, попробовал несколько программ/игрушек - все нормально.
Upd 15.05.2023. Исправил GET и PUT (ошибки были в 2.90, в 2.85 все нормально), спасибо metamorpho за багрепорт. PUT немного ускорен.
Upd 18.05.2023. Заметно ускорен PUT (для ширины фрагмента >= 8 точек, особенно при четной ширине в режиме 2), немного ускорен GET (для ширины фрагмента >= 8 точек).
Upd 19.05.2023.
1. Исправлен GET для случая выхода за границу экрана (ошибка появилась в 2.92).
2. Исправлена ошибка в оцифровщике номеров строк (появилась в 2.70) - в некоторых случаях оцифровщик мог пропустить и неправильно перевести в число слишком большие номера.
3. Околоматематические микроускорения: сравнение, изменение знака, сложение, округление, оцифровка номеров строк.
Upd 20.05.2023.
1. Исправил (ошибка появилась в 2.93) и ускорил ON.
2. Добавил в инициализатор распаковщика очистку памяти программы.
3. Ускорены: сложение/вычитание, преобразование в целые (касается не только INT), помещение числа в стек.
Upd 26.05.2023.
54. Ускорены: вывод символов, LINE BF/BS.
55. Немного ускорены: сравнение чисел, оцифровка десятичных чисел, обработчик прерываний, изменение цвета рисования точки.
56. Исправлена ошибка разрешения доступа к плоскостям в PAINT при использовании значений цвета заливки и бордюра с предыдущего вызова PAINT.
Upd 27.05.2023. Заметно ускорена оцифровка десятичных чисел.
Upd 08.06.2023.
58. Оцифровщик номеров строк переведен обратно на "стандарт Microsoft" 0-65529 и ускорен.
59. Вернул "старый" (новый был с 2.57) вариант обработки токенов при вводе символьных переменных в INPUT. Исправлено сообщение об ошибке при вводе неправильной строки в INPUT.
60. Исправил (ошибка была в 2.95-2.96) и ускорил сравнение чисел.
61. Очень много оптимизаций: переходы, разбор имени и поиск переменных, математика, оцифровка чисел, массивы, обработка строк и некоторые другие вещи.
Upd 09.06.2023 - Исправлена (крайне редкая) ошибка поиска номера строки (появилась в 2.97).




Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 

