Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.223.196.59] |
|
Сообщ.
#1
,
|
|
|
Народ! Нужен ваш хелп. Очень.
Каким прерыванием открыть/закрыть сидюк? Спасибо. |
Сообщ.
#2
,
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Пример открывания и закрытия CD-ROM`а (by 7in) ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .MODEL Tiny,Pascal .CODE ORG 100h SMART Start: call GetCDROMInfo or al,al lea dx,Error je Exit ; Если MSCDEX push FirstCDROM mov ax,1 ; Открыть CD-ROM push ax call CDROMEject lea dx,Opened mov ah,9 int 21h push FirstCDROM xor ax,ax ; Закрыть CD-ROM push ax call CDROMEject lea dx,Closed Exit: mov ah,9 int 21h int 20h Opened DB 'CDROM is Ejected!',13,10,'$' Closed DB 'Tray is Closed!',13,10,'$' Error DB 'MSCDEX is not installed!',7,13,10,'$' ;-- Процедуры ---------------------------------------------------------------; FirstCDROM DW ? ; Номер буквы имени первого CD-ROM-устройства (A=0...) CDROMsNumber DW ? ; Количество CD-ROM-устройств ; Возвращает AL=1, если MSCDEX загружен, и заполняет FirstCDROM и ; CDROMsNumber соответствующими значениями. Возвращает AL=0, если ; MSCDEX не загружен, и дальнейшая работа с CD-ROM невозможна. GetCDROMInfo proc mov ax,1500h xor bx,bx xor cx,cx int 2Fh xor al,al or bx,bx jz @@Error inc ax mov FirstCDROM,cx mov CDROMsNumber,bx @@Error: ret GetCDROMInfo endp ; Формат запроса Request struc ReqLen DB ? ; Длина запроса SubUnit DB ? ; Номер подустройства драйвера Command DB ? ; Код коданды Status DW ? ; Статус (результат) ; Status - Если бит 15 установлен, значит ошибка, код в младшем байте ; Status - Если бит 9 установлен, значит устройство занято ; Status - Если бит 8 установлен, значит запрос выполнен!!! Reserved DB 8 dup (?) ; Резерв (устанавливается драйвером) ; Далее идут данные для команды 12 (IOCTLO) Media DB ? ; Media descriptor byte from BPB Address DD ? ; Указатель на передаваемые байты DataSize DW ? ; Количество передаваемых байт Sector DW ? ; Номер начального сектора VolID DD ? ; DWORD ptr to requested vol ID if error 0Fh ends ; Послает драйверу устройства Drive запрос типа Request, на который ; указывает Data. После выполнения запроса в поля ErrorCode и Status ; заносится код результата. SendCDROMRequest proc arg Drive:WORD, Data:DWORD uses ES mov ax,1510h mov cx,Drive les bx,Data int 2Fh ret SendCDROMRequest endp ; Открывает (Open<>0) / закрывает (Open=0) устройство Drive. ; Функция возвращает статус в регистре AX. CDROMEject proc arg Drive:WORD, Open:BYTE local Data:Request, Code:BYTE mov Data.ReqLen,26 mov Data.SubUnit,0 mov Data.Command,12 and Data.Status,0 mov Data.Media,0 lea ax,Code mov WORD PTR Data.Address[0],ax mov WORD PTR Data.Address[2],ss mov Data.DataSize,1 and Data.Sector,0 and WORD PTR Data.VolID[0],0 and WORD PTR Data.VolID[2],0 mov Code,0 cmp Open,0 jne @@OpenIt mov Code,5 @@OpenIt: push Drive push ss lea ax,Data push ax call SendCDROMRequest mov ax,Data.Status ret CDROMEject endp END Start |
Сообщ.
#3
,
|
|
|
Ой! Красота-то какая!!! ))
Неужели трудно сделать, чтобы пробелы вначале не удалялись?!!! Эту прогу я тебе на мыло кину сейчас... |
Сообщ.
#4
,
|
|
|
Спасибо !!!
|