User Tag List

Показано с 1 по 10 из 1185

Тема: Радио-86РК: Подключение дисковода

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    22.07.2007
    Адрес
    St.Petersburg
    Сообщений
    604
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    14
    Поблагодарили
    9 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Кстати для Микроши контроллер дисковода производился серийно.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Ратмир
    Для АПОГЕЯ кроме ROM-диска ничего путного изобретено не было. Хотя разъём есть
    Это отлично, т.к чем меньше всего есть для компьютера, тем он интереснее. А каких машин сейчас больше у пользователей, - МИКРОШ или АПОГЕЕВ?

    Цитата Сообщение от Sancho45
    Я изменил п/п проверки сигнала RDY, поставил туда цикл ДО проверки готовности. Вся прошивка та же, только несколько байтов поменял местами (до этого был цикл опроса RDY, поменял на просто цикл паузы, а. физический RDY всегда готов))
    Вообще-то до этого был цикл ожидания RDY с ограничением времени в 2 секунды, чтобы спустя 2 секунды неготовности выдать надпись BAD SECTOR (или что-то подобное).

    Вы ввели просто паузу, удлинив п/п-мму READY до секунды. Это немного похоже на аппаратную задержку формирования сигнала READY из сигнала 'Device Select' на КМОП-вентилях, но есть существенное отличие, - если это сделано неграмотно, то это приведёт к торможению работы ДОС.

    Вопрос в том, на каком исходнике Вы это делали и как. Нельзя ли "зыркнуть" на листинг?

    Нежелательно это делать на оригинале Е.Седова. Потому что там нет флага о том, что колесо вращается, отчего любой вызов п/п-ммы READY будет длиться одинаково долго (секунду, что Вы отвели на раскрутку). А в варианте с эмуляцией, есть флаг PSKFLG, благодаря чему, вызов п/п READY только при невращающемся колесе длится долго, а последующие вызовы, когда колесо уже крутится, намного короче.

    Если, как Вы пишете Вы ввели паузу до обслуживания READY, т.е до анализа флага PSKFLG, то это неправильно, т.к тормознёт. Но надо видеть листинг.

    А чем Вас не устроил вариант с эмуляцией READY из сигнала INDEX? Работает ли это на реале, т.к проверялось только в эмуляторе? В эмуляторе есть разница в скорости реакции ДОС с аппаратным READY и ДОС с эмуляцией READY из сигнала INDEX. Разница в том, что в варианте с аппаратным READY реакция на команды быстрее. Вообще-то заметного торможения не должно быть, т.к при вызове READY при уже вращающемся колесе контроллируется только один оборот колеса, что тормозит на 0.2 секунды при каждом вызове. В принципе, можно убрать контроль на вращение колеса при повторных вызовах READY, т.е сразу же, если флаг PSKFLG выставлен, делать RET. Мне интересно, есть ли в реале такое торможение, потому что у меня в 90-тые такого не было. Т.е хочу знать это свойство эмулятора или реала.

    о колесе


    Но немного не так делается в BIOS CP/M. CP/M в отличие от RK-DOS ничего не знает о колесе и в ней нет подпрограммы OSTANOV. Это только RK-DOS после выполнения задачи, вызывает функцию OSTANOV и колесо останавливается. С БИС ВГ93 о пуске и останове колеса тоже заботиться не надо. Обычно (если сделано грамотно) для формирования сигнала старт, используют сигнал HLD (Head Load), который предназначен для пуска колеса и пуска магнита прижимающего головку к поверхности, или, (если КНГМД неграмотный), то используют одновибратор с константой на 4-5 секунд. Одновибратор, не нужен, т.к эту задержку даёт сам ВГ93, снимая спустя 4-5 секунд сигнал HLD. Потому при БИС ВГ93 в ДОС не требуется заботиться о колесе.

    В CP/M на базе РК-КНГМД иначе. Здесь заботиться о колесе приходится программно. Задача в том, чтобы обеспечить останов колеса, если в течение 5 секунд не происходит обращения к дисководу. Понятно, что с таймером или прерываниями это легко решаемо. Но раз нет прерываний (т.к они истрачены на звук), то делается так. Вызов п/п-ммы READY запускает колесо, выставляет флаг PSKFLG и заносит в счётчик большое число. Естественно, READY в первый раз (т.е при входе в п/п-мму READY с сброшенным флагом PSKFLG и когда колесо не крутится), формируется спустя паузу (пауза, задержкой, если Вы так уж хотите) или спустя паузу на обнаружение того, что колесо вращается по импульсам на выходе INDEX. Но когда к READY обращаются после старта колеса, то паузы не происходит, т.к установлен флаг PSKFLG и возврат из READY происходит мгновенно.

    Как останавливать колесо в ДОС, которые ничего не знают о РК-КНГМД, например CP/M? Для этого перед вызовом п/п-ммы F81B, которая является единственным интерфейсом с клавиатурой (STATUS тоже получают из неё, F812 не используется, т.к например, в РК86 она буферизована, что нам не надо) вставляется одна строчка CALL TICK (или CALL SYSTIK. В этой подпрограмме декрементируется тот большой счётчик, что был установлен по старту колеса. Когда ДОС закончила все дисковые процедуры, она возвращается к опросу клавиш, т.е начинается вызов в цикле п/п-ммы F81B, Обычно в цикле за секунду успевает произойти 1000....5000 вызовов F81B (в зависимсоти от такта и грамотности п/п-ммы опроса). При каждом вызове F81B счётчик уменьшается и через 5 секунд опроса F81B в цикле достигается ноль. Тогда вместо RET NZ, выполняется JMP OSTANOV и колесо останавливается.

    К такой идее задержки приходится прибегать только, если в дисководе нет сигнала INDEX (например 5050, 5088), тогда нет ни самого сигнала READY, ни возможности его эмулировать из сигнала INDEX. Кстати, у меня как раз есть 5 таких дисководов и все без сигнала READY и INDEX, причём и сигнала TRK0 тоже нет (это фактически голая рама с мотором и улиткой). Такой дисковод стоил 200 USD в 1976 (для пересчёта на современные деньги надо умножить сумму на 5).
    [свернуть]
    Последний раз редактировалось barsik; 27.07.2017 в 06:48.

  4. #3

    Регистрация
    30.05.2017
    Адрес
    г. Алматы, Казахстан
    Сообщений
    908
    Спасибо Благодарностей отдано 
    63
    Спасибо Благодарностей получено 
    275
    Поблагодарили
    148 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от barsik Посмотреть сообщение
    Вообще-то до этого был цикл ожидания RDY с ограничением времени в 2 секунды, чтобы спустя 2 секунды неготовности выдать надпись BAD SECTOR (или что-то подобное).

    Вообще-то я так и написал :-
    Цитата Сообщение от barsik Посмотреть сообщение
    до этого был цикл опроса RDY,
    , что и есть ожидание RDY, и не 2 сек, а от FFFFh до 0000h в цикле(в сторону уменьшения), длительость цикла и такты не считал, но явно по ощущениям меньше 2-х сек.

    вот фрагмет из ваших текстов:


    Код:
    READY:
            LD      HL,0
    RDYLOO:
            IN      A,(0F1H)                ; *****
            LD      A,(PORT+1)
            AND     RDYMSK
            RET     Z
            DEC     HL
            LD      A,H
            OR      L
            JR      NZ,RDYLOO
            LD      A,3
            JP      PR_ERN
    
    ;────────────────────────────────────────────
    Т.к. RDY припаян к земле, то из цикла выскакивает при первом проходе, а дисковод еще не готов !

    Что я сделал :
    Код:
    READY:
            LD      HL,1FFFh
    RDYLOO:     
            DEC     HL
            LD      A,H
            OR      L
            JR      NZ,RDYLOO
            IN      A,(0F1H)                ; *****
            LD      A,(PORT+1)
            AND     RDYMSK
            RET     Z
            LD      A,3
            JP      PR_ERN
    
    ;────────────────────────────────────────────
    Все тоже самое, только местами поменял и вместо 0000h-1 поставил 1FFFh


    Цитата Сообщение от barsik Посмотреть сообщение
    Вы ввели просто паузу, удлинив п/п-мму READY до секунды.

    Я просто дал время дисководу равное циклу 1FFFh для того что бы он был готов, и потом запрашиваю RDY и т.к. он на земле т.е. всегда готов и дисковод уже готов, то все работает и так же есть возможность аппаратной доработки сигнала(если не на земле а через хитрую схемку)

    На счет раскрутки все равно надо 500мс, какая разница дос будет ждать раскрутки 500мс или просто ждать 500мс и потом читать RDY ?
    Сигнал опрашивается один раз за сеанс , потом другие запросы , INDEX и тд. У меня все работает без тормозов, я не собираюсь тиражировать диски на микроше, что бы раз в сек опрашивать RDY, да и во всех программах что я просмотрел сигнал опрашивается один раз за сеанс при инициализации дисковода

    - - - Добавлено - - -


    Цитата Сообщение от barsik Посмотреть сообщение
    чтобы спустя 2 секунды неготовности выдать надпись BAD SECTOR (или что-то подобное)
    Не правда. Причем тут RDY и BAD SECTOR. Здесь пишут,и у меня раньше было I/O ERR




    Цитата Сообщение от barsik Посмотреть сообщение
    А чем Вас не устроил вариант с эмуляцией READY из сигнала INDEX?
    Работа ,

    не успел еще проверить ваш вариант.

    Параллельно орион собираю.

    И я вообще думал заменить проверку флага RDY на флаг INDEX
    Но времени нет особо для отработки мыслей. Как время будет,попробую Ваш вариант и отпишусь.
    Последний раз редактировалось Sancho45; 27.07.2017 в 04:39.

  5. #4

    Регистрация
    28.03.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,777
    Спасибо Благодарностей отдано 
    554
    Спасибо Благодарностей получено 
    200
    Поблагодарили
    138 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Sancho45, выложи свой вариант ПЗУ c задержкой перед RDY, проверю свои "нерабочие" флопы.

  6. #5

    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну да, как и описывалось, Вы ввели паузу на 0.5 секунды (кстати в счётчик времени ожидания HL загружается 0, т.к это было для ОРИОНА, который в 3-4 раза быстрее РК, в котором ожидание будет не 2 секунды, а в разы больше). Но эта пауза исполняется при каждом вызове п/п-ммы READY, тогда как она нужна только тогда, когда колесо не крутится. Если же колесо уже крутится, то пауза не нужна. На скорости чтения это не отразится, потому что при чтении сектора п/п-мма READY не вызывается, т.к ради ускорения, полагаются на то, что даже если первые попытки чтения, ещё при нераскрученном до номинальной скорости колесе, дадут ошибку, то это не важно, так как число попыток чтения велико.

    Но, если Вы в редакторе текстов выполните поиск метки 'WRSKT:', то увидите, что при каждой записи сектора вызывается подпрограмма READY (т.к запись при нераскрученном колесе приводит к трагедии). Если средний размер игры 20 кб, т.е она имеет размер в 40 секторов по 512 байт, то вызов п/п-ммы READY 40 раз при копировании этого файла затормозит работу на 0.5 сек * 43 сектора (1 сектор в каталоге, 1 сектор во VTOC и 1 сектор Track/Sector LIST плюс число секторов самого файла) на 21.5 секунды. Если копируется диск 400 кб, где 800 секторов, то копирование затормозится на 400 секунд, т.е на 7 минут.

    Цитата Сообщение от Sancho45
    Неправда. При чём тут RDY и BAD SECTOR?
    В CP/M и похожих ДОС нет развитой диагностики ошибок. Там всего 4 ошибки, отчего, когда что-то не так с дисководом, выдаётся сообщение "Bad Sector". Я привёл текст сообщения лишь примерно, как пример, что что-то подобное выдаётся. А сейчас посмотрел и обнаружил, что в RK-DOS ошибка с кодом 3 выдаёт текст "NO DISK", хотя лучше было бы выдавать текст, как в MSDOS "Drive Not Ready". Сообщение "I/O ERROR" у Вас было потому, что сигнал READY был заземлён, отчего колесо при чтении не успевало раскрутиться.

    А ещё один способ добиться чтения на НГМД без аппаратного сигнала READY заключается в том, чтобы в 3-4 раза увеличить число попыток чтения. Тогда надпись "I/O ERROR" будет выскакивать спустя минуту "долбёжки" дискеты. Это нехорошо тем, что тогда и при реальной дохлоте сектора, этот сектор будет пытаться считываться кучу раз, изнашивая головку дисковода.
    Последний раз редактировалось barsik; 27.07.2017 в 06:53.

  7. #6

    Регистрация
    30.05.2017
    Адрес
    г. Алматы, Казахстан
    Сообщений
    908
    Спасибо Благодарностей отдано 
    63
    Спасибо Благодарностей получено 
    275
    Поблагодарили
    148 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от barsik Посмотреть сообщение
    Приведение ассемблерного фрагмента без заключения его в теги (code.../code) приводит ассемблерную программу в нечитабельный вид, похожий на исходники для ассемблера МИКРОН, когда размер объектного кода приблизился к 2.5 кб и из текста вынуждено пришлось удалить всё форматирование. Если Вы отредактируете своё сообщение, добавив тег 'code', то читатели форума, читающие эту тему в дальнейшем, будут Вам благодарны.
    Сделал.

    Цитата Сообщение от barsik Посмотреть сообщение
    (кстати в счётчик времени ожидания HL загружается 0, т.к это было для ОРИОНА, который в 3-4 раза быстрее РК,
    Нет, ноль в оригиале Седова, счетчик идет на уменьшение , т.е. от 0000h -1 при первом проходе и до 0000h



    Цитата Сообщение от barsik Посмотреть сообщение
    Но, если Вы в редакторе текстов выполните поиск метки 'WRSKT:', то увидите,
    Да, это так при записи, при чтении такого нет !

    Цитата Сообщение от barsik Посмотреть сообщение
    Вы ввели паузу на 0.5 секунды
    Гораздо меньше от 1FFFh до 0, в сторону уменьшения, другими словами от 0 до 1FFFh , что меньше 0.5 сек. Я так же взял в расчет, что проц выполняет и др п/п доса до проверки RDY, что тоже занимает время и в сумме с циклом дает необходимое время.
    Цитата Сообщение от barsik Посмотреть сообщение
    Если средний размер игры 20 кб, т.е она имеет размер в 40 секторов по 512 байт, то вызов п/п-ммы READY 40 раз при копировании этого файла затормозит работу на 0.5 сек * 43 сектора (1 сектор в каталоге, 1 сектор во VTOC и 1 сектор Track/Sector LIST плюс число секторов самого файла). на 21.5 секунды. Если копируется диск 400 кб, где 800 секторов, то копирование затормозится на 400 секунд, т.е на 7 минут.

    Все это в теории, но (см. выше, цикл для RDY меньше 0.5), игрушек по 20кб не так много и записывать их один раз , а не тиражировать).Да и так все работает без тормозов и очень быстро, 7 мин я ни разу не ждал (это перебор ))). Хотя и софта который мне интересен и на дискетку то не набралось))

    - - - Добавлено - - -

    Цитата Сообщение от tnt23 Посмотреть сообщение
    Sancho45, выложи свой вариант ПЗУ c задержкой перед RDY, проверю свои "нерабочие" флопы.
    Пожалуйста

    dos29_delay_rdy.rar

    константа для задержки со смещением 0D45 h от начала прошивки, там 00 1F, т.е. в нормальном порядке 1f00, что даже меньше чем я указал выше. можно сделать больше или меньше. Для микроши D3 C1 исправленно на D3 D1. Если кто на 86рк, то надо обратно D3 C1 со смщением 0DBE h от начала прошивки. И сигнал RDY со стороны контроллера на землю)

    О результатах отпишитесь пожалуйста .
    Последний раз редактировалось Sancho45; 27.07.2017 в 09:12.

  8. #7

    Регистрация
    14.01.2016
    Адрес
    г. Новополоцк, Беларусь
    Сообщений
    451
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Подскажите пожалуйста как мне лучше подсоединить плату НГМД к старой плате РК-86 в смысле разъема . И какие все-таки номиналы сопротивлений в плате НГМД.
    Радио-86РК +375292940812

  9. #8

    Регистрация
    12.12.2011
    Адрес
    г. Иркутск
    Сообщений
    2,509
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    22
    Поблагодарили
    20 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Savoj Посмотреть сообщение
    номиналы сопротивлений в плате НГМД
    R1 - 200ом, остальные 1ком.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Радио-86РК: Игры
    от rnd.gen в разделе Радио-86РК
    Ответов: 146
    Последнее: 10.12.2025, 06:29
  2. Радио-86РК: Ремонт
    от kokosbot в разделе Радио-86РК
    Ответов: 59
    Последнее: 19.04.2013, 22:48
  3. Радио-86РК: Литература
    от caro в разделе Радио-86РК
    Ответов: 6
    Последнее: 26.04.2011, 10:18
  4. Радио 86РК
    от Shnurkov в разделе Барахолка (архив)
    Ответов: 1
    Последнее: 02.01.2009, 12:52

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •