Каталог зогружается как ни в чем не бывало. А вот дальше дисковод не работает, как будто из него вытащили интерфейсный кабель.Сообщение от CPLx
Не пробовал еще; многие байты попробовал, а этот - нет. Сегодня попробую.Сообщение от CPLx
Каталог зогружается как ни в чем не бывало. А вот дальше дисковод не работает, как будто из него вытащили интерфейсный кабель.Сообщение от CPLx
Не пробовал еще; многие байты попробовал, а этот - нет. Сегодня попробую.Сообщение от CPLx
Если в каком-либо моем посте перестала работать гиперссылка или показываться картинка, напишите мне об этом в личном сообщении,чтобы я смог это исправить.
Grand's - сайт об электронно-вычислительной технике (зеркало)
Последний раз редактировалось CPLx; 17.04.2008 в 10:59. Причина: Добавлено сообщение
Если в каком-либо моем посте перестала работать гиперссылка или показываться картинка, напишите мне об этом в личном сообщении,чтобы я смог это исправить.
Grand's - сайт об электронно-вычислительной технике (зеркало)
Есть шанс её оставить.
Я тут посмотрел исходники. Ваша процедура останова дисковода использует байт из ячейки 23830. Там по идее хранится копия системного регистра. Так вот, загрузчик коммандера затирает часть байта этой ячейки (делается команда: LD A,(23830): AND 3: LD (23830),A). Так что наверное здесь причина. Мой загрузчик оказался несовместимым с Вашей процедурой останова дисковода.
Изменил загрузчик. Теперь он не меняет ячейку 23830, используемую процедурой выключения дисковода. Версию 0.5 выложил в первый пост этой ветки.
Добавлено через 52 минуты
Еще вопрос появился по Вашей процедуре останова дисковода.
Код такой (я немного ужал по объему):
Мне не понятно, зачем использовать ячейку 23830. Например, у меня в коммандере она не меняется при смене дисковода (она вообще коммандером не меняется). Может это какие-то левые глюки за собой повлечь может?Код:LD DE,12225 CALL DOS LD A,(23830) PUSH AF XOR 1 LD DE,697 CALL DOS POP AF DOS PUSH DE JP #3D2F
И особенно мне не ясна команда XOR 1. Выполняет роль переключения дисковода с текущего на другой, потом обратно. В моём случае ячейка не будет указывать на текущий дисковод (в общем случае), поэтому иногда это будет работать, возможно, не так как задумывалось. Могут ли в связи с этим быть какие-то глюки?
Последний раз редактировалось CPLx; 17.04.2008 в 22:59. Причина: Добавлено сообщение
Да, это и явилась причиной. Но в собственной программе можно использовать и собственную ячейку, где хранится копия системного регистра.Сообщение от CPLx
А системные переменные (системы Спектрум-BASIC и TR-DOS) портить всё же нежелательно: командер ведь предназначен ещё и для запуска других программ, которые должны будут работать в системе.
Отвечу подробно в следующем своём посте.Сообщение от CPLx
Последний раз редактировалось Grand; 21.04.2008 в 03:53. Причина: Добавлено сообщение
Если в каком-либо моем посте перестала работать гиперссылка или показываться картинка, напишите мне об этом в личном сообщении,чтобы я смог это исправить.
Grand's - сайт об электронно-вычислительной технике (зеркало)
Попробую подробно рассказать о методе снятия выбора дисковода эмуляцией индексных импульсов.
Как известно, микроконтроллер КР1818ВГ93 (и его "западные оригиналы"), завершив выполнение команды, снимает выбор дисковода после поступления определённого количества индексных импульсов. Однако, если дискеты нет, то и индексных импульсов не будет. Авторы Beta Disk Interface не стали добавлять аппаратное снятие выбора (очевидно, ради удешевления схемы), но предусмотрели программную эмуляцию индексных импульсов. Это делается с помощью переключения 3-го бита системного регистра. Про эту возможность написано не во всяком описании по программированию контроллера; обычно сказано, что этот бит отвечает за "загрузку головки". Если мы посмотрим на схему любого нашего клона Beta Disk Interface, то увидим, что соответствующий выход триггера (обычно TM9 или TM8), отвечающий за 3-й бит системного регистра, соединён еще и через диод или логический элемент И с 35-м выводом ВГ93; это и призвано обеспечить программную эмуляцию индексных импульсов.
Однако, мало сэмулировать индексные импульсы, надо еще и переключиться на "противоположный" дисковод. В ПЗУ TR-DOS V5.03, процедура снятия выбора дисковода находится с адреса 727. Однако там есть ошибка: по адресу 730 вместо команды OR 3 должно быть XOR 3; из-за этой ошибки не остановится дисковод B: в интерфейсе, где аппаратно реализовано два дисковода, или дисковод D:, - где реализовано четыре дисковода.
В процедуре, модифицированной мной:команда XOR 1 в строке 5 гарантированно переключает дисковод на "противоположный", и это обеспечивает снятие выбора. "Упрощение" этого алгоритма я не рекомендую: возможно он перестанет выполнять свою функцию для каких-то типов дисководов. Но сейчас в TFC версии 5 останов [мойх] дисководов работает наконец-то нормально.Код:{1} PUSH AF {2} LD HL,12225;Для V5.01 адрес: 12151. {3} CALL {12} ;Прерывания работы микроконтроллера. {4} LD A,(23830);Копия системного регистра. {5} XOR 1 ;Выбор "противоположного" дисковода и {6} CALL {11} ;эмуляция его индексных импульсов. {7} LD A,(23830);Выбор текущего дисковода и {8} CALL {11} ;эмуляция его индексных импульсов. {9} POP AF {10} RET {11} LD HL,697 ;Для V5.01 адрес: 683 {12} PUSH HL {13} JP 15663
По поводу использования ячейки "копия системного регистра": адрес для этой самой копии системного регистра, конечно же, может быть и другим. Но значение должно быть действительно копией, поскольку оно отправляется непосредственно в порт #FF подпрограммой ПЗУ TR-DOS по адресу 697. После того, как отработает
предложенная мной процедура, в порте #FF окажется точно такое же значение, как и до её вызова (только дисковод будет остановлен).
P.S. Извиняюсь за десятичные адреса - я изучал TR-DOS по книге П.Федина "Полное описание и полный дизассемблер TR-DOS", а там все адреса десятичные.
Если в каком-либо моем посте перестала работать гиперссылка или показываться картинка, напишите мне об этом в личном сообщении,чтобы я смог это исправить.
Grand's - сайт об электронно-вычислительной технике (зеркало)
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Ясно. Значит там еще поменять надо кое-что.
Я обнаружил пару глюков в докторе. Будет время - исправлю и выложу.
Исправил процедуру снятия выбора дисковода, убрал глюки в докторе (один опасный глючок был). Выложил версию 0.6 в первый пост ветки.
Я тут на некоторое время исчезал...
Повнимательнее протестировал дисковые операции, и вот что могу сообщить.
В режиме TURBO дисковые операции не работают - выдаётся NO DISK; всё можно делать только в обычнном режиме.
Запись на 3,5"-дисковод по-видимому происходит нормально, а вот при записи на 5,25"-дисковод иногда происходять ошибки: первый сектор на некоторых дорожках перестаёт читаться.
В общем-то, такая картина для меня не нова: еще в конце 1990-х годов, когда стали появляться первые командеры с "turbosaver'ами", я получал аналогичные результаты. Еще тогда у меня сложилось мнение, что "turboloader'ы" вероятно могут иметь практическое применение, а вот "turbosaver'ы" - никогда. У меня установлен индикатор записи на дисковод, так вот: скорость записи на 5,25" такая, что даже во время перехода с дорожки на дорожку, он гаснуть не успевает. Надо разобраться с таймингом процедур записи, и сделать величины задержек такие как в ПЗУ TR-DOS.
Одним словом, я солидарен с теми, кто предлагает использовать только точку входа 15635: там такие проблемы никогда не возникают.
Если в каком-либо моем посте перестала работать гиперссылка или показываться картинка, напишите мне об этом в личном сообщении,чтобы я смог это исправить.
Grand's - сайт об электронно-вычислительной технике (зеркало)
- Увеличил время проверки наличия диска. Теоретически должно работать на 11 МГц.
- Поставил задержку после команды "шаг вперед". 5 halt'ов. Получается в районе 0.1 сек, что по моим расчетам составляет 50% длины трека и должно привести к пропуску одного оборота диска.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)