╔══════════════════════════════════════════════════════════════╗
║ 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)
Other articles: