Ускорил умножение, некоторые околоматематические процедурки и чуть-чуть FOR..NEXT/RETURN. Без упаковки сократил пару байт, а упакованный короче на 18. На глаз практически незаметно, но преодолен важный для меня рубеж - 2.81 обогнал пзушный бейсик 6128 во всех используемых мною тестах, математика держалась до последнего. Т.е. даже там, где эффект оптимизации минимален, он превысил разницу между 8080 и 8085 с учетом векторовского торможения.
Upd 04.05.2023. Заметно ускорил эллипсы и LINE BF/BS, немного быстрее стали paint, дуги, круги, вывод символов и деление, еще несколько мелких оптимизаций. Доработал PAUSE - теперь дает практически одинаковую задержку на всех типах процессоров. При рисовании "обратных" (от большего к меньшему) дуг использовалась стековая процедура обмена слов временно запрещавшая прерывания. На мой взгляд это было совершенно излишне, переделал без стека и без запрета прерываний. Эллипсы отмечу особо - они на 35-40% быстрее 2.5 или на 30-35% относительно 2.81.
Упакованный 2.82 на 49(!) байт короче 2.81 за счет оптимизации и бейсика и инициализатора распаковки. Если не блюсти размер, то можно еще ускорить умножение, деление и некоторые другие вещи, но ускорение будет не таким уж большим, решил лучше соблюдать культуру веса.
Upd 07.05.2023.
Исправил ошибку в SCREEN4 (скорость обмена с магнитофоном) - было небольшое отклонение от 2.5. В самооправдание скажу, что я не один такой ошибавшийся, в дизассемблере Филиппова и в бейсике 6128 в SCREEN4 тоже ссылки вместо констант, но у себя я теперь исправил. Наверное многие знают, но на всякий случай отмечу - в описании бейсика ошибка, диапазон аргумента SCREEN4 от 40 до 255, не до 460.
В 2.82 слегка поломал эллипсы очень сильно сплюснутые по горизонтали. Не то чтобы смертельно, но результат отличался от 2.5, исправил. Скорость не уменьшилась, даже немного увеличилась.
Освободил сравнительно много места и смог вернуть обратно быстрый набор по УС+СС+буква. К сожалению пришлось убрать восьмеричные числа (их не было в оригинальном 2.5, появились в 2.61), надеюсь svofski не будет меня сильно ругать. В связи с возвращением быстрого набора бейсик опять разбух, но не до тех значений, которые были на момент его удаления (с тех пор многое оптимизировал по размеру): упакованный 2.72 - 12958 байт, 2.83 - 12855 байт. Интересный факт - salvador сжал на байт сильнее, чем zx0.
Полностью переписал деление в плавучке, стало быстрее.
Upd2 07.05.2023. В 2.84 вернул восьмеричные, доработал поддержку шестнадцатеричных и восьмеричных.
Upd 11.05.2023: Переделал в компактную форму таблицу перекодирования в QWERTY (SCREEN5,1). Теперь POKE и PEEK не могут обращаться к этой таблице (диапазон 640-767). Вместе с несколькими другими оптимизациями освободилось место, что позволило ввести и новые и ранее отброшенные (из-за экономии памяти) улучшения:
1. Оптимизированы PUT и GET. PUT на 17% быстрее 2.84 и на 36% быстрее 2.5.
2. Немного ускорены: проверка следующего символа, умножение, сложение/вычитание и обработчик прерываний.
В упакованном виде 2.85 на 34 байта короче 2.84.
Upd 19.05.2023:
1. Исправлена ошибка в оцифровщике номеров строк (появилась в 2.70) - в некоторых случаях оцифровщик мог пропустить и неправильно перевести в число слишком большие номера.
2. Околоматематические микроускорения: сравнение, оцифровка номеров строк.
Upd 20.05.2023:
46. Исправил (ошибка появилась в 2.86) и ускорил ON.
47. Добавил в инициализатор распаковщика очистку памяти программы.
Upd 26.05.2023:
48. Ускорены вывод символов, LINE BF/BS.
49. Немного ускорены: сравнение чисел, обработчик прерываний, изменение цвета рисования точки.
50. Исправлена ошибка разрешения доступа к плоскостям в PAINT при использовании знчений цвета заливки и бордюра с предыдущего вызова PAINT.
Upd 08.06.2023:
51. Оцифровщик номеров строк переведен обратно на "стандарт Microsoft" 0-65529 и ускорен.
52. Вернул "старый" (новый был с 2.57) вариант обработки токенов при вводе символьных переменных в INPUT. Исправлено сообщение об ошибке при вводе неправильной строки в INPUT.
53. Чуть ускорен пропуск конца строки.


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