34,29 → 34,28 |
ReadCD: |
pusha |
; Çàäàòü ðàçìåð ñåêòîðà |
mov [CDBlockSize],2048 ;2352 |
mov [CDBlockSize],2048 ;2352 |
; Î÷èñòèòü áóôåð ïàêåòíîé êîìàíäû |
call clear_packet_buffer |
; Ñôîðìèðîâàòü ïàêåòíóþ êîìàíäó äëÿ ñ÷èòûâàíèÿ |
; ñåêòîðà äàííûõ |
; Çàäàòü êîä êîìàíäû Read CD |
mov [PacketCommand],byte 0x28 ;0xBE |
mov [PacketCommand],byte 0x28 ;0xBE |
; Çàäàòü àäðåñ ñåêòîðà |
mov AX,word [CDSectorAddress+2] |
xchg AL,AH |
mov word [PacketCommand+2],AX |
mov AX,word [CDSectorAddress] |
xchg AL,AH |
mov word [PacketCommand+4],AX |
mov AX,word [CDSectorAddress+2] |
xchg AL,AH |
mov word [PacketCommand+2],AX |
mov AX,word [CDSectorAddress] |
xchg AL,AH |
mov word [PacketCommand+4],AX |
; mov eax,[CDSectorAddress] |
; mov [PacketCommand+2],eax |
; Çàäàòü êîëè÷åñòâî ñ÷èòûâàåìûõ ñåêòîðîâ |
mov [PacketCommand+8],byte 1 |
mov [PacketCommand+8],byte 1 |
; Çàäàòü ñ÷èòûâàíèå äàííûõ â ïîëíîì îáúåìå |
; mov [PacketCommand+9],byte 0xF8 |
; Ïîäàòü êîìàíäó |
call SendPacketDatCommand |
; call test_mario79 |
call SendPacketDatCommand |
popa |
ret |
|
97,6 → 96,9 |
pop edi |
|
call ReadCDWRetr_1 |
cmp [DevErrorCode],0 |
jne .exit |
|
mov [CDDataBuf_pointer],ebx |
call cd_calculate_cache_1 |
lea esi,[edi*8+esi] |
113,6 → 115,7 |
mov ecx,512 ;/4 |
cld |
rep movsd ; move data |
.exit: |
popad |
ret |
|
121,34 → 124,34 |
|
; Öèêë, ïîêà êîìàíäà íå âûïîëíåíà óñïåøíî èëè íå |
; èñ÷åðïàíî êîëè÷åñòâî ïîïûòîê |
mov ECX,MaxRetr |
mov ECX,MaxRetr |
@@NextRetr: |
; Ïîäàòü êîìàíäó |
call ReadCD |
cmp [DevErrorCode],0 |
je @@End_4 |
call ReadCD |
cmp [DevErrorCode],0 |
je @@End_4 |
|
or ecx,ecx ;{SPraid.simba} (for cd load) |
jz @@End_4 |
dec ecx |
or ecx,ecx ;{SPraid.simba} (for cd load) |
jz @@End_4 |
dec ecx |
|
cmp [timer_ticks_enable],0 |
jne @f |
mov eax,NoTickWaitTime |
cmp [timer_ticks_enable],0 |
jne @f |
mov eax,NoTickWaitTime |
.wait: |
dec eax |
cmp eax,0 |
je @@NextRetr |
jmp .wait |
dec eax |
cmp eax,0 |
je @@NextRetr |
jmp .wait |
@@: |
; Çàäåðæêà íà 2,5 ñåêóíäû |
mov EAX,[timer_ticks] |
add EAX,250 ;50 |
@@Wait: |
call change_task |
cmp EAX,[timer_ticks] |
ja @@Wait |
loop @@NextRetr |
; mov EAX,[timer_ticks] |
; add EAX,50 ;250 |
;@@Wait: |
; call change_task |
; cmp EAX,[timer_ticks] |
; ja @@Wait |
loop @@NextRetr |
@@End_4: |
popad |
ret |
189,6 → 192,7 |
;**************************************************** |
SendPacketDatCommand: |
pushad |
mov [DevErrorCode],0 |
; Çàäàòü ðåæèì CHS |
mov [ATAAddressMode],0 |
; Ïîñëàòü ATA-êîìàíäó ïåðåäà÷è ïàêåòíîé êîìàíäû |
301,7 → 305,6 |
jmp @@End_8 |
@@Err6: |
mov [DevErrorCode],6 |
|
@@End_8: |
popad |
ret |
319,6 → 322,7 |
;*********************************************** |
SendPacketNoDatCommand: |
pushad |
mov [DevErrorCode],0 |
; Çàäàòü ðåæèì CHS |
mov [ATAAddressMode],0 |
; Ïîñëàòü ATA-êîìàíäó ïåðåäà÷è ïàêåòíîé êîìàíäû |
367,7 → 371,7 |
out DX,AX |
; sti |
cmp [ignore_CD_eject_wait],1 |
je @@End_9 |
je @@End_9 |
; Îæèäàíèå ïîäòâåðæäåíèÿ ïðèåìà êîìàíäû |
mov DX,[ATABasePortAddr] |
add DX,7 ;ïîðò 1õ7h |
419,6 → 423,7 |
;**************************************************** |
SendCommandToHDD_1: |
pushad |
mov [DevErrorCode],0 |
; Ïðîâåðèòü çíà÷åíèå êîäà ðåæèìà |
cmp [ATAAddressMode],1 |
ja @@Err2_4 |
815,21 → 820,19 |
;************************************************* |
GetEvent_StatusNotification: |
pusha |
mov [CDDataBuf_pointer],CDDataBuf |
mov [CDDataBuf_pointer],CDDataBuf |
; Î÷èñòèòü áóôåð ïàêåòíîé êîìàíäû |
call clear_packet_buffer |
; Çàäàòü êîä êîìàíäû |
mov [PacketCommand],word 4Ah |
mov [PacketCommand],byte 4Ah |
mov [PacketCommand+1],byte 00000001b |
; Çàäàòü çàïðîñ êëàññà ñîîáùåíèé |
mov [PacketCommand+4],byte 00010000b |
; Çàäàòü çàïðîñ êëàññà ñîîáùåíèé |
mov [PacketCommand+7],byte 8 |
mov [PacketCommand+8],byte 0 |
; Ðàçìåð âûäåëåííîé îáëàñòè |
mov [PacketCommand+7],byte 8h |
mov [PacketCommand+8],byte 0h |
; Ïîäàòü êîìàíäó |
; mov [timer_ticks_enable],0 |
call SendPacketDatCommand |
; mov [timer_ticks_enable],1 |
popa |
ret |
|
841,17 → 844,17 |
;* DiskNumber - íîìåð äèñêà íà êàíàëå. * |
;************************************************* |
;ReadCapacity: |
; pusha |
; pusha |
;; Î÷èñòèòü áóôåð ïàêåòíîé êîìàíäû |
; call clear_packet_buffer |
; call clear_packet_buffer |
;; Çàäàòü ðàçìåð áóôåðà â áàéòàõ |
; mov [CDBlockSize],8 |
; mov [CDBlockSize],8 |
;; Ñôîðìèðîâàòü êîìàíäó READ CAPACITY |
; mov [PacketCommand],word 25h |
; mov [PacketCommand],word 25h |
;; Ïîäàòü êîìàíäó |
; call SendPacketDatCommand |
; popa |
; ret |
; call SendPacketDatCommand |
; popa |
; ret |
|
clear_packet_buffer: |
; Î÷èñòèòü áóôåð ïàêåòíîé êîìàíäû |
859,4 → 862,3 |
mov [PacketCommand+4],dword 0 |
mov [PacketCommand+8],dword 0 |
ret |
|