![]() |
Quote:
Quote:
|
Quote:
Добавлено через 10 минут По-моему её вообще удалить надо, от греха подальше. |
Попробовал. Всё стало работать нормально. Таким образом, верно: "процедура останова дисковода" глушит его намертво. :-O
Quote:
|
Quote:
Я тут посмотрел исходники. Ваша процедура останова дисковода использует байт из ячейки 23830. Там по идее хранится копия системного регистра. Так вот, загрузчик коммандера затирает часть байта этой ячейки (делается команда: LD A,(23830): AND 3: LD (23830),A). Так что наверное здесь причина. Мой загрузчик оказался несовместимым с Вашей процедурой останова дисковода. :) Изменил загрузчик. Теперь он не меняет ячейку 23830, используемую процедурой выключения дисковода. Версию 0.5 выложил в первый пост этой ветки. Добавлено через 52 минуты Еще вопрос появился по Вашей процедуре останова дисковода. Код такой (я немного ужал по объему): Code:
LD DE,12225И особенно мне не ясна команда XOR 1. Выполняет роль переключения дисковода с текущего на другой, потом обратно. В моём случае ячейка не будет указывать на текущий дисковод (в общем случае), поэтому иногда это будет работать, возможно, не так как задумывалось. Могут ли в связи с этим быть какие-то глюки? |
Quote:
А системные переменные (системы Спектрум-BASIC и TR-DOS) портить всё же нежелательно: командер ведь предназначен ещё и для запуска других программ, которые должны будут работать в системе. Quote:
|
Попробую подробно рассказать о методе снятия выбора дисковода эмуляцией индексных импульсов.
Как известно, микроконтроллер КР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:, - где реализовано четыре дисковода. В процедуре, модифицированной мной: Code:
{1} PUSH AFПо поводу использования ячейки "копия системного регистра": адрес для этой самой копии системного регистра, конечно же, может быть и другим. Но значение должно быть действительно копией, поскольку оно отправляется непосредственно в порт #FF подпрограммой ПЗУ TR-DOS по адресу 697. После того, как отработает предложенная мной процедура, в порте #FF окажется точно такое же значение, как и до её вызова (только дисковод будет остановлен). P.S. Извиняюсь за десятичные адреса - я изучал TR-DOS по книге П.Федина "Полное описание и полный дизассемблер TR-DOS", а там все адреса десятичные. :) |
Ясно. Значит там еще поменять надо кое-что.
Я обнаружил пару глюков в докторе. Будет время - исправлю и выложу. |
Исправил процедуру снятия выбора дисковода, убрал глюки в докторе (один опасный глючок был). Выложил версию 0.6 в первый пост ветки.
|
Я тут на некоторое время исчезал... :)
Повнимательнее протестировал дисковые операции, и вот что могу сообщить. В режиме TURBO дисковые операции не работают - выдаётся NO DISK; всё можно делать только в обычнном режиме. Запись на 3,5"-дисковод по-видимому происходит нормально, а вот при записи на 5,25"-дисковод иногда происходять ошибки: первый сектор на некоторых дорожках перестаёт читаться. В общем-то, такая картина для меня не нова: еще в конце 1990-х годов, когда стали появляться первые командеры с "turbosaver'ами", я получал аналогичные результаты. Еще тогда у меня сложилось мнение, что "turboloader'ы" вероятно могут иметь практическое применение, а вот "turbosaver'ы" - никогда. У меня установлен индикатор записи на дисковод, так вот: скорость записи на 5,25" такая, что даже во время перехода с дорожки на дорожку, он гаснуть не успевает. Надо разобраться с таймингом процедур записи, и сделать величины задержек такие как в ПЗУ TR-DOS. Одним словом, я солидарен с теми, кто предлагает использовать только точку входа 15635: там такие проблемы никогда не возникают. |
1 Attachment(s)
- Увеличил время проверки наличия диска. Теоретически должно работать на 11 МГц.
- Поставил задержку после команды "шаг вперед". 5 halt'ов. Получается в районе 0.1 сек, что по моим расчетам составляет 50% длины трека и должно привести к пропуску одного оборота диска. |
Quote:
Что ж, можно с уверенностью сказать, получилась неплохая утилита. У меня пока пожеланий больше нет. Возможно, в эксплуатации, обнарущатся какие-нибудь ошибки, - тогда вновь обсудим их в данной теме. :) |
Я извиняюсь, что поздно пишу, хочу несколько комментариев написать по этой ветке:
1. Дайте, пожалуйста, ветке осмысленное название. Коммандеров на спектруме немеряно, так назовите эту ветку именем своего коммандера. 2. Чтобы правильно выводить счетчик процентов во вьювере, вам надо считать не байты, а строки. Тогда у вас будет очень плавное изменение счетчика при скролле по строкам. При достижении конца файла, очень неплохо выставлять 100% принудательно. 3. Сделайте работу как через #3d13, так и через #3d2f. Отлавливать ошибки (пресловутый disk error) при работе через #3d13 не сложно, в какой-то газете я видел хорошее описание от RealSoft'а. Вроде это был Impulse. 4. Книжка Федина переведенная на шестнадцатеричную систему у меня есть (как-то сам попереводил все). Я хотел ее выложить, даже выходил на самого Федина с вопросом не желает ли он пофиксить мелкие найденные ошибки перед тем как я выложу эту книжку, но тот отказался. 5. Известных универсальных драйверов памяти есть как минимум 2. Один из них вы без проблем можете найти в комплекте Real Commander'а (исходник в zasm'е). 6. Модули - это плохая идея. Я не раз высказывался на эту тему, в том числе и на этом форуме. Не повторяйте чужие ошибки. :) 7. В 48К можно всунуть очень и очень много. Также, легко можно сделать версию которая будет запускаться из теневого ОЗУ и ПЗУ, для этого надо чтобы весь коммандер влазил в 16Кб, помните это. |
Quote:
Quote:
В TR-DOS Navigator'е ничего этого не делается. Текст разбивается на строки в процессе вывода, какими бы длинными они не были (хоть весь текст одна строка!). Считаются именно байты, и результат не плохой. Вот какая "процентная" формула там используется: процентная_величина_прокрученного_текста=адрес_в_тексте_на_котором_остановился_вывод/(длина_текста_в_байтах/100) На ассемблере это выглядит так: Code:
LD BC,адрес_в_тексте_на_котором_остановился_выводQuote:
Quote:
|
Quote:
Quote:
Code:
LD DE,55 ; текущая строкаQuote:
Quote:
|
Quote:
В первых версиях TRDN в просмотрщике текстов была сделана интересная возможность: "на ходу" переключаться в режим дампа и обратно. Мне захотелось это сохранить, а для этого значения в памяти должны оставаться неизменными, иначе при переключении надо будет всё перезагружать и переформатировать. Перед написанием своего просмотрщика я изучал аналоги, в том числе и QC 3.10 (3.11 тогда еще не было). Идеи в QC мне понравились, но захотелось опробовать своё, и чтобы это работало и в 48K. Думаю, всё получилось. :) Quote:
|
Quote:
|
люди добрые, доработайте пожалуйста модуль RC - pt3play+.rcm, чтобы он мог играть vortex tracker файлы и, самое главное, turbo sound! спасите реальщиков! :)
в RC мне не хватает только этого. |
Quote:
|
вортекс плеер только одночиповый играется, традиционный AY, так сказать. Турбо не играет.
|
Quote:
|
alone, я с полгода назад эту книгу скачивал с оффсайта сайта scorpion в MS WORD, так что думаю нет необходимости ее сканировать.
---------- Post added at 21:52 ---------- Previous post was at 21:42 ---------- Quote:
---------- Post added at 21:52 ---------- Previous post was at 21:52 ---------- Quote:
|
| All times are GMT +4. The time now is 05:34. |
Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.