Да. Но для этого 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 окажется инициализированной, и необходимость в проверке отпадает. Но ни один владелец дисковода в здравом уме не грузит ничего с кассеты. Разве только с целью сохранить загруженное на диск и забыть "кассетную" жизнь, как страшный сон.





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