forked from KolibriOS/kolibrios
Support of last session for ISO9660.
git-svn-id: svn://kolibrios.org@758 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
e461a53e3d
commit
6094221d05
@ -20,6 +20,7 @@ MaxRetr equ 10
|
||||
; (в тиках)
|
||||
BSYWaitTime equ 1000 ;2
|
||||
NoTickWaitTime equ 0xfffff
|
||||
|
||||
;*************************************************
|
||||
;* ПОЛНОЕ ЧТЕНИЕ СЕКТОРА КОМПАКТ-ДИСКА *
|
||||
;* Считываются данные пользователя, информация *
|
||||
@ -847,6 +848,31 @@ GetEvent_StatusNotification:
|
||||
popa
|
||||
ret
|
||||
|
||||
;*************************************************
|
||||
; прочитать информацию из TOC
|
||||
;* Входные параметры передаются через глобальные *
|
||||
;* переменные: *
|
||||
;* ChannelNumber - номер канала; *
|
||||
;* DiskNumber - номер диска на канале. *
|
||||
;*************************************************
|
||||
Read_TOC:
|
||||
pusha
|
||||
mov [CDDataBuf_pointer],CDDataBuf
|
||||
; Очистить буфер пакетной команды
|
||||
call clear_packet_buffer
|
||||
; Сформировать пакетную команду для считывания
|
||||
; сектора данных
|
||||
mov [PacketCommand],byte 0x43
|
||||
; Задать формат
|
||||
mov [PacketCommand+2],byte 1
|
||||
; Размер выделенной области
|
||||
mov [PacketCommand+7],byte 0xFF
|
||||
mov [PacketCommand+8],byte 0h
|
||||
; Подать команду
|
||||
call SendPacketDatCommand
|
||||
popa
|
||||
ret
|
||||
|
||||
;*************************************************
|
||||
;* ОПРЕДЕЛИТЬ ОБЩЕЕ КОЛИЧЕСТВО СЕКТОРОВ НА ДИСКЕ *
|
||||
;* Входные параметры передаются через глобальные *
|
||||
|
@ -500,19 +500,40 @@ cd_find_lfn:
|
||||
; else CF=0 and [cd_current_pointer_of_input] direntry
|
||||
push eax esi
|
||||
; 16 ñåêòîð íà÷àëî íàáîðà äåñêðèïòîðîâ òîìîâ
|
||||
mov [CDSectorAddress],dword 15
|
||||
mov [CDDataBuf_pointer],CDDataBuf
|
||||
|
||||
call WaitUnitReady
|
||||
cmp [DevErrorCode],0
|
||||
jne .access_denied
|
||||
|
||||
call prevent_medium_removal
|
||||
; òåñòîâîå ÷òåíèå
|
||||
mov [CDSectorAddress],dword 16
|
||||
call ReadCDWRetr ;_1
|
||||
cmp [DevErrorCode],0
|
||||
jne .access_denied
|
||||
|
||||
; âû÷èñëåíèå ïîñëåäíåé ñåññèè
|
||||
call WaitUnitReady
|
||||
cmp [DevErrorCode],0
|
||||
jne .access_denied
|
||||
call Read_TOC
|
||||
mov ah,[CDDataBuf+4+4]
|
||||
mov al,[CDDataBuf+4+5]
|
||||
shl eax,16
|
||||
mov ah,[CDDataBuf+4+6]
|
||||
mov al,[CDDataBuf+4+7]
|
||||
add eax,15
|
||||
mov [CDSectorAddress],eax
|
||||
; mov [CDSectorAddress],dword 15
|
||||
mov [CDDataBuf_pointer],CDDataBuf
|
||||
|
||||
.start:
|
||||
inc dword [CDSectorAddress]
|
||||
call ReadCDWRetr ;_1
|
||||
cmp [DevErrorCode],0
|
||||
jne .access_denied
|
||||
|
||||
.start_check:
|
||||
; ïðîâåðêà íà âøèâîñòü
|
||||
cmp [CDDataBuf+1],dword 'CD00'
|
||||
jne .access_denied
|
||||
@ -527,6 +548,7 @@ cd_find_lfn:
|
||||
; ñåêòîð ÿâëÿåòñÿ äîïîëíèòåëüíûì äåñêðèïòîðîì òîìà?
|
||||
cmp [CDDataBuf+6],byte 0x1
|
||||
jne .start
|
||||
|
||||
; ïàðàìåòðû root äèðåêòðîðèè
|
||||
mov eax,[CDDataBuf+0x9c+2] ; íà÷àëî root äèðåêòðîðèè
|
||||
mov [CDSectorAddress],eax
|
||||
|
Loading…
Reference in New Issue
Block a user