Про HDD: как его увидеть.

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

От Valerij Kozhevnikov (500:95/462. Кому All 18.04.1998


Hello All!

Дабы не возникало баталий по поводу нужности #3d13 и вонючес-
ти/рульности турбодрайверов, кидаю сие. Перед обращением к
дисководу было бы логично убедиться в его наличии, дабы не по-
лучилось турболодера с магнитофона Е.

============================ Import begin ==============================

Hовые подпрограммы Теневого Сервис Монитора для работы с
контроллером периферии SMUC.
Ряд новых вызовов для п/п #81 RST #08 (DOS).
(вызов встроенного в монитор дискового интерпретатора), код
подфункции задается в регистре C.
Изменена подфункция 9 setwrk дисковой системы. Hачиная с
версии 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 выглядит в паспорте не
совсем понятно. Модель st3144AT смотрится как ts1344TA. Зна-
чит, если понадобится вывести сие на экран, нужно поменять
местами первый байт со вторым, третий с четвертым и т.д. до
конца строки.

Для понятности терминологии:

Дисковод: Мой винт:
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 ДОЛЖHО БЫТЬ В ДИАПАЗОHЕ
LD C,#09 ;#4000...#BDFF !
RST #08 ;Установили рабочий буфер
DEFB #81 ;(размер 512 байт)
LD C,#22
RST #08 ;Винт есть?
DEFB #81 ;
JR C,NO_HDD ;нет однако.
...
... ;винт есть. В BUFF имеем
CALL #3D13 ;паспорт винта. тут юзать #3d13
DI
...
;============================================================
NO_HDD
...
... ;винта нету, можно
PUSH IX ;юзать турбодрайверы.
JP #3D2F
;
BUFF ;рабочий буфер
DEFS #200

============================== Import end ==============================

Jason.

Powered by ScorpionZS256turbo+/SMUC/HDD'IDE130Mb/FDD'800/
/CMOS/Cache8k/Covox/ATkbd/Mouse/CDOS...