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, а значит и сам контроллер!




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

Похожие статьи:
Информацриум - CD с эмуляторами и ZX-софтом.
Реклама - Реклама и объявления.
Комьюнити - Forever 2015: отчет с демопати для всех 8-битных компьютеров.
Enlight'97 - Ориентировочный график. Общие правила для всех конкурсов на всех платформах.
Юмор - Анекдоты.

В этот день...   20 апреля