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
;************************************************* ;*************************************************
;* ПОЛНОЕ ЧТЕНИЕ СЕКТОРА КОМПАКТ-ДИСКА * ;* ПОЛНОЕ ЧТЕНИЕ СЕКТОРА КОМПАКТ-ДИСКА *
;* Считываются данные пользователя, информация * ;* Считываются данные пользователя, информация *
@ -131,7 +132,7 @@ ReadCDWRetr_1:
cmp [DevErrorCode],0 cmp [DevErrorCode],0
je @@End_4 je @@End_4
or ecx,ecx ;{SPraid.simba} (for cd load) or ecx,ecx ;{SPraid.simba} (for cd load)
jz @@End_4 jz @@End_4
dec ecx dec ecx
@ -145,12 +146,12 @@ ReadCDWRetr_1:
jmp .wait jmp .wait
@@: @@:
; Задержка на 2,5 секунды ; Задержка на 2,5 секунды
; mov EAX,[timer_ticks] ; mov EAX,[timer_ticks]
; add EAX,50 ;250 ; add EAX,50 ;250
;@@Wait: ;@@Wait:
; call change_task ; call change_task
; cmp EAX,[timer_ticks] ; cmp EAX,[timer_ticks]
; ja @@Wait ; ja @@Wait
loop @@NextRetr loop @@NextRetr
@@End_4: @@End_4:
popad popad
@ -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

@ -494,25 +494,46 @@ fs_CdGetFileInfo:
;---------------------------------------------------------------- ;----------------------------------------------------------------
cd_find_lfn: cd_find_lfn:
mov [cd_appl_data],0 mov [cd_appl_data],0
; in: esi+ebp -> name ; in: esi+ebp -> name
; out: CF=1 - file not found ; out: CF=1 - file not found
; 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
cmp [DevErrorCode],0
call WaitUnitReady jne .access_denied
cmp [DevErrorCode],0
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