
|
DX,AL ;тогда восстанавливаем значение 1.1.5 Определение числа и типа дисковых накопителей.На всех машинах кроме AT (который будет обсуждаться ниже) регистры микросхемы 8255 интерфейса с периферией содержат инфор- мацию о том, сколько НГМД имеет машина. В примерах [1.1.1] пока- зано как получить эту информацию. Информация определяющая тип диска содержится в таблице размещения файлов (FAT) диска, которая следит за использованием дискового пространства. Первый байт FAT содержит один из следующих кодов: Код Тип диска FF двухсторонний, 8 секторов FE односторонний, 8 секторов FD двухсторонний, 9 секторов FC односторонний, 9 секторов F9 двухсторонний, 15 секторов F8 фиксированный диск Сама таблица размещение файлов не является файлом. Она может быть считана при помощи функций DOS или BIOS непосредственно чи- тающих определенные сектора диска. В пункте [5.1.1] содержится вся информация необходимая для нахождения и чтения FAT. К счастью, операционная система обеспечивает функцию, которая возвращает идентификационный байт диска. Данные BIOS не показывают число жестких дисков в системе, так как переключатели предназначены только для гибких дисков. Однако Вы можете использовать указанную функцию операционной системы для поиска накопителей. Она возвращает значение 0CDH, вместо одного из упомянутых кодов, когда накопители отсутствуют. Надо просто проверять все большие и большие номера накопителей, до тех пор пока не будет обнаружено указанное значение. AT уникален в том смысле, что его информация о конфигурации говорит какой тип накопителя используется. Эту информацию можно получить из порта с адресом 71H, предварительно послав номер регистра в порт 70H. Для НГМД номер регистра равен 10H. Информа- ция о первом накопителе содержится в битах 7-4, а о втором - в битах 3-0. В обоих случаях цепочка битов 0000 говорит об отсутст- вии накопителя, 0001 - о двухстороннем накопителе с плотностью 48 дорожек на дюйм, а 0010 - о накопителе большой емкости (96 доро- жек на дюйм). Информация о фиксированном диске содержится в ре- гистре 12H. И снова биты 7-4 и 3-0 соответствуют первому и второ- му накопителям. 0000 указывает на отсутствие накопителя. Другие 15 возможных значений описывают емкость и конструкцию накопителя. Эти коды сложные; если Вам по какой-то причине потребуется эта информация, обратитесь к техническому руководству по AT. Средний уровень. Функция 1CH прерывания 21H возвращает информацию об указанном накопителе. Поместите номер накопителя в DL, причем 0 = накопи- тель по умолчанию, 1 = A, и т.д. При возвращении DX содержит число кластеров в FAT, AL - число секторов в кластере, а CX - число байтов в секторе. DS:BX указывает на байт, содержащий код идентификации диска из FAT, согласно приведенной таблице. В сле- дующем примере определяется тип накопителя A: ;---определение типа диска MOV AH,1CH ;функция MS DOS MOV DL,1 ;выбор накопителя A INT 21H ;получение информации MOV DL,[BX] ;получение типа накопителя CMP DL,0FDH ;двухсторонний, 9 секторов? JE DBL_9 ;и т.д. BIOS AT имеет функцию, сообщающую общие параметры накопителей. Это функция 8 прерывания 13H. Она возвращает число накопителей в DL, максимальное число сторон накопителя в DH, максимальное число секторов в CL и дорожек в CH, а код статуса ошибки накопителя в AH (см. пункт [5.4.8]). Другая функция BIOS AT возвращает тип накопителя. Это функция 15H прерывания 13H, которая требует номера накопителя в DL. В AH возвращается код, причем 0 = нет накопителя, 1 = дискета без обнаружения изменений, 2 = дискета с обнаружением изменений и 3 = фиксированный диск. В случае фиксированного диска в CX:DX возвра- щается число секторов по 512 байт. 1.1.6 Определение числа и типа периферийных устройств.При старте ROM-BIOS проверяет присоединенное оборудование, сообщая о результатах своей проверки в регистр статуса. Этот регистр занимает два байта, начиная с 0040:0010. Нижеприведенные значения битов относятся ко всем машинам, пока не оговорено об- ратное: бит 0 если 1, то присутствует НГМД 1 XT,AT:1 = есть мат. сопроцессор (PC,PCjr:не использ.) 2-3 11 = базовая память 64K (AT:не используется) 4-5 Активный видеоадаптер (11 = монохромный, 10 = цветной 80*25, 01 = цветной 40*25) 6-7 число НГМД (если бит 0 = 1) 8 PCjr:0 = есть DMA (PC,XT,AT:не используется) 9-11 число адаптеров коммуникации 12 1 = есть игровой порт (AT:не используется) 13 PCjr:есть серийный принтер (PC,XT,AT:не использ.) 14-15 число присоединенных принтеров Большая часть информация расшифровывается примитивно. Но обра- тите внимание, что информация о дисковых накопителях распределена между битами 0 и 6-7. Значение 0 в битах 6-7 указывает, что име- ется один дисковый накопитель; чтобы узнать об отсутствии накопи- телей надо проверить бит 0. Число портов коммуникации может быть получено из области дан- ных BIOS. BIOS отводит четыре 2-байтных поля для хранения базовых адресов вплоть до четырех COM портов (MS DOS использует только два из них). Базовый адрес - это младший из адресов портов, отно- сящихся к группе портов, имеющих доступ к данному каналу коммуни- кации. Эти четыре поля начинаются с адреса 0040:0008. Порту COM1 соответствует адрес :0008, а COM2 - 000A. Если это поле содержит 0, то соответствующий порт отсутствует. Таким образом, если слово по адресу :0008 отлично от нуля, а по адресу 000A - нулевое, то имеется один порт коммуникации. AT хранит информацию о периферии в регист |