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
|
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
|
||||||
|
|
||||||
;*************************************************
|
;*************************************************
|
||||||
;* ОПРЕДЕЛИТЬ ОБЩЕЕ КОЛИЧЕСТВО СЕКТОРОВ НА ДИСКЕ *
|
;* ОПРЕДЕЛИТЬ ОБЩЕЕ КОЛИЧЕСТВО СЕКТОРОВ НА ДИСКЕ *
|
||||||
;* Входные параметры передаются через глобальные *
|
;* Входные параметры передаются через глобальные *
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user