Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Как открыть крышку CD-ROM


Автор: Гость_Sniper 7.8.2003, 16:44
Как открыть крышку CD-ROM без использования ф-ций win?
ответ либо кодом либо чтивом! :-)

Автор: a78040767 9.8.2003, 17:47
Могу привести код на Pascale
но это очень гемморойный вариантsmile.gif (в смысле без функций винды)

type
DWORD=array [0..1] of word;
TReqHdr=record
Size :byte;
SubUnit :byte;
Command :byte;
Status :word;
Reserved :array[0..7] of byte;
end;
TIOCTL=record
ReqHdr :TReqHdr;
MediaDescriptor :byte;
TransferAddress :pointer;
DataSize :word;
StartSector :word;
VolID :dword;
end;
var
IOCTL :^TIOCTL;
FunctionCode :byte;
begin
New(IOCTL);
FunctionCode:=0;
With IOCTL^ do
begin
ReqHdr.Size:=SizeOf(TIOCTL);
ReqHdr.SubUnit:=0;
ReqHdr.Command:=12;
MediaDescriptor:=0;
TransferAddress:=@FunctionCode;
DataSize:=1;
StartSector:=0;
longint(VolID):=0;
end;
asm
mov ax,1510h
mov cx,4
mov bx,word ptr IOCTL+2
mov es,bx
mov bx,word ptr IOCTL
int 2Fh
end;
Dispose(IOCTL);
end.

Автор: Гость_Sniper 10.8.2003, 12:06
спасибо буду разбираться :-)

Автор: Гость_Sniper 12.8.2003, 18:25
Чего-то не работает..... всё компилится и не работает! :-(

Автор: p0s0l 12.8.2003, 20:07
Странно, но у меня работает... Прямо так всtавил, ничего не меняя...

Автор: a78040767 18.8.2003, 17:47
Гость_Sniper кинь своё мыло я тебе документацию дам.

Автор: a78040767 18.8.2003, 18:03
и еще..
как я понял у тебя не работает вот почему:
в регистре cx должен быть номер твоего CDROMa
A:=0;B:=1;С:=2 и т.д. {это в конце, в ассемблерной вставке}

и вообще смотри Interrupt list там всё написано. ->

Inp.:
AX = 1510h
CX = CD-ROM drive letter (0 = A, 1 = B, etc)
ES:BX -> CD-ROM device driver request header (see #02597 at AX=0802h)
Return: CF clear if device driver has been called (check the request header's
status word to determine whether an error has occurred)
ES:BX request header updated
CF set if device driver has not been called
AX = error code (000Fh = invalid drive, 0001h = invalid function)
ES:BX request header unchanged

Notes: MSCDEX initializes the device driver request header's subunit field
based on the drive number specified in CX
MSCDEX v2.21 through v2.25 (at least) return error code AX=0001h if
nested calls are attempted
BUGS: Novell DOS 7 NWCDEX prior to the 12/13/94 update did not initialize
the subunit field
Windows95 sets CF if CX isn't a CD-ROM drive but leaves CF unchanged
if the drive is in fact a CD-ROM
SeeAlso: AX=0802h


Copied from Ralf Brown's Interrupt List

Автор: Sniper 19.8.2003, 18:02
a78040767
Я не Гость_Sniper а просто Sniper (мне лень просто заходить НОРМАЛЬНО! :-)))

Автор: Sniper 19.8.2003, 18:09
Спасибо! У меня эта цифра 5 :-)

Документацию конечноже жду! :-)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)