Ещё вариант: IF HI(X1) AND 255 THEN
Ещё вариант: IF HI(X1) AND 255 THEN
Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).
В линейке 2.5 такой функции нет.
Можно еще учесть симметрию фигуры и границ.
metamorpho(25.12.2024)
Вектор-06Ц reboothttp://metamorpho-games.blogspot.com/p/blog-page.html
Да. Понятно, что это подходит для проверки прямоугольников со стороной от 0 до степени двойки-1. Более общий и, что приятно, более быстрый вариант - использовать массив с отмеченными границами. Приложил пример, еще там учтена симметрия фигуры. К первоначальной идее иллюстрации тройной буферизации это прямого отношения не имеет (тем более "морфинг" более содержательный пример), но пусть летает побыстрее, почему бы и нет. Переводить все переменные на однобуквенные не стал для сохранения читаемости.
metamorpho(25.12.2024)
Твистер на бейсике, душераздирающее зрелище. Надо конечно делать на асме, но если не хочется, то можно воспользоваться мощью современных эмуляторов. В Emu80 (начиная с 4.0.498) LAlt+PgUp пока не станет приемлемо. В Emu можно удерживать F9.
Upd: twister6 совместим и с режимом 12 МГц в VV (F10).
Последний раз редактировалось ivagor; 08.01.2025 в 23:15. Причина: twister6
Improver(10.01.2025), metamorpho(09.01.2025)
Ускорил как смог. Здесь аж двухбайтная машиннокодовая процедура, поэтому twister6 (где только бейсик) тоже оставил.
Improver(10.01.2025), metamorpho(10.01.2025), svofski(10.01.2025)
Округление в клонах msbasic (наверняка где-то уже было)
A=SGN(A)*INT(ABS(A)+.5)
metamorpho(05.02.2025)
В программах иногда используются "бесконечные" циклы с заранее неизвестным числом повторений (может быть реализован выход из цикла по проверке некоторых условий, этот момент я не трогаю).
Как правило для зацикливания в таких случаях используется GOTO назад, например:
1 REM
10 REM
100 REM
199 GOTO234
200 REM
234 REM
999 GOTO199
basic 2.5 - 7900 тактов на итерацию
basic 2.996 - 4100 тактов на итерацию
Можно ускорить подобные циклы используя FOR:
1 REM
10 REM
100 REM
199 FORI=.TO1STEP.:GOTO234
200 REM
234 REM
999 GOTO199 - ошибка, в этой строке должно быть 999 NEXT
basic 2.5 - 5760 тактов на итерацию
basic 2.996 - 2828 тактов на итерацию
Выигрыш очевиден, причем если перед строкой начала цикла (199 в примере) будет больше других строк, то вариант с GOTO будет еще замедляться, а на FOR это не влияет.
В модернизированных бейсиках есть еще один потенциальный плюс - FOR не перебивает кеширование переходов, если они используются и внутри цикла, как в приведенном примере (поэтому в 2.996 относительный выигрыш больше).
Последний раз редактировалось ivagor; 06.02.2025 в 17:03. Причина: подсветил свою ошибку
metamorpho(05.02.2025)
Объясни, пожалуйста, почему добавление лишних операторов что-то ускоряет и почему нельзя было просто написать 999 GOTO234 -- в чем смысл 199 GOTO234 ?
Больше игр нет
metamorpho(05.02.2025)
Лишний FOR исполняется один раз и это потребует
в basic 2.5 - 4980 тактов
в basic 2.996 - 2272 такта
Т.е. за 2-3 итерации (а цикл то "бесконечный") это время будет скомпенсировано и пойдет чистый выигрыш.
А выигрыш за счет
1) Парсинг NEXT быстрее, чем GOTO+номер
2) Адрес начала цикла в NEXT сохранен FORом и сразу переходим куда надо. В GOTO надо еще найти строку (если речь не о модернизированном бейсике и если номер не совпал с "кешем").
Это порча жизни кешированию переходов и ближе к реальности, когда в содержательной программе внутри цикла будут переходы, скорее всего условные.
metamorpho(05.02.2025)
Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)