📄 ata_atapi33a.inc
字号:
test al,0x80 ; BSY bit
jnz pass_drq_err_check_2w
test al,0x01
jnz loc_ata_ide_io_error_w
clc
ret
pass_drq_err_check_2w:
loop loc_read_status_reg_4w
loc_ata_ide_io_error_w:
stc
ret
;----------------------------------------------------;
; Play cd ;
;----------------------------------------------------;
Play_cd:
push edi
call Clear_atapi_packet
mov byte[packet+8],0xff
mov byte[packet+7],0xff
mov byte[packet+5],0xff
mov byte[packet+4],0xff
mov byte[packet+3],0xff
mov byte[packet+2],0xff
mov byte[packet+0],0x45
call Send_Atapi_Packet
pop edi
ret
;----------------------------------------------------;
; Read toc ;
;----------------------------------------------------;
Read_toc:
call Wait_unit_ready
jc Unit_not_ready_a
pushad
call Small_Delay1
call Clear_atapi_packet
mov ax,402
mov byte[packet+8],ah
mov byte[packet+7],al ;ah
mov byte[packet+0],0x43
call Send_Atapi_Packet
; call Small_Delay1 ;new
jc Unit_not_ready_b
; call Clear_status ;new
; jc Unit_not_ready_b ;new
call Read_write_toc
Unit_not_ready_b:
popad
Unit_not_ready_a:
ret
;----------------------------------------------------;
; Clear atapi packet ;
;----------------------------------------------------;
Clear_atapi_packet:
push edi
pushad
mov ax,linear_sel
mov es,ax
cld
cli
mov edi,packet
xor ecx,ecx
mov cx,12
xor al,al
rep stosb
sti
popad
pop edi
ret
;----------------------------------------------------;
; Stop cd ;
;----------------------------------------------------;
Stop_cd:
push edi
call Clear_atapi_packet
mov byte[packet+4],0x0
mov byte[packet+1],0x1
mov byte[packet+0],0x1b
call Send_Atapi_Packet
pop edi
ret
;----------------------------------------------------;
; Pause cd ;
;----------------------------------------------------;
Pause_cd:
push edi
call Clear_atapi_packet
mov byte[packet+8],0x0
mov byte[packet+0],0x4b
call Send_Atapi_Packet
pop edi
ret
;----------------------------------------------------;
; Start cd ;
;----------------------------------------------------;
Start_cd:
push edi
call Clear_atapi_packet
mov byte[packet+4],0x1
mov byte[packet+1],0x1
mov byte[packet+0],0x1b
call Send_Atapi_Packet
pop edi
ret
;----------------------------------------------------;
; Eject cd ;
;----------------------------------------------------;
Eject_cd:
push edi
pushad
call Clear_atapi_packet
mov byte[packet+4],0x2
mov byte[packet+1],0x1
mov byte[packet+0],0x1b
call Send_Atapi_Packet
popad
pop edi
ret
;----------------------------------------------------;
; Close cd ;
;----------------------------------------------------;
Close_cd:
push edi
pushad
call Clear_atapi_packet
mov byte[packet+0],0x1b
mov byte[packet+1],0x1
mov byte[packet+4],0x3
call Send_Atapi_Packet
popad
pop edi
ret
;----------------------------------------------------;
; Small Delay ;
;----------------------------------------------------;
Small_Delay1:
push cx
mov cx,0xffff
BusyDelay3a11:
nop
nop
nop
nop
nop
nop
nop
nop
loop BusyDelay3a11
pop cx
ret
;--------------------------------------------------------------------------------------------;
; Data ;
;--------------------------------------------------------------------------------------------;
packet:
db 0x0
db 0x0
db 0x0
db 0x0
db 0x0
db 0x0
db 0x0
db 0x0
db 0x0
db 0x0
db 0x0
db 0x0
TOC_Data_Buffer:
rb 804
;---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -