ну дело ваше, не хотите не копируйте, а мне без копирования никак
ну дело ваше, не хотите не копируйте, а мне без копирования никак
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Rararura 2.0
прошёл почти год и вот Я снова вернулся.
на этот раз была проделана огромная работа над программой в результате чего во многих режимах была увеличена скорость работы программы.
очень сильно переделал Big mode - теперь там целых 3 режима обработки спрайтов, можно обрабатывать 2 нижние (служебные) строчки, а также можно прервать обработку в любой момент или выйти в меню, ну и самое главное скорость обработки в 5 ! раз быстрее.
также полностью переделал multiselect - теперь он выглядит совершенно по новому и работает очень быстро.
список изменений:
- расширение режима big mode, теперь можно обрабатывать две нижние (служебные строчки).
- появились 3 опции в big mode:
стандартная (only big sprite) - обработка 6 спрайтов из картинки и создание big sprite.
расширенная (21 udg) - обработка до 21 спрайта из картинки, big sprite не создаётся.
шрифт режим (font mode) - обработка до 96 спрайтов из картинки, big sprite не создаётся. спрайты импортируются в font 3.
- стандартная обработка спрайтов в big mode теперь занимает всего 6 секунд, расширенная 20 секунд, шрифт режим 59 секунд.
- в расширенном или шрифт режиме можно остановить выбор спрайтов в любой момент по нажатию кнопки SPACE, обработка будет проводиться до последнего выбранного спрайта.
- в расширенном или шрифт режиме можно видеть количество выбранных спрайтов (синяя прозрачная полоса в верхней части экрана).
- выход из big mode режима в любой момент в главное меню по кнопке ENTER.
- изменён индикатор обработки спрайтов в big mode (теперь это смена цвета border).
- новый вид multiselect mode.
- другой способ обработки спрайтов в multiselect mode.
- в multiselect mode обработка спрайтов теперь проходит за 2 - 21 секунд (зависит от количества выбраных спрайтов).
- удалён вывод лишней информации при обработке в multiselect mode.
- теперь все выбраные спрайты в multiselect mode идут по порядку (последний символ ставится последним как положено).
- улучшенна система сохранений.
- оптимизация программы.
- разичные мелкие исправления.
не знаю насколько полезна моя программка, в каких-то начале 90ых она была бы востребована, а сейчас это так, ради интереса.
надеюсь что возможно смогу позже ещё обновить данную прогу, но шансов уже мало, ибо маловато свободного места.
Напомните, плиз, элегантный универсальный загрузчик тырдос/лента. Вроде встречался раньше, вроде даже там не было конструкции "IF ... THEN" (?)
Вроде даже на бейсике он был. Хотя может и на асме
Куплю корпус и материнку от Spectrum +2/+3
ZX_NOVOSIB, не знаю, насколько элегантен метод через анализ системной переменной "начала бейсик программы". Либо выполнения кодовой последовательности в бесик-строке. За счёт смещения его на 112 байт, после инициализации области системных переменных tr-dos. Сталкивался лишь с таким.
Последний раз редактировалось null_device; 19.05.2023 в 05:09.
Когда есть, но не знаешь где - это все равно, что нету.
ASC выпускал игры с "универсальными загрузчиками". Выполнялась команда вида RANDOMIZE USR x:REM:LOAD "file" CODE
Где x - адрес машинного кода, встроенного в бейсик-программу, который определял, имеется ли TR-DOS. Если имеется - то код переходил на адрес 15619 - тем самым RANDOMIZE USR x было эквивалентно RANDOMIZE USR 15619, а дальнейший текст программы являлся "легальным" вызовом команд TR-DOS из бейсика. Если TR-DOS не было - то машинный код переставлял системную переменную CH_ADD, чтобы интерпретатор обошел команду REM, и возвращался в бейсик. После этого интерпретатор выполнял LOAD "file" CODE и грузил файл с кассеты.
Некоторая сложность была с определением адреса x, ведь он был различным для случаев наличия или отсутствия TR-DOS. Для определения правильного адреса считывалась системная переменная PROG (адрес бейсик-программы), и к этому значению прибавлялось смещение.
На чистом бейсике тоже можно сделать, и пользуясь только "легальными" средствами определения наличия TR-DOS, без "инсайдерских" POKE/PEEK, опирающихся на знание прошивок бейсика и TR-DOS. По-моему в инструкции к TR-DOS был приведен способ, как следует определять наличие TR-DOS определенной командой PEEK. Дальше надо использовать IF...THEN, без "инсайдерских" POKE иначе никак. Ведь синтаксис команд загрузки с ленты и диска разный.
Сложностью могло пожалуй являться дополнительное смещение бейсика ещё на +256 байт, во время выполнения команд tr-dos. Или, при подключении иной специфичной периферии. В книжке, "...для пользователей и программистов", такой указан interface 1.
В случае использования загрузчика через код вшитый в бейсик-строке, достаточно оформить по адресу со смещением +0, процедуру загрузчика tr-dos, а по адресу +112, загрузчик с ленты.
Т.о. при вызове кода с адреса +112 байт, из тела программы, за счёт смещения начале бейсика переменными tr-dos, будет запущен нужный кусок кода.
Когда есть, но не знаешь где - это все равно, что нету.
Barmaley_m (19.05.2023)
Во время выполнения команд TR-DOS бейсик-интерпретатор не исполняет команды, так что это несущественно. Ну, может, в случае открытия файлов через OPEN# еще растет область каналов, но OPEN# в реальных программах и, особенно, загрузчиках, мне нигде не встречался. Подобным пользуются только авторы больших проектов на бейсике.
В СНГ Interface 1 был той еще экзотикой. Не видел ни одного "вживую", и клонов тоже не было. В мои времена никто из программистов под TR-DOS не заморачивался поддержкой возможного Interface 1.
Рискну предположить, что реальных контроллеров Beta Disk от фирмы Technology Research было произведено в десятки раз меньше, чем наших клонов на ВГ93. Так что и на Западе конфигурация "Beta disk + Interface 1" была, скорее всего, большой экзотикой.
А вот это отличная идея. Компактно, естественно, и красиво. Снимаю шляпу!
Да. Но для этого TR-DOS должна быть инициализирована к моменту запуска загрузчика. Большинство кассетных загрузчиков вообще не запустятся при инициализированной TR-DOS из-за смещенного адреса бейсик-программы.
Если же в бейсике выполнить RANDOMIZE USR 0 - то инициализации TR-DOS не произойдет. Можно набирать LOAD "" и грузить игру с любым ("универсальным" или обычным) загрузчиком полностью с кассеты.
Кстати, интересный вопрос - а можно ли вообще проверить, имеется ли в системе контроллер Beta-Disk, если TR-DOS не инициализирована? Ведь порты контроллера недоступны, ПЗУ TR-DOS неактивно, и следов её прошлой активности в памяти нет.
Единственный программный способ активировать порты контроллера и ПЗУ TR-DOS - это исполнить код по адресам #3Dxx. Если контроллер есть - то произойдет включение ПЗУ TR-DOS, и дальше всё понятно. А вот если контроллера нет? По адресам #3Dxx находится знакогенератор, и попытка исполнить его как код обычно заканчивается сбоем. Может быть, там есть какой-то фрагмент, на который можно выполнить переход, а потом вернуться с разным результатом в зависимости от наличия или отсутствия контроллера дисковода?
- - - Добавлено - - -
UPD: проверил. Знакогенератор состоит из относительно безобидных команд, среди которых нет переходов за пределы знакогенератора, бесконечных циклов, вызовов или возвратов. Из опасного - есть немного команд записи в память, которые могут "перепахать" несколько её ячеек, но и только. При правильной инициализации регистров последствия можно ограничить. Рано или поздно управление попадает на адрес #4000, а там уже можно размещать "ловящий" код.
Проверил без контроллера POKE 16384, 201: RANDOMIZE USR 15616. Сбоя не произошло, управление вернулось в бейсик: 0 OK, 0:1
Итак, алгоритм проверки следующий:
1) Размещаем на стеке адрес, где будем ловить случай наличия контроллера;
2) Размещаем по адресу #4000 код, который будет ловить случай отсутствия контроллера;
3) Инициализируем BC, DE, HL нулями или другими безопасными значениями. Надо пару раз протрассировать, что происходит при исполнении знакогенератора, и заметить, по каким адресам производится запись в память, и какие значения регистров позволят этого избежать. Ну или принять меры, чтобы запись в эти ячейки памяти не привела к сбою.
4) Выполняем переход на адрес #3D2F
5) Profit!
UPD2: Задумался, а почему я раньше нигде не встречал такого алгоритма проверки? Ответ простой. Чтобы этот алгоритм имел смысл, его нужно загрузить с кассеты. Ведь в противном случае TR-DOS окажется инициализированной, и необходимость в проверке отпадает. Но ни один владелец дисковода в здравом уме не грузит ничего с кассеты. Разве только с целью сохранить загруженное на диск и забыть "кассетную" жизнь, как страшный сон.
Последний раз редактировалось Barmaley_m; 22.05.2023 в 23:23.
Reobne (23.05.2023)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)