|
KrNews
#08
05 марта 1999 |
|
Auto HDD - Как определить наличие винчестера.

_
Как определить наличие винчестера
_
Мы обнаружили этот материал в FIDO, в
эхе ZX.SPECTRUM. Материал полезный, а
доступ в FIDO имеется далеко не у всех.
Материал данной статьи использован при
написании загрузчика для этого номера.
-------------------------------cut---
--- LaraCroft 3.80 + турбонаддув T 3144A
* Origin: ...Altering The Future...
(2:5020/689.100)
─ FIDO Echos (2:5063/47.11) ────────────
─ ZX.SPECTRUM ─
Msg : 3028 of 3160
From : Valerij Kozhevnikoff
2:5020/689.100
Чет 28 янв 99 22:36
To : Alex Letaev Суб 30 янв 99 23:42
Subj : BestView 2.6 на подходе
─
--------------------------------cut-----
Вобщем, расскажу маленько про скорпо-
вый винт. Порты находятся в трдосе и для
их чтения в пзу трдоса по адресу #3FF3
имеются команды
IN A,(C)
RET
Если порт #FFBE содержит не #FF, значит
винт есть. Биты 6 и 7 порта #7FBA указы-
вают на статус устройств A и B соответс-
твенно. Если бит установлен, значит уст-
ройство является виртуальным дисководом,
и лазить к нему надо строго по #3D13.
Ага, а вот тут оно:
======== import file detect ============
Вот тут немножко инфы всякой.
Определение наличия винта и статуса
дисков.
Все нижесказанное справедливо для
контроллеров SMUC версий с 1.1 до 1.3.
Код версии ПЗУ - 96 и выше.
Версия контроллера 1. 3 признана окон-
чательной. А версия 1.0 это бета и глю-
кодромъ, и в широкую продажу не поступа-
ла.
К слову, под порты от 1.0 заточена
прошивка с кодом 95. А по фирменной до-
кументации, с жестким диском может рабо-
тать ПЗУ с кодом не ниже 96.
Содержимое порта #7FBA в пространстве
в/в trdos позволяет быстро узнать статус
устройств A и B. По сути своей этот порт
является ячейкой памяти на два бита.
Предназначен для того, чтобы никуда не
лазя быстро узнать что где, и как куда
обращаться. Доступен как на запись, так
и на чтение.
При любом (ручном либо программном)
подключении/отключении образов трдосных
дискет, теневик всегда приводит значение
этого порта, в соответствие с изменив-
шимся статусом устройств.
Читает его обычно уже сама trdos, ког-
да ей оно надо. Биты 6 и 7 определяют
статус для A и B соответственно.
Если бит установлен, значит устройство
подключено к драйверу жесткого диска, и
образ дискеты доступен через #3D13 либо
через RST 8.
Если бит сброшен, значит устройство
является реальным дисководом, и доступно
стандартными для дисководов средствами.
Все остальные биты в настоящее время
не используются, и всегда должны быть в
единице.
Диски C и D не могут быть реальными
дисководами -контроллер такого не под-
держивает. # оговорка: хоть изначально
плата Скорпиона и не поддерживает диско-
воды C и D, но при желании и умении они
могут быть подключены, что следует иметь
ввиду.
; проверка скорповости и наличия винта
; на выходе: флаг C=1 - нет винта
CHECKHD DI
LD A,(#0008)
CP #C3
JR NZ,NO_HDD; сие не скорп
LD BC,#1FFD
LD A,#02
OUT (C),A ; вкл. теневик
LD A,(#00F1) ; взяли код версии
LD E,#00
OUT (C),E ; выкл. теневик
CP 96
JR C,NO_HDD ; ПЗУ старое
LD BC,#FFBE
CALL RD_DOS
CP #FF
JR Z,NO_HDD ; рег.сост.пуст
XOR A
RET ; винт есть
NO_HDD SCF
RET ; винта нет
; --------------------------------------
; сама проверка дисковода
; в переменной DRIVE должен лежать
; номер 0...3
; на выходе: флаг C=1 - реальный драйв
DRIVE EQU #5CF6 ; номер драйва
TEST LD A,(DRIVE)
AND #3
CP #2
JR NC,OK_HDD ; C и D всегда
; на винте
RRA
JR C,TEST_B
TEST_A LD BC,#7FBA ; проверяем A
CALL RD_DOS
BIT 6,A
JR NZ,OK_HDD ; A на винте
SCF
RET ; А на дискете
TEST_B LD BC,#7FBA ; проверяем B
CALL RD_DOS
BIT 7,A
JR NZ,OK_HDD ; B на винте
SCF
RET ; B на дискете
OK_HDD OR A ; девайс на винте
RET
RD_DOS LD HL,#3FF3
PUSH HL
JP #3D2F
WBR, Jason.
Другие статьи номера:
Похожие статьи:
В этот день... 24 октября