╔══════════════════════════════════════════════════════════════╗ ║ Hard Disk Drive. ║ ╙──────────────────────────────────────────────────────────────╜ (C) Valerij Kozhevnikov (500:95/462.18) Hello All! Дабы не возникало баталий по поводу нужности #3D13 и вонючести/- рульности турбодрайверов, кидаю сие: ======================= Import begin =========================== Новые подпрограммы Теневого Сервис Монитора для работы с контроллером периферии SMUC. Ряд новых вызовов для п/п #81 RST #08 (DOS). (вызов встро- енного в монитор дискового интерпретатора), код подфункции зада- ется в регистре C. Изменена подфункция 9 setwrk дисковой системы. Начиная с версии 3.0a (код 68 от 29.04.95) в регистрах DE и BC возвращают- ся код версии и дата компиляции монитора: D- код версии; C, B, E - соответственно число, месяц, год. C = #22 ($hddid) - идентификация жесткого диска. in: 512 байтный буфер, указатель на который задается в setwrk (подфункция 9). буфер должен находится в диапазоне #4000 - #C000. out: CY - error (нет hdd). Эта подфункция определяет есть ли диск вообще и пытается возвра- тить в буфер сектор-идентификатор (паспорт) считанный из hdd. Формат паспорта hdd (512 байт). Все числа hex. ┌─────┬────────┬───────────────────────────────────────────────┐ │Addr │ Length │ Значение │ ├─────┼────────┼───────────────────────────────────────────────┤ │ 000 │ 02 │ Главное слово конфигурации │ │ 002 │ 02 │ Количество цилиндров │ │ 004 │ 02 │ Зарезервировано │ │ 006 │ 02 │ Количество головок │ │ 008 │ 02 │ Кол-во байт на дорожке │ │ 00A │ 02 │ Кол-во байт в секторе │ │ 00C │ 02 │ Кол-во секторов на дорожке │ │ 00E │ 06 │ Спецификация продавца │ │ 014 │ 14 │ Серийный номер (ASCII) │ │ 028 │ 02 │ Тип контроллера │ │ 02A │ 02 │ Емкость буфера (кэша) деленная на 512 байт │ │ 02C │ 02 │ Значение кода ECC для команд Long Read/Write │ │ 02E │ 08 │ Версия рабочих программ (ASCII) │ │ 036 │ 26 │ Модель (ASCII) │ └─────┴────────┴───────────────────────────────────────────────┘ Дальше каждый производитель волен вписывать что угодно. У меня далее одни нули. Слово - два байта, младший/старший. ECC - Error Control Code. Из-за непонятных стандартов, ASCII выглядит в паспорте не сов- сем понятно. Модель stЗ1ЧЧAT смотрится как ts13ЧЧTA. Значит, ес- ли понадобится вывести сие на экран, нужно поменять местами пер- вый байт со вторым, третий с четвертым и т.д. до конца строки. Для понятности терминологии: Дисковод: Мой винт: 80 цилиндров 1001 цилиндр 2 головки 15 головок 16 секторов/дорожка 17 секторов/дорожка 256 байт/сектор 512 байт/сектор Как засечь скорповый винт: ;.................................... DI LD A,(#0008) CP #C3 JR NZ,NO_HDD ;Это не скорп ; LD BC,#1FFD LD A,#02 OUT (C),A ;переключили ПЗУ LD A,(#00F1) ;Взяли код версии ТМ LD E,A ;винты водятся XOR A ;на версиях 96 и выше. OUT (C),A LD A,E CP 96 JR C,NO_HDD ;скорп, но со старым ПЗУ. ; LD HL,BUFF ;BUFF ДОЛЖНО БЫТЬ В ДИАПАЗОНЕ LD C,#09 ;#4000...#C000 ! RST #08 ;Установили рабочий буфер DEFB #81 ;(размер 512 байт) LD C,#22 RST #08 ;Винт есть? DEFB #81 ; JR C,NO_HDD ;нет однако. ... ;винт есть. В BUFF имеем ;паспорт винта. тут юзать #3d13 NO_HDD ... ;винта нету, можно ;юзать турбодрайверы. BUFF ;рабочий буфер DEFS #200 ======================== Import end ============================ Вобщем: спрашивайте - отвечу. Jason. Powered by ScorpionZS25бturbo+/SMUC/HDD'IDE1ЗOMb/FDD'800/ /CMOS/Covox/ATkbd/Mouse/CDOS --- is'edit 4.12+ * Origin : ...Altering The Future... (500:95/462.18)