📄 ata_atapi39.inc
字号:
jmp GetOtherFileName
Toc_error:
stc
Toc_error1:
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
mov byte[LoByte],04 ;*
mov byte[HiByte],08 ;*
call Send_Atapi_Packet
jc Unit_not_ready_a
call Read_write_toc
jc Unit_not_ready_a
Unit_is_ready_a:
popad
clc
mov esi, stringood
call print_string
ret
Unit_not_ready_a:
popad
stc
mov esi, stringbad
call print_string
ret
;----------------------------------------------------;
; Get track info ;
;----------------------------------------------------;
Get_track_info:
call Read_toc
jc Read_toc_error
call Small_Delay1
pushad
xor edx,edx
mov esi,TOC_Data_Buffer
add esi,3
lodsb
inc al
mov cl,al
movzx ecx,cl
mov esi,TOC_Data_Buffer
add esi,4
Gettrackinfo:
push ecx
inc edx
mov bl,byte[ds:esi+2]
cmp bl,byte[track_num]
jne NoNotThisTrack
mov ebx,dword[ds:esi+4]
call Mirror_ebx
mov dword[track_start],ebx
mov ebx,dword[ds:esi+4+8]
call Mirror_ebx
mov eax,dword[track_start]
sub ebx,eax
and ebx,0xffff
mov dword[track_length],ebx
mov bl,byte[ds:esi+1]
and bl,0x0f
and bl,4
shr bl,2
mov byte[track_type],bl
NoNotThisTrack:
add esi,8
pop ecx
dec ecx
cmp ecx,0
jne Gettrackinfo
popad
clc
ret
Read_toc_error:
stc
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
;----------------------------------------------------;
; Mirror ebx ;
;----------------------------------------------------;
Mirror_ebx:
push edi
push es
mov ax,sys_data ; Move how data base,into ax
mov es,ax ; move ax into es
mov edi,Ebx_buffer
mov byte[es:edi+3],bl
shr ebx,8
mov byte[es:edi+2],bl
shr ebx,8
mov byte[es:edi+1],bl
shr ebx,8
mov byte[es:edi+0],bl
mov ebx,dword[Ebx_buffer]
pop es
pop edi
ret
;--------------------------------------------------------------------------------------------;
; Data ;
;--------------------------------------------------------------------------------------------;
LoByte: db 0
HiByte: db 0
SectorAdress: dd 0
LoadAdress: dd 0
FileSizeBytes: dd 0
counter: dw 0
LoopCounter: db 0
track_type: db 0
track_num: db 0
track_start: dd 0
track_length: dd 0
Ebx_buffer: dd 0
testebx_buffer: dd 0
RootDirSector: dd 0
TmpFileName1: du 64
db 0x0d,0
TmpFileName2: du 64
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
DiskBuffer: rb 2048
;--------------------------------------------------------------------------------------------;
; The end for now! ;
;--------------------------------------------------------------------------------------------;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -