Support of last session for ISO9660.

git-svn-id: svn://kolibrios.org@758 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Marat Zakiyanov (Mario79) 2008-02-25 23:34:27 +00:00
parent e461a53e3d
commit 6094221d05
2 changed files with 67 additions and 19 deletions

View File

@ -20,6 +20,7 @@ MaxRetr equ 10
; (в тиках) ; (в тиках)
BSYWaitTime equ 1000 ;2 BSYWaitTime equ 1000 ;2
NoTickWaitTime equ 0xfffff NoTickWaitTime equ 0xfffff
;************************************************* ;*************************************************
;* ПОЛНОЕ ЧТЕНИЕ СЕКТОРА КОМПАКТ-ДИСКА * ;* ПОЛНОЕ ЧТЕНИЕ СЕКТОРА КОМПАКТ-ДИСКА *
;* Считываются данные пользователя, информация * ;* Считываются данные пользователя, информация *
@ -847,6 +848,31 @@ GetEvent_StatusNotification:
popa popa
ret 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
;************************************************* ;*************************************************
;* ОПРЕДЕЛИТЬ ОБЩЕЕ КОЛИЧЕСТВО СЕКТОРОВ НА ДИСКЕ * ;* ОПРЕДЕЛИТЬ ОБЩЕЕ КОЛИЧЕСТВО СЕКТОРОВ НА ДИСКЕ *
;* Входные параметры передаются через глобальные * ;* Входные параметры передаются через глобальные *

View File

@ -500,19 +500,40 @@ cd_find_lfn:
; else CF=0 and [cd_current_pointer_of_input] direntry ; else CF=0 and [cd_current_pointer_of_input] direntry
push eax esi push eax esi
; 16 ñåêòîð íà÷àëî íàáîðà äåñêðèïòîðîâ òîìîâ ; 16 ñåêòîð íà÷àëî íàáîðà äåñêðèïòîðîâ òîìîâ
mov [CDSectorAddress],dword 15
mov [CDDataBuf_pointer],CDDataBuf
call WaitUnitReady call WaitUnitReady
cmp [DevErrorCode],0 cmp [DevErrorCode],0
jne .access_denied jne .access_denied
call prevent_medium_removal 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: .start:
inc dword [CDSectorAddress] inc dword [CDSectorAddress]
call ReadCDWRetr ;_1 call ReadCDWRetr ;_1
cmp [DevErrorCode],0 cmp [DevErrorCode],0
jne .access_denied jne .access_denied
.start_check:
; ïðîâåðêà íà âøèâîñòü ; ïðîâåðêà íà âøèâîñòü
cmp [CDDataBuf+1],dword 'CD00' cmp [CDDataBuf+1],dword 'CD00'
jne .access_denied jne .access_denied
@ -527,6 +548,7 @@ cd_find_lfn:
; ñåêòîð ÿâëÿåòñÿ äîïîëíèòåëüíûì äåñêðèïòîðîì òîìà? ; ñåêòîð ÿâëÿåòñÿ äîïîëíèòåëüíûì äåñêðèïòîðîì òîìà?
cmp [CDDataBuf+6],byte 0x1 cmp [CDDataBuf+6],byte 0x1
jne .start jne .start
; ïàðàìåòðû root äèðåêòðîðèè ; ïàðàìåòðû root äèðåêòðîðèè
mov eax,[CDDataBuf+0x9c+2] ; íà÷àëî root äèðåêòðîðèè mov eax,[CDDataBuf+0x9c+2] ; íà÷àëî root äèðåêòðîðèè
mov [CDSectorAddress],eax mov [CDSectorAddress],eax