ну елси дело только в диз-асме, то вот коллективное творчество сознательной части форума
https://zx-pk.ru/threads/14994-kniga...a-russkom.html
Давнооооооо это было (с)
ну елси дело только в диз-асме, то вот коллективное творчество сознательной части форума
https://zx-pk.ru/threads/14994-kniga...a-russkom.html
Давнооооооо это было (с)
Profi v3.2 -=- Speccy2010,r2
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Спасибо большое )
А то кроме как воткнутся в первую по счету строку и пропрыгать до нужной (используя длину каждой строки) больше ничего на ум не приходит из дешевых вариантов (что бы не хранить в памяти адреса каждой строки и не маяться с ними при вставке строки куда-нибудь посередине). Надо умных людей почитать, как у них это сделано было ))
Последний раз редактировалось Dr.Potapov; 25.02.2019 в 21:03.
Dr.Potapov, цимес в том, что команды прехода в SOS могут использовать, как непосредственно числовые значения в качестве параметров, так и переменные, либо логически-математические выражения.
Чем плох такой вариант? Самое, главное, зачем изобретать велосипед?!
Попытайтесь внятно формализовать задачу - зачем вам это надо. Возможно проще будет написать программку, для формирования где-нибудь в ячейках паямяти массива адресов переходов команд GOTO перед финальным сохранением программы?
- - - Добавлено - - -
Прикол в том, что аргумент перехода на строку может ссылаться на строку с номером, которого нет. При этом будет выполнен переход к следующей ближайшей за ней.
Когда есть, но не знаешь где - это все равно, что нету.
Да без проблем.
Пошагово. Начинаем с пустого кэша.
Переход на строку 100. Ячейка кэша пустая. Ищем строку, адрес заносим в ячейку кэша, соответствующую строке 100.
Переход на строку 100. Ячейка кэша содержит адрес строки 100, проверяем номер - всё ок.
Переход на строку 321. Ячейка кэша пустая. Ищем строку, находим строку 330, адрес заносим в ячейку кэша, соответствующую строке 321.
Переход на строку 321. Ячейка кэша содержит адрес строки 330, проверяем номер - не совпадает. Ищем строку, находим строку 330, адрес заносим в ячейку кэша, соответствующую строке 321.
То есть всё зашибись, просто при переходе на несуществующую строку работать будет "с обычной скоростью".
Чтобы не засорять кэш можно не записывать в него адрес найденной строки, если её номер не совпадает с требуемым.
Усложняем алгоритм...
1. Вычислить номер ячейки кэша, прочитать из кэша адрес.
2. Если номер строки по этому адресу меньше, а номер следующей строки больше или равен требуемому - берём следующую.
3. Иначе - ищем строку с самого начала, но в кэш пишем адрес предыдущей. Для первой строки ничего не пишем.
Пошагово. Начинаем с пустого кэша.
Переход на строку 100. Ячейка кэша пустая. Ищем строку, адрес предыдущей (90) заносим в ячейку кэша, соответствующую строке 100.
Переход на строку 100. Ячейка кэша содержит адрес строки 90, номер меньше, следующий равен - берём следующую.
Переход на строку 321. Ячейка кэша пустая. Ищем строку, находим строку 330, адрес предыдущей (320) заносим в ячейку кэша, соответствующую строке 321.
Переход на строку 321. Ячейка кэша содержит адрес строки 320, номер меньше, следующий больше - берём следующую.
...
Переход на строку 1234. Ячейка кэша содержит адрес строки 2000, номер больше - ищем с начала, пишем в кэш предыдущую.
Переход на строку 2345. Ячейка кэша содержит адрес строки 500, номер меньше, номер следующей тоже меньше - ищем с начала, пишем в кэш предыдущую.
Вроде ничего не забыл.
- - - Добавлено - - -
Пофиг. Потому что в итоге, даже если N1 и N2 - выражения, всё в итоге сведётся к номеру строки, который будет обработан кэшем.
Интересно, а как происходит переход в for ... next? По номеру строки или по адресу строки?
Последний раз редактировалось Bolt; 26.02.2019 в 19:21.
Bolt, возникает вопрос: зачем вся эта эквилибристика с дублированием данных в кэш? Спектрум-бейсик и так довольно прожорлив в плане хранения данных.
Если ТС, нужно вычислить конкретные значения строк в листинге полученной программы, эту узкоспециализированную задачу, можно решить без написания очередной надстройки на ЯВУ.![]()
Когда есть, но не знаешь где - это все равно, что нету.
Все гораздо прозаичней, у меня тут новодел спектрум-подобный на столе поселился. На Atmega32a с 128к SPI RAM, 256к извлекаемой флешки (иммитация дискеты) и экраном 480х320. Понимаете, SPI RAM не очень быстрая, поэтому закешировать что либо в памяти МК всегда рад. Там же не оригинальный бейсик, скорее некая разновидность 128к бейсика, поэтому есть немного свободы действий в реализации.
- - - Добавлено - - -
Да как основной рабочий он и был с самого начала, это я уже чуть позже с кешем замудрил )) Потом, я совершенно не помню уже как работает оригинальный бейсик, поэтому засомневался и полез читать с помощью форумчан - как там все устроено.
Последний раз редактировалось Dr.Potapov; 26.02.2019 в 21:47.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)