В обсуждении BASCOM не хватало цифр, для примера Мандельброт ускоряется компилятором примерно в 3 раза.
В обсуждении BASCOM не хватало цифр, для примера Мандельброт ускоряется компилятором примерно в 3 раза.
svofski(26.02.2023)
Краткая история моих пробований:
1. Конверснул baskeys.txt в baskeys.bas с использованием Vector06CBasic.exe. Попробовал загрузить в v06x_3-theydo-win64, там в комплекте шли скрипты и все что нужно. Файл при загрузке выдал ошибку, там что-то не то с последней строкой. Кто виноват - Vector06CBasic или скрипты я не разбирался.
2. Попробовал конверснуть baskeys.txt в baskeys.bas с использованием bas2asc.py. Выдает какую-то ошибку, подробно не разбирался (все же конверсии в cas в других эмуляторах запускались). Возможно стоило взять для конверсии последний exe.
3. Можно было еще записать .bas на образ дискеты и запустить дисковым бейсиком, но это я не пробовал.
Проще всего для пользователя было бы перехватывать cload или bload в бейсике. Если это сложно для реализации, то хотя бы приложить набор скриптов, как в v06x_3-theydo-win64 (но тут еще надо разобраться с конверсией в bas, по крайней мере это касается лично меня и baskeys)
Спасибо за подробный список проблем! Похоже тут потребуется работа мысли, может быть даже неоднократная.
Больше игр нет
Записал baskeys.bas изготовленный с использованием Vector06CBasic на образ fdd и попробовал в v06x-godot-8 - работает.
svofski(27.02.2023)
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Могу выложить, но наверно уже не надо, я понял, на чем спотыкался bas2asc. Vector06CBasic.exe при сохранении в txt добавляет в начале байты EF BB BF. Если их удалить, то bas2asc нормально конвертит txt->bas (в cas не пробовал, но наверняка тоже нормально). txt (и bas) я не выкладывал, т.к. думал, что конвертером из cas можно получить и bas и txt. И это правда, но, как оказалось, есть нюанс.
Ставлю эксперименты - пытаясь найти самый быстрый вариант вывода уровня на экран.
Протестировал три следующих варианта:
вариант_1 = вывод спрайта 8Х8 используя рисование прямоугольника с маской (в одну плоскость)
вариант_2 = вывод спрайта 8Х8 используя прямую запись в экран через POKE (в одну плоскость)
вариант_3 = вывод спрайта 8Х8 используя подпрограмму в машинных кодах и её вызов через USR (в одну плоскость)
Оказалось что все три варианта практически почти равны по скорости - все работают медленно.
Пробовал отключать строку 103 - во всех вариантах это ничего не меняло в скорости.
Думал второй вариант будет быстрее первого, т.к. прямая запись в экран без лишних команд, но увы.
Далее возлагал надежды на вариант третий поскольку машинные коды используются, но к удивлению
тормоза такие же, я так предполагаю сам вызов USR в Бейсике громоздкий. Выходит если подпрограмма в
машинном коде очень короткая в смысле в отношении графики вывод 8х8 точек, то выгоды при использовании USR, от неё нет.
Вывод пока такой - либо продолжать делать без машинных кодов и принять тормоза как есть.
Либо переходить на более объёмные машинные коды, но тогда кажется потеряется смысл написания программы в Бейсике.
90 REM --------- программа вывода уровня на экран
98 CLS:FAN=2:RESTORE 650
вариант_1 99 XT=0:YT=248
вариант_2 99 BD=33015:CD=BD
вариант_3 99 BD=128:TY=247:CD=BD
100 FOR I=0 TO 31
102 FOR J=0 TO 31
103 READ A:GROT(J,I)=A
106 IF A=0 THEN GOTO 201: REM ----------- ПУСТО
вариант_1 107 IF A=1 THEN SCREEN 2,8:COLOR 8:SCREEN 3,0,239,239,239,0,254,254,254:GOTO 200:REM СТЕНА
вариант_2 107 IF A=1 THEN POKE BD,0,239,239,239,0,254,254,254:GOTO 201: REM СТЕНА
вариант_3 107 IF A=1 THEN POKE 32578,TY:POKE 32579,BD:KB=USR(&7F40):GOTO 201: REM СТЕНА
200 PLOT XT,YT,2:LINE STEP 7,7,BF: REM --- РИСУЕМ ЭЛЕМЕНТЫ SCREEN 2,15:
вариант_1 201 XT=XT+8
вариант_2 201 BD=BD+256
вариант_3 201 BD=BD+1
204 NEXT J
вариант_1 205 XT=0:YT=YT-8
вариант_2 205 BD=CD:BD=BD-8:CD=BD
вариант_3 205 BD=CD:TY=TY-8
206 NEXT I
Последний раз редактировалось metamorpho; 28.02.2023 в 23:44.
Вектор-06Ц reboothttp://metamorpho-games.blogspot.com/p/blog-page.html
Все таки программа на бейсике должна быть на бейсике, а не в машинных кодах, иначе теряется весь ее смысл, исключение может быть разве что опрос клавиатуры ибо по другому ни как. И весь челендж как раз сделать быстро (на сколько возможно) именно операторами бейсика.
Здесь можно скачать актуальные версии Virtual Vector (VV)
metamorpho(01.03.2023)
После того, как разобрался с конверсией txt->bas с использованием bas2asc оставался последний вопрос
Тот bas, который делает bas2asc нормально грузится скриптом в v06x_3-theydo-win64. Единственная разница, которую вижу в basах bas2asc и Vector06CBasic - bas2asc добавляет больше нулей. Не разбирался, как работает загрузочный скрипт v06x, вероятно он ожидает, что 3 нуля в конце программы будут в составе bas (и это пожалуй правильно), а Vector06CBasic этого не обеспечивает.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)