Важная информация

User Tag List

Показано с 1 по 6 из 6

Тема: Программный детект модели IDE

  1. #1
    Guru Аватар для SAM style
    Регистрация
    28.02.2005
    Адрес
    Великий Новгород
    Сообщений
    2,055
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    218
    Поблагодарили
    92 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Программный детект модели IDE

    Идём далее...
    Как-нибудь можно программно определить, какая схема IDE подключена (или подключена ли) к ZX?
    Идея есть - читать регистр состояния IDE и проверять устройство на занятость. Но СМУК и АТМ-овский контроллер работают через теневые порты, а у меня закрыдывается сомнение в том, что в каждом TRDos'e есть in a,(c); ret по одному и тому же адресу.
    Все любят гипножабу

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

  3. #2
    Member Аватар для EARL
    Регистрация
    17.01.2006
    Адрес
    Тамбов
    Сообщений
    97
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если читать регистр состояния и проверять устройство на занятость так:
    Код:
    NO_BSY  LD BC,#FFBE
            CALL IN_A
            RLCA
            RET NC
            JR NO_BSY
    
    IN_A - функция чтения регистра контроллера
    То в случае отсутствия проверяемого контроллера это приведет к зацикливанию.

    Предлагаю сделать следующие: выбираем первое устройство на данном контроллере и пишем, например, в регистр сектора какое-то значение, а потом проверяем его содержимое, потом проделываем тоже самое для второго устройства контроллера. Тут есть один большой недостаток, если неподключено ни одно устройство к тестируемому контроллеру, а он на самом деле есть, то мы его не определим. Для контроллеров NEMO и NEMO A8 нужно проводить дополнительный тест, для уточнения конкретной схемы. Я сделал так:
    1. Выбираем любую модель NEMO/NEMO A8
    2. Забиваем в буфер размером 512 байт значением #FF
    3. Выдаем контроллеру команду #EC (Drive Identify)
    4. Читаем блок данных в наш буфер
    5. Проверяем значение в буфере по смещению 256. Если это значение отличается от #FF (не помню почему, но в этом месте при успешном считывании точно не будет #FF), то у нас выбранная модель, иначе у нас другая модель

    PS. В связи с отсутствием под рукой реальной машины с любым из контроллеров IDE все тесты проводились на эмуляторе Unreal Speccy
    PPS. Если кому интересно, то могу вечерком могу выложить реализацию всего вышеописанного для моделей NEMO, NEMO A8 и SMUC.
    Последний раз редактировалось EARL; 13.02.2007 в 12:57.

  4. #3
    Guru Аватар для SAM style
    Регистрация
    28.02.2005
    Адрес
    Великий Новгород
    Сообщений
    2,055
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    218
    Поблагодарили
    92 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от goodboy
    может сначала сделать проверку на наличие in a,(c) в пзуTRDOS ?
    hl,#xxxx
    c,#13
    call #3d13

    16 байт из адреса в HL, перенесутся в #5cdd
    Во, об этом-то я и не подумал! Начал искать ldir:ret...
    Спасибо за напоминание.
    2 EARL
    Не надо зацикливать. Можно же считать несколько тыс.раз. Если оно всё ещё занято - значит его нет.
    Все любят гипножабу

  5. #4
    Member Аватар для EARL
    Регистрация
    17.01.2006
    Адрес
    Тамбов
    Сообщений
    97
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вот и обещанный код. Пришлось правда немного переписать, но вроде все работает (проверял в Unreal Speccy 35B). Вызывать нужно функцию detect_ide, которая в регистре A возвращает обнаруженные интерфейсы в битовом представлении:
    0 - SMUC
    1 - NEMO A8
    2 - NEMO

    Цитата Сообщение от goodboy
    может сначала сделать проверку на наличие in a,(c) в пзуTRDOS ?
    hl,#xxxx
    c,#13
    call #3d13

    16 байт из адреса в HL, перенесутся в #5cdd
    Следует добавить эту проверку перед вызовом detect_ide!
    Вложения Вложения

  6. #5
    Guru Аватар для SAM style
    Регистрация
    28.02.2005
    Адрес
    Великий Новгород
    Сообщений
    2,055
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    218
    Поблагодарили
    92 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Однако, прога гуд. Даже на некоторые мысли натолкнула. А контроль простым изменением регистра сектора (как и сделано в начале каждой проги) разве не прокатит?
    Мне, кстати, не обязательно определять, есть ли винт (а с CD/DVD прога, вроде, не будет работать, потому как там команда #EC считается за ошибку). Главное - обнаружить схему (или её отсутствие) и настроить драйвер, через который потом пойдёт определение ATA-устройств.
    Все любят гипножабу

  7. #6
    Member Аватар для EARL
    Регистрация
    17.01.2006
    Адрес
    Тамбов
    Сообщений
    97
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SAM style
    Однако, прога гуд. Даже на некоторые мысли натолкнула.
    Спасибо! Это кусок кода вырезанный и переправленный из моего недописанного BIOS'а, который предположительно должен был бы работать на всех машинах с любым железом, но я так его и не закончил.
    Цитата Сообщение от SAM style
    А контроль простым изменением регистра сектора (как и сделано в начале каждой проги) разве не прокатит?
    Думаю, что нет, потому что если устройство не подключено к тестируемому контроллеру, то при чтение регистра сектора всегда возвращается одно и то же значение (то ли #00, то ли #FF, сейчас не помню) и изменить его нельзя! Поэтому приходиться перебирать все схемы и все утройства для каждой из них (Master/Slave). Иначе мы ничего не определим.
    Цитата Сообщение от SAM style
    а с CD/DVD прога, вроде, не будет работать, потому как там команда #EC считается за ошибку
    Ну да, только в этом случае можно считать значение из регистра цилиндра (прежде записав туда что либо отличное от #14EB) и, если оно равно #14EB, то у нас имеется CD-ROM, а значит и сам контроллер!

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

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

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

Похожие темы

  1. Модели, которые нужно эмулировать
    от Titus в разделе Эмуляторы
    Ответов: 31
    Последнее: 30.01.2007, 05:19
  2. Модели, которые нужно эмулировать
    от Titus в разделе Несортированное железо
    Ответов: 3
    Последнее: 09.02.2006, 19:22

Ваши права

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