The universal cache of IDE devices.
Step 2: 1) Realized cache ATAPI device (CD\DVD). 2) Lock\Unlock ATAPI device for working with cache. 3) Eject (F70/10) and Load (F70/11) tray of ATAPI device. 4) Application CD_tray for control of tray ATAPI device. git-svn-id: svn://kolibrios.org@585 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
@@ -16,7 +16,6 @@ $Revision$
|
|||||||
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||||
|
|
||||||
|
|
||||||
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
MaxRetr equ 10
|
MaxRetr equ 10
|
||||||
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
@@ -68,6 +67,70 @@ ReadCD:
|
|||||||
;* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
|
;* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
|
||||||
;********************************************
|
;********************************************
|
||||||
ReadCDWRetr:
|
ReadCDWRetr:
|
||||||
|
;-----------------------------------------------------------
|
||||||
|
; input : eax = block to read
|
||||||
|
; ebx = destination
|
||||||
|
;-----------------------------------------------------------
|
||||||
|
pushad
|
||||||
|
mov eax,[CDSectorAddress]
|
||||||
|
mov ebx,[CDDataBuf_pointer]
|
||||||
|
call cd_calculate_cache
|
||||||
|
add esi,8
|
||||||
|
mov edi,1
|
||||||
|
.hdreadcache:
|
||||||
|
; push esi
|
||||||
|
; mov esi,[esi]
|
||||||
|
; call test_mario79
|
||||||
|
; mov esi,eax
|
||||||
|
; call test_mario79
|
||||||
|
; pop esi
|
||||||
|
|
||||||
|
; cmp dword [esi+4],0 ; empty
|
||||||
|
; je .nohdcache
|
||||||
|
cmp [esi],eax ; correct sector
|
||||||
|
je .yeshdcache
|
||||||
|
.nohdcache:
|
||||||
|
add esi,8
|
||||||
|
inc edi
|
||||||
|
dec ecx
|
||||||
|
jnz .hdreadcache
|
||||||
|
call find_empty_slot_CD_cache ; ret in edi
|
||||||
|
|
||||||
|
push edi
|
||||||
|
push eax
|
||||||
|
call cd_calculate_cache_2
|
||||||
|
shl edi,11
|
||||||
|
add edi,eax
|
||||||
|
mov [CDDataBuf_pointer],edi
|
||||||
|
pop eax
|
||||||
|
pop edi
|
||||||
|
|
||||||
|
call ReadCDWRetr_1
|
||||||
|
mov [CDDataBuf_pointer],ebx
|
||||||
|
call cd_calculate_cache_1
|
||||||
|
lea esi,[edi*8+esi]
|
||||||
|
; push esi
|
||||||
|
; call test_mario79
|
||||||
|
; mov esi,eax
|
||||||
|
; call test_mario79
|
||||||
|
; pop esi
|
||||||
|
mov [esi],eax ; sector number
|
||||||
|
; mov dword [esi+4],1 ; hd read - mark as same as in hd
|
||||||
|
.yeshdcache:
|
||||||
|
mov esi,edi
|
||||||
|
shl esi,11 ;9
|
||||||
|
push eax
|
||||||
|
call cd_calculate_cache_2
|
||||||
|
add esi,eax
|
||||||
|
pop eax
|
||||||
|
mov edi,ebx ;[CDDataBuf_pointer]
|
||||||
|
mov ecx,512 ;/4
|
||||||
|
cld
|
||||||
|
rep movsd ; move data
|
||||||
|
popad
|
||||||
|
ret
|
||||||
|
|
||||||
|
ReadCDWRetr_1:
|
||||||
pushad
|
pushad
|
||||||
|
|
||||||
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>
|
||||||
@@ -517,6 +580,45 @@ WaitUnitReady:
|
|||||||
popa
|
popa
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
;*************************************************
|
||||||
|
;* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
|
||||||
|
;* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
|
||||||
|
;* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: *
|
||||||
|
;* ChannelNumber - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; *
|
||||||
|
;* DiskNumber - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. *
|
||||||
|
;*************************************************
|
||||||
|
prevent_medium_removal:
|
||||||
|
pusha
|
||||||
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
call clear_packet_buffer
|
||||||
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
mov [PacketCommand],byte 0x1E
|
||||||
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
mov [PacketCommand+4],byte 11b
|
||||||
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
call SendPacketNoDatCommand
|
||||||
|
popa
|
||||||
|
ret
|
||||||
|
|
||||||
|
;*************************************************
|
||||||
|
;* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
|
||||||
|
;* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
|
||||||
|
;* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: *
|
||||||
|
;* ChannelNumber - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; *
|
||||||
|
;* DiskNumber - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. *
|
||||||
|
;*************************************************
|
||||||
|
allow_medium_removal:
|
||||||
|
pusha
|
||||||
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
call clear_packet_buffer
|
||||||
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
mov [PacketCommand],byte 0x1E
|
||||||
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
mov [PacketCommand+4],byte 00b
|
||||||
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
call SendPacketNoDatCommand
|
||||||
|
popa
|
||||||
|
ret
|
||||||
|
|
||||||
;*************************************************
|
;*************************************************
|
||||||
;* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
|
;* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
|
||||||
@@ -546,7 +648,7 @@ LoadMedium:
|
|||||||
;* ChannelNumber - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; *
|
;* ChannelNumber - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; *
|
||||||
;* DiskNumber - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. *
|
;* DiskNumber - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. *
|
||||||
;*************************************************
|
;*************************************************
|
||||||
UnloadMedium:
|
EjectMedium:
|
||||||
pusha
|
pusha
|
||||||
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
call clear_packet_buffer
|
call clear_packet_buffer
|
||||||
|
@@ -21,27 +21,18 @@ write_cache:
|
|||||||
push eax ecx edx esi edi
|
push eax ecx edx esi edi
|
||||||
|
|
||||||
; write difference ( 2 ) from cache to hd
|
; write difference ( 2 ) from cache to hd
|
||||||
|
|
||||||
; mov ecx,cache_max
|
|
||||||
; mov esi,HD_CACHE+8
|
|
||||||
call calculate_cache
|
call calculate_cache
|
||||||
add esi,8
|
add esi,8
|
||||||
|
|
||||||
mov edi,1
|
mov edi,1
|
||||||
|
|
||||||
write_cache_more:
|
write_cache_more:
|
||||||
|
|
||||||
cmp dword [esi+4],2 ; if cache slot is not different
|
cmp dword [esi+4],2 ; if cache slot is not different
|
||||||
jne .write_chain
|
jne .write_chain
|
||||||
|
|
||||||
mov dword [esi+4],1 ; same as in hd
|
mov dword [esi+4],1 ; same as in hd
|
||||||
mov eax,[esi] ; eax = sector to write
|
mov eax,[esi] ; eax = sector to write
|
||||||
|
|
||||||
cmp eax,[PARTITION_START]
|
cmp eax,[PARTITION_START]
|
||||||
jb danger
|
jb danger
|
||||||
cmp eax,[PARTITION_END]
|
cmp eax,[PARTITION_END]
|
||||||
ja danger
|
ja danger
|
||||||
|
|
||||||
; DMA write is permitted only if [allow_dma_access]=1
|
; DMA write is permitted only if [allow_dma_access]=1
|
||||||
cmp [allow_dma_access], 2
|
cmp [allow_dma_access], 2
|
||||||
jae .nodma
|
jae .nodma
|
||||||
@@ -78,10 +69,8 @@ write_cache:
|
|||||||
call cache_write_pio
|
call cache_write_pio
|
||||||
.write_chain:
|
.write_chain:
|
||||||
call flush_cache_chain
|
call flush_cache_chain
|
||||||
|
|
||||||
.continue:
|
.continue:
|
||||||
danger:
|
danger:
|
||||||
|
|
||||||
add esi,8
|
add esi,8
|
||||||
inc edi
|
inc edi
|
||||||
dec ecx
|
dec ecx
|
||||||
@@ -98,8 +87,7 @@ flush_cache_chain:
|
|||||||
mov [cache_chain_started], 0
|
mov [cache_chain_started], 0
|
||||||
@@:
|
@@:
|
||||||
ret
|
ret
|
||||||
|
;--------------------------------------------------------------------
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
find_empty_slot:
|
find_empty_slot:
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
@@ -109,32 +97,14 @@ find_empty_slot:
|
|||||||
; push ecx esi
|
; push ecx esi
|
||||||
|
|
||||||
search_again:
|
search_again:
|
||||||
|
|
||||||
; mov ecx,cache_max*10/100
|
|
||||||
; mov edi,[cache_search_start]
|
|
||||||
call calculate_cache_3
|
call calculate_cache_3
|
||||||
; push eax edx
|
|
||||||
; mov eax,ecx
|
|
||||||
; mov ecx,10
|
|
||||||
; xor edx,edx
|
|
||||||
; div ecx
|
|
||||||
; mov ecx,eax
|
|
||||||
; pop edx eax
|
|
||||||
shr ecx,3
|
shr ecx,3
|
||||||
search_for_empty:
|
search_for_empty:
|
||||||
|
|
||||||
inc edi
|
inc edi
|
||||||
; cmp edi,cache_max
|
|
||||||
; push eax
|
|
||||||
call calculate_cache_4
|
call calculate_cache_4
|
||||||
; cmp edi,eax
|
|
||||||
; pop eax
|
|
||||||
jbe inside_cache
|
jbe inside_cache
|
||||||
mov edi,1
|
mov edi,1
|
||||||
|
|
||||||
inside_cache:
|
inside_cache:
|
||||||
|
|
||||||
; cmp dword [edi*8+HD_CACHE+4],2 ; get cache slot info
|
|
||||||
push esi
|
push esi
|
||||||
call calculate_cache_1
|
call calculate_cache_1
|
||||||
cmp dword [edi*8+esi+4],2
|
cmp dword [edi*8+esi+4],2
|
||||||
@@ -142,34 +112,20 @@ find_empty_slot:
|
|||||||
jb found_slot ; it's empty or read
|
jb found_slot ; it's empty or read
|
||||||
dec ecx
|
dec ecx
|
||||||
jnz search_for_empty
|
jnz search_for_empty
|
||||||
|
|
||||||
call write_cache ; no empty slots found, write all
|
call write_cache ; no empty slots found, write all
|
||||||
cmp [hd_error],0
|
cmp [hd_error],0
|
||||||
jne found_slot_access_denied
|
jne found_slot_access_denied
|
||||||
|
|
||||||
jmp search_again ; and start again
|
jmp search_again ; and start again
|
||||||
|
|
||||||
found_slot:
|
found_slot:
|
||||||
|
|
||||||
; mov [cache_search_start],edi
|
|
||||||
call calculate_cache_5
|
call calculate_cache_5
|
||||||
found_slot_access_denied:
|
found_slot_access_denied:
|
||||||
ret
|
ret
|
||||||
|
;--------------------------------------------------------------------
|
||||||
align 4
|
align 4
|
||||||
clear_hd_cache:
|
clear_hd_cache:
|
||||||
; push eax ecx edi
|
|
||||||
; mov edi, HD_CACHE
|
|
||||||
; mov ecx,16384
|
|
||||||
; xor eax,eax
|
|
||||||
; cld
|
|
||||||
; rep stosd ; clear hd cache with 0
|
|
||||||
; mov [cache_search_start],eax
|
|
||||||
mov [fat_in_cache],-1
|
mov [fat_in_cache],-1
|
||||||
mov [fat_change],0
|
mov [fat_change],0
|
||||||
; pop edi ecx eax
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;--------------------------------------------------------------------
|
;--------------------------------------------------------------------
|
||||||
align 4
|
align 4
|
||||||
calculate_cache:
|
calculate_cache:
|
||||||
@@ -448,10 +404,352 @@ calculate_cache_5:
|
|||||||
.ide3_appl_data:
|
.ide3_appl_data:
|
||||||
mov [cache_ide3_appl_search_start],edi
|
mov [cache_ide3_appl_search_start],edi
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;--------------------------------------------------------------------
|
;--------------------------------------------------------------------
|
||||||
align 4
|
align 4
|
||||||
calculate_linear_to_real:
|
find_empty_slot_CD_cache:
|
||||||
shr eax, 12
|
;-----------------------------------------------------------
|
||||||
mov eax, [page_tabs+eax*4]
|
; find empty or read slot, flush cache if next 10% is used by write
|
||||||
and eax, 0xFFFFF000
|
; output : edi = cache slot
|
||||||
|
;-----------------------------------------------------------
|
||||||
|
.search_again:
|
||||||
|
call cd_calculate_cache_3
|
||||||
|
.search_for_empty:
|
||||||
|
inc edi
|
||||||
|
call cd_calculate_cache_4
|
||||||
|
jbe .inside_cache
|
||||||
|
mov edi,1
|
||||||
|
.inside_cache:
|
||||||
|
call cd_calculate_cache_5
|
||||||
ret
|
ret
|
||||||
|
;--------------------------------------------------------------------
|
||||||
|
clear_CD_cache:
|
||||||
|
pusha
|
||||||
|
.ide0:
|
||||||
|
xor eax,eax
|
||||||
|
cmp [cdpos],1
|
||||||
|
jne .ide1
|
||||||
|
mov [cache_ide0_search_start],eax
|
||||||
|
mov ecx,[cache_ide0_system_sad_size]
|
||||||
|
mov edi,[cache_ide0_pointer]
|
||||||
|
call .clear
|
||||||
|
mov [cache_ide0_appl_search_start],eax
|
||||||
|
mov ecx,[cache_ide0_appl_sad_size]
|
||||||
|
mov edi,[cache_ide0_data_pointer]
|
||||||
|
jmp .continue
|
||||||
|
.ide1:
|
||||||
|
cmp [cdpos],2
|
||||||
|
jne .ide2
|
||||||
|
mov [cache_ide1_search_start],eax
|
||||||
|
mov ecx,[cache_ide1_system_sad_size]
|
||||||
|
mov edi,[cache_ide1_pointer]
|
||||||
|
call .clear
|
||||||
|
mov [cache_ide1_appl_search_start],eax
|
||||||
|
mov ecx,[cache_ide1_appl_sad_size]
|
||||||
|
mov edi,[cache_ide1_data_pointer]
|
||||||
|
jmp .continue
|
||||||
|
.ide2:
|
||||||
|
cmp [cdpos],3
|
||||||
|
jne .ide3
|
||||||
|
mov [cache_ide2_search_start],eax
|
||||||
|
mov ecx,[cache_ide2_system_sad_size]
|
||||||
|
mov edi,[cache_ide2_pointer]
|
||||||
|
call .clear
|
||||||
|
mov [cache_ide2_appl_search_start],eax
|
||||||
|
mov ecx,[cache_ide2_appl_sad_size]
|
||||||
|
mov edi,[cache_ide2_data_pointer]
|
||||||
|
jmp .continue
|
||||||
|
.ide3:
|
||||||
|
mov [cache_ide3_search_start],eax
|
||||||
|
mov ecx,[cache_ide3_system_sad_size]
|
||||||
|
mov edi,[cache_ide3_pointer]
|
||||||
|
call .clear
|
||||||
|
mov [cache_ide3_appl_search_start],eax
|
||||||
|
mov ecx,[cache_ide3_appl_sad_size]
|
||||||
|
mov edi,[cache_ide3_data_pointer]
|
||||||
|
.continue:
|
||||||
|
call .clear
|
||||||
|
popa
|
||||||
|
ret
|
||||||
|
.clear:
|
||||||
|
shl ecx,1
|
||||||
|
cld
|
||||||
|
rep stosd
|
||||||
|
ret
|
||||||
|
;--------------------------------------------------------------------
|
||||||
|
align 4
|
||||||
|
cd_calculate_cache:
|
||||||
|
; mov ecx,cache_max ; entries in cache
|
||||||
|
; mov esi,HD_CACHE+8
|
||||||
|
|
||||||
|
; 1 - IDE0 ... 4 - IDE3
|
||||||
|
.ide0:
|
||||||
|
cmp [cdpos],1
|
||||||
|
jne .ide1
|
||||||
|
cmp [cd_appl_data],0
|
||||||
|
jne .ide0_appl_data
|
||||||
|
mov ecx,[cache_ide0_system_sad_size]
|
||||||
|
mov esi,[cache_ide0_pointer]
|
||||||
|
ret
|
||||||
|
.ide0_appl_data:
|
||||||
|
mov ecx,[cache_ide0_appl_sad_size]
|
||||||
|
mov esi,[cache_ide0_data_pointer]
|
||||||
|
ret
|
||||||
|
.ide1:
|
||||||
|
cmp [cdpos],2
|
||||||
|
jne .ide2
|
||||||
|
cmp [cd_appl_data],0
|
||||||
|
jne .ide1_appl_data
|
||||||
|
mov ecx,[cache_ide1_system_sad_size]
|
||||||
|
mov esi,[cache_ide1_pointer]
|
||||||
|
ret
|
||||||
|
.ide1_appl_data:
|
||||||
|
mov ecx,[cache_ide1_appl_sad_size]
|
||||||
|
mov esi,[cache_ide1_data_pointer]
|
||||||
|
ret
|
||||||
|
.ide2:
|
||||||
|
cmp [cdpos],3
|
||||||
|
jne .ide3
|
||||||
|
cmp [cd_appl_data],0
|
||||||
|
jne .ide2_appl_data
|
||||||
|
mov ecx,[cache_ide2_system_sad_size]
|
||||||
|
mov esi,[cache_ide2_pointer]
|
||||||
|
ret
|
||||||
|
.ide2_appl_data:
|
||||||
|
mov ecx,[cache_ide2_appl_sad_size]
|
||||||
|
mov esi,[cache_ide2_data_pointer]
|
||||||
|
ret
|
||||||
|
.ide3:
|
||||||
|
cmp [cd_appl_data],0
|
||||||
|
jne .ide3_appl_data
|
||||||
|
mov ecx,[cache_ide3_system_sad_size]
|
||||||
|
mov esi,[cache_ide3_pointer]
|
||||||
|
ret
|
||||||
|
.ide3_appl_data:
|
||||||
|
mov ecx,[cache_ide3_appl_sad_size]
|
||||||
|
mov esi,[cache_ide3_data_pointer]
|
||||||
|
ret
|
||||||
|
;--------------------------------------------------------------------
|
||||||
|
align 4
|
||||||
|
cd_calculate_cache_1:
|
||||||
|
; lea esi,[edi*8+HD_CACHE]
|
||||||
|
; 1 - IDE0 ... 4 - IDE3
|
||||||
|
.ide0:
|
||||||
|
cmp [cdpos],1
|
||||||
|
jne .ide1
|
||||||
|
cmp [cd_appl_data],0
|
||||||
|
jne .ide0_appl_data
|
||||||
|
mov esi,[cache_ide0_pointer]
|
||||||
|
ret
|
||||||
|
.ide0_appl_data:
|
||||||
|
mov esi,[cache_ide0_data_pointer]
|
||||||
|
ret
|
||||||
|
.ide1:
|
||||||
|
cmp [cdpos],2
|
||||||
|
jne .ide2
|
||||||
|
cmp [cd_appl_data],0
|
||||||
|
jne .ide1_appl_data
|
||||||
|
mov esi,[cache_ide1_pointer]
|
||||||
|
ret
|
||||||
|
.ide1_appl_data:
|
||||||
|
mov esi,[cache_ide1_data_pointer]
|
||||||
|
ret
|
||||||
|
.ide2:
|
||||||
|
cmp [cdpos],3
|
||||||
|
jne .ide3
|
||||||
|
cmp [cd_appl_data],0
|
||||||
|
jne .ide2_appl_data
|
||||||
|
mov esi,[cache_ide2_pointer]
|
||||||
|
ret
|
||||||
|
.ide2_appl_data:
|
||||||
|
mov esi,[cache_ide2_data_pointer]
|
||||||
|
ret
|
||||||
|
.ide3:
|
||||||
|
cmp [cd_appl_data],0
|
||||||
|
jne .ide3_appl_data
|
||||||
|
mov esi,[cache_ide3_pointer]
|
||||||
|
ret
|
||||||
|
.ide3_appl_data:
|
||||||
|
mov esi,[cache_ide3_data_pointer]
|
||||||
|
ret
|
||||||
|
;--------------------------------------------------------------------
|
||||||
|
align 4
|
||||||
|
cd_calculate_cache_2:
|
||||||
|
; add esi,HD_CACHE+65536
|
||||||
|
; 1 - IDE0 ... 4 - IDE3
|
||||||
|
.ide0:
|
||||||
|
cmp [cdpos],1
|
||||||
|
jne .ide1
|
||||||
|
cmp [cd_appl_data],0
|
||||||
|
jne .ide0_appl_data
|
||||||
|
mov eax,[cache_ide0_system_data]
|
||||||
|
ret
|
||||||
|
.ide0_appl_data:
|
||||||
|
mov eax,[cache_ide0_appl_data]
|
||||||
|
ret
|
||||||
|
.ide1:
|
||||||
|
cmp [cdpos],2
|
||||||
|
jne .ide2
|
||||||
|
cmp [cd_appl_data],0
|
||||||
|
jne .ide1_appl_data
|
||||||
|
mov eax,[cache_ide1_system_data]
|
||||||
|
ret
|
||||||
|
.ide1_appl_data:
|
||||||
|
mov eax,[cache_ide1_appl_data]
|
||||||
|
ret
|
||||||
|
.ide2:
|
||||||
|
cmp [cdpos],3
|
||||||
|
jne .ide3
|
||||||
|
cmp [cd_appl_data],0
|
||||||
|
jne .ide2_appl_data
|
||||||
|
mov eax,[cache_ide2_system_data]
|
||||||
|
ret
|
||||||
|
.ide2_appl_data:
|
||||||
|
mov eax,[cache_ide2_appl_data]
|
||||||
|
ret
|
||||||
|
.ide3:
|
||||||
|
cmp [cd_appl_data],0
|
||||||
|
jne .ide3_appl_data
|
||||||
|
mov eax,[cache_ide3_system_data]
|
||||||
|
ret
|
||||||
|
.ide3_appl_data:
|
||||||
|
mov eax,[cache_ide3_appl_data]
|
||||||
|
ret
|
||||||
|
;--------------------------------------------------------------------
|
||||||
|
align 4
|
||||||
|
cd_calculate_cache_3:
|
||||||
|
; mov ecx,cache_max*10/100
|
||||||
|
; mov edi,[cache_search_start]
|
||||||
|
|
||||||
|
; 1 - IDE0 ... 4 - IDE3
|
||||||
|
.ide0:
|
||||||
|
cmp [cdpos],1
|
||||||
|
jne .ide1
|
||||||
|
cmp [cd_appl_data],0
|
||||||
|
jne .ide0_appl_data
|
||||||
|
mov edi,[cache_ide0_search_start]
|
||||||
|
ret
|
||||||
|
.ide0_appl_data:
|
||||||
|
mov edi,[cache_ide0_appl_search_start]
|
||||||
|
ret
|
||||||
|
.ide1:
|
||||||
|
cmp [cdpos],2
|
||||||
|
jne .ide2
|
||||||
|
cmp [cd_appl_data],0
|
||||||
|
jne .ide1_appl_data
|
||||||
|
mov edi,[cache_ide1_search_start]
|
||||||
|
ret
|
||||||
|
.ide1_appl_data:
|
||||||
|
mov edi,[cache_ide1_appl_search_start]
|
||||||
|
ret
|
||||||
|
.ide2:
|
||||||
|
cmp [cdpos],3
|
||||||
|
jne .ide3
|
||||||
|
cmp [cd_appl_data],0
|
||||||
|
jne .ide2_appl_data
|
||||||
|
mov edi,[cache_ide2_search_start]
|
||||||
|
ret
|
||||||
|
.ide2_appl_data:
|
||||||
|
mov edi,[cache_ide2_appl_search_start]
|
||||||
|
ret
|
||||||
|
.ide3:
|
||||||
|
cmp [cd_appl_data],0
|
||||||
|
jne .ide3_appl_data
|
||||||
|
mov edi,[cache_ide3_search_start]
|
||||||
|
ret
|
||||||
|
.ide3_appl_data:
|
||||||
|
mov edi,[cache_ide3_appl_search_start]
|
||||||
|
ret
|
||||||
|
;--------------------------------------------------------------------
|
||||||
|
align 4
|
||||||
|
cd_calculate_cache_4:
|
||||||
|
; cmp edi,cache_max
|
||||||
|
; 1 - IDE0 ... 4 - IDE3
|
||||||
|
.ide0:
|
||||||
|
cmp [cdpos],1
|
||||||
|
jne .ide1
|
||||||
|
cmp [cd_appl_data],0
|
||||||
|
jne .ide0_appl_data
|
||||||
|
cmp edi,[cache_ide0_system_sad_size]
|
||||||
|
ret
|
||||||
|
.ide0_appl_data:
|
||||||
|
cmp edi,[cache_ide0_appl_sad_size]
|
||||||
|
ret
|
||||||
|
.ide1:
|
||||||
|
cmp [cdpos],2
|
||||||
|
jne .ide2
|
||||||
|
cmp [cd_appl_data],0
|
||||||
|
jne .ide1_appl_data
|
||||||
|
cmp edi,[cache_ide1_system_sad_size]
|
||||||
|
ret
|
||||||
|
.ide1_appl_data:
|
||||||
|
cmp edi,[cache_ide1_appl_sad_size]
|
||||||
|
ret
|
||||||
|
.ide2:
|
||||||
|
cmp [cdpos],3
|
||||||
|
jne .ide3
|
||||||
|
cmp [cd_appl_data],0
|
||||||
|
jne .ide2_appl_data
|
||||||
|
cmp edi,[cache_ide2_system_sad_size]
|
||||||
|
ret
|
||||||
|
.ide2_appl_data:
|
||||||
|
cmp edi,[cache_ide2_appl_sad_size]
|
||||||
|
ret
|
||||||
|
.ide3:
|
||||||
|
cmp [cd_appl_data],0
|
||||||
|
jne .ide3_appl_data
|
||||||
|
cmp edi,[cache_ide3_system_sad_size]
|
||||||
|
ret
|
||||||
|
.ide3_appl_data:
|
||||||
|
cmp edi,[cache_ide3_appl_sad_size]
|
||||||
|
ret
|
||||||
|
;--------------------------------------------------------------------
|
||||||
|
align 4
|
||||||
|
cd_calculate_cache_5:
|
||||||
|
; mov [cache_search_start],edi
|
||||||
|
; 1 - IDE0 ... 4 - IDE3
|
||||||
|
.ide0:
|
||||||
|
cmp [cdpos],1
|
||||||
|
jne .ide1
|
||||||
|
cmp [cd_appl_data],0
|
||||||
|
jne .ide0_appl_data
|
||||||
|
mov [cache_ide0_search_start],edi
|
||||||
|
ret
|
||||||
|
.ide0_appl_data:
|
||||||
|
mov [cache_ide0_appl_search_start],edi
|
||||||
|
ret
|
||||||
|
.ide1:
|
||||||
|
cmp [cdpos],2
|
||||||
|
jne .ide2
|
||||||
|
cmp [cd_appl_data],0
|
||||||
|
jne .ide1_appl_data
|
||||||
|
mov [cache_ide1_search_start],edi
|
||||||
|
ret
|
||||||
|
.ide1_appl_data:
|
||||||
|
mov [cache_ide1_appl_search_start],edi
|
||||||
|
ret
|
||||||
|
.ide2:
|
||||||
|
cmp [cdpos],3
|
||||||
|
jne .ide3
|
||||||
|
cmp [cd_appl_data],0
|
||||||
|
jne .ide2_appl_data
|
||||||
|
mov [cache_ide2_search_start],edi
|
||||||
|
ret
|
||||||
|
.ide2_appl_data:
|
||||||
|
mov [cache_ide2_appl_search_start],edi
|
||||||
|
ret
|
||||||
|
.ide3:
|
||||||
|
cmp [cd_appl_data],0
|
||||||
|
jne .ide3_appl_data
|
||||||
|
mov [cache_ide3_search_start],edi
|
||||||
|
ret
|
||||||
|
.ide3_appl_data:
|
||||||
|
mov [cache_ide3_appl_search_start],edi
|
||||||
|
ret
|
||||||
|
;--------------------------------------------------------------------
|
||||||
|
;align 4
|
||||||
|
;calculate_linear_to_real:
|
||||||
|
; shr eax, 12
|
||||||
|
; mov eax, [page_tabs+eax*4]
|
||||||
|
; and eax, 0xFFFFF000
|
||||||
|
; ret
|
||||||
|
@@ -306,6 +306,7 @@ hdbase rd 1 ; for boot 0x1f0
|
|||||||
hdid rd 1
|
hdid rd 1
|
||||||
hdpos rd 1 ; for boot 0x1
|
hdpos rd 1 ; for boot 0x1
|
||||||
fat32part rd 1 ; for boot 0x1
|
fat32part rd 1 ; for boot 0x1
|
||||||
|
cdpos rd 1
|
||||||
|
|
||||||
sb16 rd 1
|
sb16 rd 1
|
||||||
|
|
||||||
@@ -387,6 +388,7 @@ cache_ide3_appl_search_start rd 1
|
|||||||
|
|
||||||
debug_step_pointer rd 1
|
debug_step_pointer rd 1
|
||||||
hdd_appl_data rb 1 ; 0 = system cache, 1 - application cache
|
hdd_appl_data rb 1 ; 0 = system cache, 1 - application cache
|
||||||
|
cd_appl_data rb 1 ; 0 = system cache, 1 - application cache
|
||||||
|
|
||||||
lba_read_enabled rd 1 ; 0 = disabled , 1 = enabled
|
lba_read_enabled rd 1 ; 0 = disabled , 1 = enabled
|
||||||
pci_access_enabled rd 1 ; 0 = disabled , 1 = enabled
|
pci_access_enabled rd 1 ; 0 = disabled , 1 = enabled
|
||||||
|
@@ -44,6 +44,7 @@
|
|||||||
mov [cache_ide3_search_start],eax
|
mov [cache_ide3_search_start],eax
|
||||||
mov [cache_ide3_appl_search_start],eax
|
mov [cache_ide3_appl_search_start],eax
|
||||||
mov [hdd_appl_data],1 ;al
|
mov [hdd_appl_data],1 ;al
|
||||||
|
mov [cd_appl_data],1
|
||||||
|
|
||||||
mov cl,[DRIVE_DATA+1]
|
mov cl,[DRIVE_DATA+1]
|
||||||
mov ch,cl
|
mov ch,cl
|
||||||
|
@@ -4114,6 +4114,10 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
<EFBFBD><EFBFBD><EFBFBD> CD-<2D>ਢ<EFBFBD><E0A8A2><EFBFBD><EFBFBD> <20> <20><>裡 <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>묨 <20><>࠭<EFBFBD>祭<EFBFBD>ﬨ <20><><EFBFBD><EFBFBD>㯭<EFBFBD>
|
<EFBFBD><EFBFBD><EFBFBD> CD-<2D>ਢ<EFBFBD><E0A8A2><EFBFBD><EFBFBD> <20> <20><>裡 <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>묨 <20><>࠭<EFBFBD>祭<EFBFBD>ﬨ <20><><EFBFBD><EFBFBD>㯭<EFBFBD>
|
||||||
⮫쪮 <20><><EFBFBD><EFBFBD>㭪樨 0,1,5 <20> 7, <20>맮<EFBFBD> <20><>㣨<EFBFBD> <20><><EFBFBD><EFBFBD>㭪権 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
⮫쪮 <20><><EFBFBD><EFBFBD>㭪樨 0,1,5 <20> 7, <20>맮<EFBFBD> <20><>㣨<EFBFBD> <20><><EFBFBD><EFBFBD>㭪権 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
<EFBFBD>訡<EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> 2.
|
<EFBFBD>訡<EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> 2.
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD> <20><>ࢮ<EFBFBD> <20><><EFBFBD><EFBFBD>饭<EFBFBD><E9A5AD> <20><><EFBFBD><EFBFBD>㭪権 0,1,5,7 <20> <20><><EFBFBD>ன<EFBFBD>⢠<EFBFBD> ATAPI (CD <20> DVD)
|
||||||
|
<EFBFBD>ந<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0AEA2> <20><>筮<EFBFBD><E7ADAE> <20><>ࠢ<EFBFBD><E0A0A2><EFBFBD><EFBFBD><EFBFBD> <20><>堭<EFBFBD><E5A0AD><EFBFBD><EFBFBD><EFBFBD> <20><>⪠. <20><><EFBFBD> <20><>易<EFBFBD><EFA7A0>
|
||||||
|
<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⬮<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEA2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>祭<EFBFBD><E7A5AD><EFBFBD> <20><> <20>ਢ<EFBFBD><E0A8A2><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0AEA2>
|
||||||
|
<EFBFBD>ந<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>饭<EFBFBD><E9A5AD><EFBFBD> <20><><EFBFBD><EFBFBD>㭪樥<E3ADAA> 10 <20> ᮮ⢥<E1AEAE><E2A2A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>饬<EFBFBD> <20><><EFBFBD>ன<EFBFBD><E0AEA9><EFBFBD><EFBFBD>.
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
= <20>㭪<EFBFBD><E3ADAA><EFBFBD> 70, <20><><EFBFBD><EFBFBD>㭪<EFBFBD><E3ADAA><EFBFBD> 0 - <20>⥭<EFBFBD><E2A5AD> 䠩<><E4A0A9> <20> <20><><EFBFBD><EFBFBD><EFBFBD>প<EFBFBD><E0A6AA> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. =
|
= <20>㭪<EFBFBD><E3ADAA><EFBFBD> 70, <20><><EFBFBD><EFBFBD>㭪<EFBFBD><E3ADAA><EFBFBD> 0 - <20>⥭<EFBFBD><E2A5AD> 䠩<><E4A0A9> <20> <20><><EFBFBD><EFBFBD><EFBFBD>প<EFBFBD><E0A6AA> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. =
|
||||||
@@ -4473,6 +4477,66 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
* <20><><EFBFBD><EFBFBD>⥫<EFBFBD>᪠<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 㦥 <20><><EFBFBD><EFBFBD><EFBFBD>⢮<EFBFBD><E2A2AE><EFBFBD><EFBFBD>.
|
* <20><><EFBFBD><EFBFBD>⥫<EFBFBD>᪠<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 㦥 <20><><EFBFBD><EFBFBD><EFBFBD>⢮<EFBFBD><E2A2AE><EFBFBD><EFBFBD>.
|
||||||
* <20> <20><><EFBFBD><EFBFBD><EFBFBD> 㦥 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>㭪<EFBFBD><E3ADAA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ᯥ譮 (eax=0).
|
* <20> <20><><EFBFBD><EFBFBD><EFBFBD> 㦥 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>㭪<EFBFBD><E3ADAA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ᯥ譮 (eax=0).
|
||||||
|
|
||||||
|
======================================================================
|
||||||
|
========== <20>㭪<EFBFBD><E3ADAA><EFBFBD> 70, <20><><EFBFBD><EFBFBD>㭪<EFBFBD><E3ADAA><EFBFBD> 10 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>⮪ <20>ਢ<EFBFBD><E0A8A2><EFBFBD> <20><>᪠. ============
|
||||||
|
======================================================================
|
||||||
|
<EFBFBD><EFBFBD>ࠬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
||||||
|
* eax = 70 - <20><><EFBFBD><EFBFBD><EFBFBD> <20>㭪樨
|
||||||
|
* ebx = 㪠<><E3AAA0>⥫<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>ଠ樮<E0ACA0><E6A8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
<EFBFBD><EFBFBD>ଠ<EFBFBD> <20><><EFBFBD><EFBFBD>ଠ樮<E0ACA0><E6A8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
||||||
|
* +0: dword: 10 = <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>㭪樨
|
||||||
|
* +4: dword: 0 (<28><>१<EFBFBD>ࢨ<E0A2A8><E0AEA2><EFBFBD>)
|
||||||
|
* +8: dword: 0 (<28><>१<EFBFBD>ࢨ<E0A2A8><E0AEA2><EFBFBD>)
|
||||||
|
* +12 = +0xC: dword: 0 (<28><>१<EFBFBD>ࢨ<E0A2A8><E0AEA2><EFBFBD>)
|
||||||
|
* +16 = +0x10: dword: 0 (<28><>१<EFBFBD>ࢨ<E0A2A8><E0AEA2><EFBFBD>)
|
||||||
|
* +20 = +0x14: ASCIIZ-<2D><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20>ࠢ<EFBFBD><E0A0A2><EFBFBD> <20><>ନ<E0ACA8><E0AEA2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 㪠<><E3AAA0><EFBFBD><EFBFBD> <20>
|
||||||
|
<20><>饬 <20><><EFBFBD>ᠭ<EFBFBD><E1A0AD>
|
||||||
|
<20><><EFBFBD>
|
||||||
|
* +20 = +0x14: db 0
|
||||||
|
* +21 = +0x15: dd 㪠<><E3AAA0>⥫<EFBFBD> <20><> ASCIIZ-<2D><>ப<EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>頥<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>祭<EFBFBD><E7A5AD>:
|
||||||
|
* <20><>祣<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>頥<EFBFBD><E9A0A5><EFBFBD>.
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>砭<EFBFBD><EFBFBD>:
|
||||||
|
* <20>㭪<EFBFBD><E3ADAA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ন<EFBFBD><E0A6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⮫쪮 <20><><EFBFBD> ATAPI <20><><EFBFBD>ன<EFBFBD><E0AEA9><EFBFBD> (CD <20> DVD).
|
||||||
|
* <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>祭<EFBFBD><E7A5AD> <20><>⪠ <20>ந<EFBFBD><E0AEA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ࠧ<><E0A0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0AEA2> <20><>筮<EFBFBD><E7ADAE> <20><>ࠢ<EFBFBD><E0A0A2><EFBFBD><EFBFBD><EFBFBD> <20><>堭<EFBFBD><E5A0AD><EFBFBD><EFBFBD><EFBFBD> <20><>⪠.
|
||||||
|
* <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>祭<EFBFBD><E7A5AD> <20><>⪠ <20><><EFBFBD> <20>ந<EFBFBD><E0AEA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ᮮ⢥<E1AEAE><E2A2A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>饣<EFBFBD> <20><><EFBFBD>ன<EFBFBD>⢠.
|
||||||
|
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20>⠭<EFBFBD><E2A0AD><EFBFBD>⭮<EFBFBD> <20><><EFBFBD> 70 <20>㭪樨 <20><><EFBFBD><EFBFBD>. <20><><EFBFBD> ࠡ<><E0A0A1><EFBFBD>ᯮᮡ<E1AFAE><E1AEA1><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
<20><>࠭<EFBFBD><E0A0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ﬨ <20><><EFBFBD><EFBFBD>:
|
||||||
|
db '/cd0/1/',0
|
||||||
|
db '/cd1/1/',0
|
||||||
|
db '/cd2/1/',0
|
||||||
|
db '/cd3/1/',0
|
||||||
|
* <20>ਬ<EFBFBD> <20>ᯮ<EFBFBD>짮<EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD> <20>㭪樨 <><EFA2AB><EFBFBD><EFBFBD><EFBFBD> <20>ਫ<EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CD_tray.
|
||||||
|
|
||||||
|
======================================================================
|
||||||
|
========== <20>㭪<EFBFBD><E3ADAA><EFBFBD> 70, <20><><EFBFBD><EFBFBD>㭪<EFBFBD><E3ADAA><EFBFBD> 11 - <20><><EFBFBD><EFBFBD>㧨<EFBFBD><E3A7A8> <20><>⮪ <20>ਢ<EFBFBD><E0A8A2><EFBFBD> <20><>᪠. ===========
|
||||||
|
======================================================================
|
||||||
|
<EFBFBD><EFBFBD>ࠬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
||||||
|
* eax = 70 - <20><><EFBFBD><EFBFBD><EFBFBD> <20>㭪樨
|
||||||
|
* ebx = 㪠<><E3AAA0>⥫<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>ଠ樮<E0ACA0><E6A8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
<EFBFBD><EFBFBD>ଠ<EFBFBD> <20><><EFBFBD><EFBFBD>ଠ樮<E0ACA0><E6A8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
||||||
|
* +0: dword: 11 = <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>㭪樨
|
||||||
|
* +4: dword: 0 (<28><>१<EFBFBD>ࢨ<E0A2A8><E0AEA2><EFBFBD>)
|
||||||
|
* +8: dword: 0 (<28><>१<EFBFBD>ࢨ<E0A2A8><E0AEA2><EFBFBD>)
|
||||||
|
* +12 = +0xC: dword: 0 (<28><>१<EFBFBD>ࢨ<E0A2A8><E0AEA2><EFBFBD>)
|
||||||
|
* +16 = +0x10: dword: 0 (<28><>१<EFBFBD>ࢨ<E0A2A8><E0AEA2><EFBFBD>)
|
||||||
|
* +20 = +0x14: ASCIIZ-<2D><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20>ࠢ<EFBFBD><E0A0A2><EFBFBD> <20><>ନ<E0ACA8><E0AEA2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 㪠<><E3AAA0><EFBFBD><EFBFBD> <20>
|
||||||
|
<20><>饬 <20><><EFBFBD>ᠭ<EFBFBD><E1A0AD>
|
||||||
|
<20><><EFBFBD>
|
||||||
|
* +20 = +0x14: db 0
|
||||||
|
* +21 = +0x15: dd 㪠<><E3AAA0>⥫<EFBFBD> <20><> ASCIIZ-<2D><>ப<EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>頥<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>祭<EFBFBD><E7A5AD>:
|
||||||
|
* <20><>祣<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>頥<EFBFBD><E9A0A5><EFBFBD>.
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>砭<EFBFBD><EFBFBD>:
|
||||||
|
* <20>㭪<EFBFBD><E3ADAA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ন<EFBFBD><E0A6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⮫쪮 <20><><EFBFBD> ATAPI <20><><EFBFBD>ன<EFBFBD><E0AEA9><EFBFBD> (CD <20> DVD)
|
||||||
|
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20>⠭<EFBFBD><E2A0AD><EFBFBD>⭮<EFBFBD> <20><><EFBFBD> 70 <20>㭪樨 <20><><EFBFBD><EFBFBD>. <20><><EFBFBD> ࠡ<><E0A0A1><EFBFBD>ᯮᮡ<E1AFAE><E1AEA1><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
<20><>࠭<EFBFBD><E0A0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ﬨ <20><><EFBFBD><EFBFBD>:
|
||||||
|
db '/cd0/1/',0
|
||||||
|
db '/cd1/1/',0
|
||||||
|
db '/cd2/1/',0
|
||||||
|
db '/cd3/1/',0
|
||||||
|
* <20>ਬ<EFBFBD> <20>ᯮ<EFBFBD>짮<EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD> <20>㭪樨 <><EFA2AB><EFBFBD><EFBFBD><EFBFBD> <20>ਫ<EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CD_tray.
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
=== <20>㭪<EFBFBD><E3ADAA><EFBFBD> 71, <20><><EFBFBD><EFBFBD>㭪<EFBFBD><E3ADAA><EFBFBD> 1 - <20><>⠭<EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC>. ==
|
=== <20>㭪<EFBFBD><E3ADAA><EFBFBD> 71, <20><><EFBFBD><EFBFBD>㭪<EFBFBD><E3ADAA><EFBFBD> 1 - <20><>⠭<EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC>. ==
|
||||||
======================================================================
|
======================================================================
|
||||||
|
@@ -4075,6 +4075,10 @@ Available subfunctions:
|
|||||||
For CD-drives due to hardware limitations only subfunctions
|
For CD-drives due to hardware limitations only subfunctions
|
||||||
0,1,5 and 7 are available, other subfunctions return error
|
0,1,5 and 7 are available, other subfunctions return error
|
||||||
with code 2.
|
with code 2.
|
||||||
|
At the first call subfunctions 0,1,5,7 to devices ATAPI (CD and DVD) the locking
|
||||||
|
of handle mechanism of a tray is made. It is connected to algorithm of caching
|
||||||
|
given obtained from a drive. Deblocking is made by call subfunction 10
|
||||||
|
to the appropriate device.
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
=== Function 70, subfunction 0 - read file with long names support. ==
|
=== Function 70, subfunction 0 - read file with long names support. ==
|
||||||
@@ -4429,6 +4433,64 @@ Remarks:
|
|||||||
* The parent folder must already exist.
|
* The parent folder must already exist.
|
||||||
* If target folder already exists, function returns success (eax=0).
|
* If target folder already exists, function returns success (eax=0).
|
||||||
|
|
||||||
|
======================================================================
|
||||||
|
================ Function 70, subfunction 10 - eject tray of disk drive. ==============
|
||||||
|
======================================================================
|
||||||
|
Parameters:
|
||||||
|
* eax = 70 - function number
|
||||||
|
* ebx = pointer to the information structure
|
||||||
|
Format of the information structure:
|
||||||
|
* +0: dword: 10 = subfunction number
|
||||||
|
* +4: dword: 0 (reserved)
|
||||||
|
* +8: dword: 0 (reserved)
|
||||||
|
* +12 = +0xC: dword: 0 (reserved)
|
||||||
|
* +16 = +0x10: dword: 0 (reserved)
|
||||||
|
* +20 = +0x14: ASCIIZ-name of folder, the rules of names forming are
|
||||||
|
given in the general description
|
||||||
|
or
|
||||||
|
* +20 = +0x14: db 0
|
||||||
|
* +21 = +0x15: dd pointer to ASCIIZ-string with folder name
|
||||||
|
Returned value:
|
||||||
|
* Nothing comes back.
|
||||||
|
Remarks:
|
||||||
|
* The function is supported only for ATAPI devices (CD and DVD).
|
||||||
|
* At extract of a tray is made deblocking of handle mechanism of a tray.
|
||||||
|
* At extract of a tray the code makes clearing the cache of the appropriate device.
|
||||||
|
* The path is standard for 70 functions. For serviceability it is possible to be limited to paths:
|
||||||
|
db '/cd0/1/',0
|
||||||
|
db '/cd1/1/',0
|
||||||
|
db '/cd2/1/',0
|
||||||
|
db '/cd3/1/',0
|
||||||
|
* An example of usage of the function is the application CD_tray.
|
||||||
|
|
||||||
|
======================================================================
|
||||||
|
============== Function 70, subfunction 11 - load tray of disk drive. =================
|
||||||
|
======================================================================
|
||||||
|
Parameters:
|
||||||
|
* eax = 70 - function number
|
||||||
|
* ebx = pointer to the information structure
|
||||||
|
Format of the information structure:
|
||||||
|
* +0: dword: 11 = subfunction number
|
||||||
|
* +4: dword: 0 (reserved)
|
||||||
|
* +8: dword: 0 (reserved)
|
||||||
|
* +12 = +0xC: dword: 0 (reserved)
|
||||||
|
* +16 = +0x10: dword: 0 (reserved)
|
||||||
|
* +20 = +0x14: ASCIIZ-name of folder, the rules of names forming are
|
||||||
|
given in the general description
|
||||||
|
or
|
||||||
|
* +20 = +0x14: db 0
|
||||||
|
* +21 = +0x15: dd pointer to ASCIIZ-string with folder name
|
||||||
|
Returned value:
|
||||||
|
* Nothing comes back.
|
||||||
|
Remarks:
|
||||||
|
* The function is supported only for ATAPI devices (CD and DVD).
|
||||||
|
* The path is standard for 70 functions. For serviceability it is possible to be limited to paths:
|
||||||
|
db '/cd0/1/',0
|
||||||
|
db '/cd1/1/',0
|
||||||
|
db '/cd2/1/',0
|
||||||
|
db '/cd3/1/',0
|
||||||
|
* An example of usage of the function is the application CD_tray.
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
========== Function 71, subfunction 1 - set window caption. ==========
|
========== Function 71, subfunction 1 - set window caption. ==========
|
||||||
======================================================================
|
======================================================================
|
||||||
|
@@ -388,6 +388,8 @@ fs_RamdiskServices:
|
|||||||
dd 0
|
dd 0
|
||||||
dd fs_RamdiskDelete
|
dd fs_RamdiskDelete
|
||||||
dd fs_RamdiskCreateFolder
|
dd fs_RamdiskCreateFolder
|
||||||
|
dd fs_NotImplemented
|
||||||
|
dd fs_NotImplemented
|
||||||
fs_NumRamdiskServices = ($ - fs_RamdiskServices)/4
|
fs_NumRamdiskServices = ($ - fs_RamdiskServices)/4
|
||||||
|
|
||||||
fs_OnFloppy:
|
fs_OnFloppy:
|
||||||
@@ -419,6 +421,8 @@ fs_FloppyServices:
|
|||||||
dd 0
|
dd 0
|
||||||
dd fs_FloppyDelete
|
dd fs_FloppyDelete
|
||||||
dd fs_FloppyCreateFolder
|
dd fs_FloppyCreateFolder
|
||||||
|
dd fs_NotImplemented
|
||||||
|
dd fs_NotImplemented
|
||||||
fs_NumFloppyServices = ($ - fs_FloppyServices)/4
|
fs_NumFloppyServices = ($ - fs_FloppyServices)/4
|
||||||
|
|
||||||
fs_OnHd0:
|
fs_OnHd0:
|
||||||
@@ -492,6 +496,8 @@ fs_HdServices:
|
|||||||
dd 0
|
dd 0
|
||||||
dd fs_HdDelete
|
dd fs_HdDelete
|
||||||
dd fs_HdCreateFolder
|
dd fs_HdCreateFolder
|
||||||
|
dd fs_NotImplemented
|
||||||
|
dd fs_NotImplemented
|
||||||
fs_NumHdServices = ($ - fs_HdServices)/4
|
fs_NumHdServices = ($ - fs_HdServices)/4
|
||||||
|
|
||||||
;*******************************************************
|
;*******************************************************
|
||||||
@@ -500,28 +506,33 @@ fs_OnCd0:
|
|||||||
mov [ChannelNumber],1
|
mov [ChannelNumber],1
|
||||||
mov [DiskNumber],0
|
mov [DiskNumber],0
|
||||||
push 6
|
push 6
|
||||||
|
push 1
|
||||||
jmp fs_OnCd
|
jmp fs_OnCd
|
||||||
fs_OnCd1:
|
fs_OnCd1:
|
||||||
call reserve_cd
|
call reserve_cd
|
||||||
mov [ChannelNumber],1
|
mov [ChannelNumber],1
|
||||||
mov [DiskNumber],1
|
mov [DiskNumber],1
|
||||||
push 4
|
push 4
|
||||||
|
push 2
|
||||||
jmp fs_OnCd
|
jmp fs_OnCd
|
||||||
fs_OnCd2:
|
fs_OnCd2:
|
||||||
call reserve_cd
|
call reserve_cd
|
||||||
mov [ChannelNumber],2
|
mov [ChannelNumber],2
|
||||||
mov [DiskNumber],0
|
mov [DiskNumber],0
|
||||||
push 2
|
push 2
|
||||||
|
push 3
|
||||||
jmp fs_OnCd
|
jmp fs_OnCd
|
||||||
fs_OnCd3:
|
fs_OnCd3:
|
||||||
call reserve_cd
|
call reserve_cd
|
||||||
mov [ChannelNumber],2
|
mov [ChannelNumber],2
|
||||||
mov [DiskNumber],1
|
mov [DiskNumber],1
|
||||||
push 0
|
push 0
|
||||||
|
push 4
|
||||||
fs_OnCd:
|
fs_OnCd:
|
||||||
call reserve_cd_channel
|
call reserve_cd_channel
|
||||||
pop eax
|
pop eax
|
||||||
mov [hdpos], eax
|
mov [cdpos], eax
|
||||||
|
pop eax
|
||||||
cmp ecx, 0x100
|
cmp ecx, 0x100
|
||||||
jae .nf
|
jae .nf
|
||||||
push ecx ebx
|
push ecx ebx
|
||||||
@@ -566,6 +577,10 @@ fs_CdServices:
|
|||||||
dd fs_CdGetFileInfo
|
dd fs_CdGetFileInfo
|
||||||
dd fs_NotImplemented
|
dd fs_NotImplemented
|
||||||
dd 0
|
dd 0
|
||||||
|
dd fs_NotImplemented
|
||||||
|
dd fs_NotImplemented
|
||||||
|
dd fs_EjectDeviceTray
|
||||||
|
dd fs_LoadDeviceTray
|
||||||
fs_NumCdServices = ($ - fs_CdServices)/4
|
fs_NumCdServices = ($ - fs_CdServices)/4
|
||||||
|
|
||||||
;*******************************************************
|
;*******************************************************
|
||||||
|
@@ -489,18 +489,31 @@ fs_CdGetFileInfo:
|
|||||||
pop edi
|
pop edi
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
ret
|
ret
|
||||||
|
;----------------------------------------------------------------
|
||||||
|
fs_EjectDeviceTray:
|
||||||
|
call clear_CD_cache
|
||||||
|
call allow_medium_removal
|
||||||
|
call EjectMedium
|
||||||
|
ret
|
||||||
|
;----------------------------------------------------------------
|
||||||
|
fs_LoadDeviceTray:
|
||||||
|
call LoadMedium
|
||||||
|
ret
|
||||||
|
;----------------------------------------------------------------
|
||||||
|
|
||||||
cd_find_lfn:
|
cd_find_lfn:
|
||||||
|
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 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
; 16 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
mov [CDSectorAddress],dword 15
|
mov [CDSectorAddress],dword 15
|
||||||
|
mov [CDDataBuf_pointer],CDDataBuf
|
||||||
|
call prevent_medium_removal
|
||||||
.start:
|
.start:
|
||||||
inc dword [CDSectorAddress]
|
inc dword [CDSectorAddress]
|
||||||
mov [CDDataBuf_pointer],CDDataBuf
|
call ReadCDWRetr ;_1
|
||||||
call ReadCDWRetr
|
|
||||||
cmp [DevErrorCode],0
|
cmp [DevErrorCode],0
|
||||||
jne .access_denied
|
jne .access_denied
|
||||||
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
@@ -546,6 +559,7 @@ cd_find_lfn:
|
|||||||
; <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
; <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
.access_denied:
|
.access_denied:
|
||||||
pop esi eax
|
pop esi eax
|
||||||
|
mov [cd_appl_data],1
|
||||||
stc
|
stc
|
||||||
ret
|
ret
|
||||||
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
@@ -568,6 +582,7 @@ cd_find_lfn:
|
|||||||
jmp .nested
|
jmp .nested
|
||||||
@@:
|
@@:
|
||||||
pop esi eax
|
pop esi eax
|
||||||
|
mov [cd_appl_data],1
|
||||||
clc
|
clc
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
186
programs/system/cd_tray/CD_tray.ASM
Normal file
186
programs/system/cd_tray/CD_tray.ASM
Normal file
@@ -0,0 +1,186 @@
|
|||||||
|
;
|
||||||
|
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ATAPI
|
||||||
|
; 22.07.2007 Mario79 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
use32 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 32-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
org 0x0 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
db 'MENUET01' ; 8-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MenuetOS
|
||||||
|
dd 0x01 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1)
|
||||||
|
dd START ; <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
dd I_END ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
dd 0x11000 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
dd 0x11000 ; <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
dd 0x0 ; <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||||
|
dd 0x0 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
include 'MACROS.INC' ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
;--- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ----------------------------------------------
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
START:
|
||||||
|
|
||||||
|
red: ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||||
|
call draw_window ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
;--- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ----------------------------------------
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
still:
|
||||||
|
mcall 10 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 10 - <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
cmp eax,1 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ?
|
||||||
|
je red ; <20><><EFBFBD><EFBFBD> <20><> - <20><> <20><><EFBFBD><EFBFBD><EFBFBD> red
|
||||||
|
cmp eax,2 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ?
|
||||||
|
je key ; <20><><EFBFBD><EFBFBD> <20><> - <20><> key
|
||||||
|
cmp eax,3 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ?
|
||||||
|
je button ; <20><><EFBFBD><EFBFBD> <20><> - <20><> button
|
||||||
|
|
||||||
|
jmp still ; <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
key: ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
mcall 2 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28> ah)
|
||||||
|
|
||||||
|
jmp still ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
button:
|
||||||
|
mcall 17 ; 17 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
cmp ah,2
|
||||||
|
jne b3
|
||||||
|
mov dword [load_tray.name],cd0
|
||||||
|
jmp b5.1
|
||||||
|
b3:
|
||||||
|
cmp ah,3
|
||||||
|
jne b4
|
||||||
|
mov dword [load_tray.name],cd1
|
||||||
|
jmp b5.1
|
||||||
|
b4:
|
||||||
|
cmp ah,4
|
||||||
|
jne b5
|
||||||
|
mov dword [load_tray.name],cd2
|
||||||
|
jmp b5.1
|
||||||
|
b5:
|
||||||
|
cmp ah,5
|
||||||
|
jne b6
|
||||||
|
mov dword [load_tray.name],cd3
|
||||||
|
.1:
|
||||||
|
mcall 70, load_tray
|
||||||
|
jmp red
|
||||||
|
b6:
|
||||||
|
cmp ah,6
|
||||||
|
jne b7
|
||||||
|
mov dword [eject_tray.name],cd0
|
||||||
|
jmp b9.1
|
||||||
|
b7:
|
||||||
|
cmp ah,7
|
||||||
|
jne b8
|
||||||
|
mov dword [eject_tray.name],cd1
|
||||||
|
jmp b9.1
|
||||||
|
b8:
|
||||||
|
cmp ah,8
|
||||||
|
jne b9
|
||||||
|
mov dword [eject_tray.name],cd2
|
||||||
|
jmp b9.1
|
||||||
|
b9:
|
||||||
|
cmp ah,9
|
||||||
|
jne b1
|
||||||
|
mov dword [eject_tray.name],cd3
|
||||||
|
.1:
|
||||||
|
mcall 70, eject_tray
|
||||||
|
jmp red
|
||||||
|
b1:
|
||||||
|
cmp ah, 1 ; <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1,
|
||||||
|
jne still ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
.exit:
|
||||||
|
mcall -1 ; <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
;--- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ----------------------------------
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
draw_window:
|
||||||
|
mcall 12, 1 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 12: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||||
|
; 1 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
mcall 0, <100,230>, <100,110>, 0x03AABBCC, 0x805080D0, 0x005080D0
|
||||||
|
mcall 71, 1 ,header
|
||||||
|
mcall 8,<15,42>,<40,20>,2,0xaaaaaa
|
||||||
|
call draw_buttons
|
||||||
|
mov edx,6
|
||||||
|
add ecx,30 shl 16
|
||||||
|
mcall
|
||||||
|
call draw_buttons
|
||||||
|
|
||||||
|
mcall 4, <25,25>, 0x80ffffff,text1
|
||||||
|
mov edx,text2
|
||||||
|
|
||||||
|
add ebx,3 shl 16+20
|
||||||
|
mcall
|
||||||
|
mov edx,text3
|
||||||
|
add ebx,30
|
||||||
|
sub ebx,3 shl 16
|
||||||
|
mcall
|
||||||
|
|
||||||
|
mcall 12, 2 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 12: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||||
|
; 2, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
ret ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
draw_buttons:
|
||||||
|
pusha
|
||||||
|
add ebx,50 shl 16
|
||||||
|
inc edx
|
||||||
|
mcall
|
||||||
|
add ebx,50 shl 16
|
||||||
|
inc edx
|
||||||
|
mcall
|
||||||
|
add ebx,50 shl 16
|
||||||
|
inc edx
|
||||||
|
mcall
|
||||||
|
popa
|
||||||
|
ret
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
;--- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ----------------------------------------------
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
header db ' ATAPI Device Tray Control',0
|
||||||
|
text3 db 'eject eject eject eject',0
|
||||||
|
text2 db 'load load load load',0
|
||||||
|
text1 db '/cd0/ /cd1/ /cd2/ /cd3/',0
|
||||||
|
cd0: db '/cd0/1/',0
|
||||||
|
cd1: db '/cd1/1/',0
|
||||||
|
cd2: db '/cd2/1/',0
|
||||||
|
cd3: db '/cd3/1/',0
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
load_tray:
|
||||||
|
.subfunction dd 11
|
||||||
|
.rezerv dd 0
|
||||||
|
.rezerv1 dd 0
|
||||||
|
.rezerv2 dd 0
|
||||||
|
.rezerv3 dd 0
|
||||||
|
db 0
|
||||||
|
.name: dd cd0
|
||||||
|
|
||||||
|
eject_tray:
|
||||||
|
.subfunction dd 10
|
||||||
|
.rezerv dd 0
|
||||||
|
.rezerv1 dd 0
|
||||||
|
.rezerv2 dd 0
|
||||||
|
.rezerv3 dd 0
|
||||||
|
db 0
|
||||||
|
.name: dd cd0
|
||||||
|
|
||||||
|
I_END: ; <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
268
programs/system/cd_tray/MACROS.INC
Normal file
268
programs/system/cd_tray/MACROS.INC
Normal file
@@ -0,0 +1,268 @@
|
|||||||
|
; new application structure
|
||||||
|
macro meos_app_start
|
||||||
|
{
|
||||||
|
use32
|
||||||
|
org 0x0
|
||||||
|
|
||||||
|
db 'MENUET01'
|
||||||
|
dd 0x01
|
||||||
|
dd __start
|
||||||
|
dd __end
|
||||||
|
dd __memory
|
||||||
|
dd __stack
|
||||||
|
|
||||||
|
if used __params & ~defined __params
|
||||||
|
dd __params
|
||||||
|
else
|
||||||
|
dd 0x0
|
||||||
|
end if
|
||||||
|
|
||||||
|
dd 0x0
|
||||||
|
}
|
||||||
|
MEOS_APP_START fix meos_app_start
|
||||||
|
|
||||||
|
macro code
|
||||||
|
{
|
||||||
|
__start:
|
||||||
|
}
|
||||||
|
CODE fix code
|
||||||
|
|
||||||
|
macro data
|
||||||
|
{
|
||||||
|
__data:
|
||||||
|
}
|
||||||
|
DATA fix data
|
||||||
|
|
||||||
|
macro udata
|
||||||
|
{
|
||||||
|
if used __params & ~defined __params
|
||||||
|
__params:
|
||||||
|
db 0
|
||||||
|
__end:
|
||||||
|
rb 255
|
||||||
|
else
|
||||||
|
__end:
|
||||||
|
end if
|
||||||
|
__udata:
|
||||||
|
}
|
||||||
|
UDATA fix udata
|
||||||
|
|
||||||
|
macro meos_app_end
|
||||||
|
{
|
||||||
|
align 32
|
||||||
|
rb 2048
|
||||||
|
__stack:
|
||||||
|
__memory:
|
||||||
|
}
|
||||||
|
MEOS_APP_END fix meos_app_end
|
||||||
|
|
||||||
|
|
||||||
|
; macro for defining multiline text data
|
||||||
|
struc mstr [sstring]
|
||||||
|
{
|
||||||
|
forward
|
||||||
|
local ssize
|
||||||
|
virtual at 0
|
||||||
|
db sstring
|
||||||
|
ssize = $
|
||||||
|
end virtual
|
||||||
|
dd ssize
|
||||||
|
db sstring
|
||||||
|
common
|
||||||
|
dd -1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
; strings
|
||||||
|
macro sz name,[data] { ; from MFAR [mike.dld]
|
||||||
|
common
|
||||||
|
if used name
|
||||||
|
label name
|
||||||
|
end if
|
||||||
|
forward
|
||||||
|
if used name
|
||||||
|
db data
|
||||||
|
end if
|
||||||
|
common
|
||||||
|
if used name
|
||||||
|
.size = $-name
|
||||||
|
end if
|
||||||
|
}
|
||||||
|
|
||||||
|
macro lsz name,[lng,data] { ; from MFAR [mike.dld]
|
||||||
|
common
|
||||||
|
if used name
|
||||||
|
label name
|
||||||
|
end if
|
||||||
|
forward
|
||||||
|
if (used name)&(lang eq lng)
|
||||||
|
db data
|
||||||
|
end if
|
||||||
|
common
|
||||||
|
if used name
|
||||||
|
.size = $-name
|
||||||
|
end if
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; easy system call macro
|
||||||
|
macro mpack dest, hsrc, lsrc
|
||||||
|
{
|
||||||
|
if (hsrc eqtype 0) & (lsrc eqtype 0)
|
||||||
|
mov dest, (hsrc) shl 16 + lsrc
|
||||||
|
else
|
||||||
|
if (hsrc eqtype 0) & (~lsrc eqtype 0)
|
||||||
|
mov dest, (hsrc) shl 16
|
||||||
|
add dest, lsrc
|
||||||
|
else
|
||||||
|
mov dest, hsrc
|
||||||
|
shl dest, 16
|
||||||
|
add dest, lsrc
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
}
|
||||||
|
|
||||||
|
macro __mov reg,a,b { ; mike.dld
|
||||||
|
if (~a eq)&(~b eq)
|
||||||
|
mpack reg,a,b
|
||||||
|
else if (~a eq)&(b eq)
|
||||||
|
mov reg,a
|
||||||
|
end if
|
||||||
|
}
|
||||||
|
|
||||||
|
macro mcall a,b,c,d,e,f { ; mike.dld
|
||||||
|
__mov eax,a
|
||||||
|
__mov ebx,b
|
||||||
|
__mov ecx,c
|
||||||
|
__mov edx,d
|
||||||
|
__mov esi,e
|
||||||
|
__mov edi,f
|
||||||
|
int 0x40
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; language for programs
|
||||||
|
lang fix ru ; ru en fr ge fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; optimize the code for size
|
||||||
|
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
||||||
|
|
||||||
|
macro add arg1,arg2
|
||||||
|
{
|
||||||
|
if (arg2 eqtype 0)
|
||||||
|
if (arg2) = 1
|
||||||
|
inc arg1
|
||||||
|
else
|
||||||
|
add arg1,arg2
|
||||||
|
end if
|
||||||
|
else
|
||||||
|
add arg1,arg2
|
||||||
|
end if
|
||||||
|
}
|
||||||
|
|
||||||
|
macro sub arg1,arg2
|
||||||
|
{
|
||||||
|
if (arg2 eqtype 0)
|
||||||
|
if (arg2) = 1
|
||||||
|
dec arg1
|
||||||
|
else
|
||||||
|
sub arg1,arg2
|
||||||
|
end if
|
||||||
|
else
|
||||||
|
sub arg1,arg2
|
||||||
|
end if
|
||||||
|
}
|
||||||
|
|
||||||
|
macro mov arg1,arg2
|
||||||
|
{
|
||||||
|
if (arg1 in __regs) & (arg2 eqtype 0)
|
||||||
|
if (arg2) = 0
|
||||||
|
xor arg1,arg1
|
||||||
|
else if (arg2) = 1
|
||||||
|
xor arg1,arg1
|
||||||
|
inc arg1
|
||||||
|
else if (arg2) = -1
|
||||||
|
or arg1,-1
|
||||||
|
else if (arg2) > -128 & (arg2) < 128
|
||||||
|
push arg2
|
||||||
|
pop arg1
|
||||||
|
else
|
||||||
|
mov arg1,arg2
|
||||||
|
end if
|
||||||
|
else
|
||||||
|
mov arg1,arg2
|
||||||
|
end if
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
macro struct name
|
||||||
|
{
|
||||||
|
virtual at 0
|
||||||
|
name name
|
||||||
|
sizeof.#name = $ - name
|
||||||
|
end virtual
|
||||||
|
}
|
||||||
|
|
||||||
|
; structures used in MeOS
|
||||||
|
struc process_information
|
||||||
|
{
|
||||||
|
.cpu_usage dd ? ; +0
|
||||||
|
.window_stack_position dw ? ; +4
|
||||||
|
.window_stack_value dw ? ; +6
|
||||||
|
.not_used1 dw ? ; +8
|
||||||
|
.process_name rb 12 ; +10
|
||||||
|
.memory_start dd ? ; +22
|
||||||
|
.used_memory dd ? ; +26
|
||||||
|
.PID dd ? ; +30
|
||||||
|
.x_start dd ? ; +34
|
||||||
|
.y_start dd ? ; +38
|
||||||
|
.x_size dd ? ; +42
|
||||||
|
.y_size dd ? ; +46
|
||||||
|
.slot_state dw ? ; +50
|
||||||
|
rb (1024-52)
|
||||||
|
}
|
||||||
|
struct process_information
|
||||||
|
|
||||||
|
struc system_colors
|
||||||
|
{
|
||||||
|
.frame dd ?
|
||||||
|
.grab dd ?
|
||||||
|
.grab_button dd ?
|
||||||
|
.grab_button_text dd ?
|
||||||
|
.grab_text dd ?
|
||||||
|
.work dd ?
|
||||||
|
.work_button dd ?
|
||||||
|
.work_button_text dd ?
|
||||||
|
.work_text dd ?
|
||||||
|
.work_graph dd ?
|
||||||
|
}
|
||||||
|
struct system_colors
|
||||||
|
|
||||||
|
|
||||||
|
; constants
|
||||||
|
|
||||||
|
; events
|
||||||
|
EV_IDLE = 0
|
||||||
|
EV_TIMER = 0
|
||||||
|
EV_REDRAW = 1
|
||||||
|
EV_KEY = 2
|
||||||
|
EV_BUTTON = 3
|
||||||
|
EV_EXIT = 4
|
||||||
|
EV_BACKGROUND = 5
|
||||||
|
EV_MOUSE = 6
|
||||||
|
EV_IPC = 7
|
||||||
|
EV_STACK = 8
|
||||||
|
|
||||||
|
; event mask bits for function 40
|
||||||
|
EVM_REDRAW = 1b
|
||||||
|
EVM_KEY = 10b
|
||||||
|
EVM_BUTTON = 100b
|
||||||
|
EVM_EXIT = 1000b
|
||||||
|
EVM_BACKGROUND = 10000b
|
||||||
|
EVM_MOUSE = 100000b
|
||||||
|
EVM_IPC = 1000000b
|
||||||
|
EVM_STACK = 10000000b
|
2
programs/system/cd_tray/build.bat
Normal file
2
programs/system/cd_tray/build.bat
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
@fasm CD_tray.ASM CD_tray
|
||||||
|
@pause
|
Reference in New Issue
Block a user