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