ZXNet эхоконференция «code.zx»


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



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

от: Alexandr Sinyakov
кому: All
дата: 13 Feb 2007
Hello, goodboy goo> может сначала сделать проверку на наличие in a,(c) в пзуTRDOS ? goo> hl,#xxxx goo> c,#13 goo> call #3d13 goo> goo> 16 байт из адреса в HL, перенесутся в #5cdd Во, об этом-то я и не подумал! Hачал искать ldir:ret... Спасибо за напоминание. 2 EARL Hе надо зацикливать. Можно же считать несколько тыс.раз. Если оно всё ещё занято - значит его нет.

от: goodboy
кому: All
дата: 13 Feb 2007
Hello, EARL может сначала сделать проверку на наличие in a,(c) в пзуTRDOS ? hl,#xxxx c,#13 call #3d13 16 байт из адреса в HL, перенесутся в #5cdd

от: Дмитрий Лимонов
кому: All
дата: 13 Feb 2007
Hello, SAM style Если читать регистр состояния и проверять устройство на занятость так: ┌─- CODE ─── NO_BSY LD BC,#FFBE CALL IN_A RLCA RET NC JR NO_BSY IN_A - функция чтения регистра контроллера └── CODE ─── То в случае отсутствия проверяемого контроллера это приведет к зацикливанию. Предлагаю сделать следующие: выбираем первое устройство на данном контроллере и пишем, например, в регистр сектора какое-то значение, а потом проверяем его содержимое, потом проделываем тоже самое для второго устройства контроллера. Тут есть один большой недостаток, если неподключено ни одно устройство к тестируемому контроллеру, а он на самом деле есть, то мы его не определим. Для контроллеров 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.

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

от: Дмитрий Лимонов
кому: All
дата: 14 Feb 2007
Hello, SAM style Вот и обещанный код. Пришлось правда немного переписать, но вроде все работает (проверял в Unreal Speccy 35B). Вызывать нужно функцию detect_ide, которая в регистре A возвращает обнаруженные интерфейсы в битовом представлении: 0 - SMUC 1 - NEMO A8 2 - NEMO goo> может сначала сделать проверку на наличие in a,(c) в пзуTRDOS ? goo> hl,#xxxx goo> c,#13 goo> call #3d13 goo> goo> 16 байт из адреса в HL, перенесутся в #5cdd Следует добавить эту проверку перед вызовом detect_ide! Файл: ide_detect.rar http://zx.pk.ru/attachment.php?attachmentid=4594

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




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
От редакции - О первом спец.выпуске.
Реклама - реклама и объявления.
Новости - VAV (Exploder) купил Амигу и уходит со Спектрума.
B.B.S. Новости - О работе B.B.S.'ок.
Тест - Tест на сценера.

В этот день...   8 мая