📄 ata_atapi33.inc
字号:
call Clear_atapi_packet
mov byte[packet+0],0x0
call Send_Atapi_Packet
Clear_status:
xor ecx,ecx
mov cx,0xffff
mov dx,0x7
add dx,word[port]
loc_read_status_reg_4w:
in al,dx
test al,0x80 ; BSY bit
jnz pass_drq_err_check_2w
test al,0x40
jz pass_drq_err_check_2w
test al,0x01
jnz loc_ata_ide_io_error_w
clc
jmp lets_go_by
pass_drq_err_check_2w:
loop loc_read_status_reg_4w
loc_ata_ide_io_error_w:
stc
lets_go_by:
ret
;----------------------------------------------------;
; Play cd ;
;----------------------------------------------------;
Play_cd:
;push edi
call Small_Delay1
call Wait_unit_ready
call Small_Delay1
call Wait_unit_ready
jc Unit_not_ready_play
call Clear_atapi_packet
mov ax,10*60*75
mov byte[packet+8],al
mov byte[packet+7],ah
; 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
mov esi, stringood
call print_string
ret
Unit_not_ready_play:
; pop edi
mov esi, stringbad
call print_string
ret
;----------------------------------------------------;
; Read toc ;
;----------------------------------------------------;
Read_toc:
call Small_Delay1
call Wait_unit_ready
call Small_Delay1
call Wait_unit_ready
pushad
jc Unit_not_ready_a
call Small_Delay1
call Clear_atapi_packet
mov ax,804
mov byte[packet+8],al
mov byte[packet+7],ah
mov byte[packet+0],0x43
call Send_Atapi_Packet
jc Unit_not_ready_a
call Read_write_toc
jc Unit_not_ready_a
Unit_is_ready_a:
popad
mov esi, stringood
call print_string
ret
Unit_not_ready_a:
popad
mov esi, stringbad
call print_string
ret
;----------------------------------------------------;
; Clear atapi packet ;
;----------------------------------------------------;
Clear_atapi_packet:
pushad
mov byte[packet+0],0x00
mov byte[packet+1],0x00
mov byte[packet+2],0x00
mov byte[packet+3],0x00
mov byte[packet+4],0x00
mov byte[packet+5],0x00
mov byte[packet+6],0x00
mov byte[packet+7],0x00
mov byte[packet+8],0x00
mov byte[packet+9],0x00
mov byte[packet+10],0x00
mov byte[packet+11],0x00
popad
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 806
;--------------------------------------------------------------------------------------------;
; The end for now! ;
;--------------------------------------------------------------------------------------------;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -