Subversion Repositories Kolibri OS

Rev

Rev 3712 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;                                                              ;;
  3. ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
  4. ;; Distributed under terms of the GNU General Public License    ;;
  5. ;;                                                              ;;
  6. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  7.  
  8. ;**************************************************************************
  9. ;
  10. ;   [cache_ide[X]_pointer]
  11. ;   or [cache_ide[X]_data_pointer]  first entry in cache list
  12. ;
  13. ;            +0   - lba sector
  14. ;            +4   - state of cache sector
  15. ;                   0 = empty
  16. ;                   1 = used for read  ( same as in hd )
  17. ;                   2 = used for write ( differs from hd )
  18. ;
  19. ;  [cache_ide[X]_system_data]
  20. ;  or [cache_ide[x]_appl_data] - cache entries
  21. ;
  22. ;**************************************************************************
  23.  
  24. $Revision: 3742 $
  25.  
  26. align 4
  27. find_empty_slot_CD_cache:
  28. ;-----------------------------------------------------------
  29. ; find empty or read slot, flush cache if next 10% is used by write
  30. ; output : edi = cache slot
  31. ;-----------------------------------------------------------
  32. .search_again:
  33.         call    cd_calculate_cache_3
  34. .search_for_empty:
  35.         inc     edi
  36.         call    cd_calculate_cache_4
  37.         jbe     .inside_cache
  38.         mov     edi, 1
  39. .inside_cache:
  40.         call    cd_calculate_cache_5
  41.         ret
  42. ;--------------------------------------------------------------------
  43. clear_CD_cache:
  44.         pusha
  45. .ide0:
  46.         xor     eax, eax
  47.         cmp     [cdpos], 1
  48.         jne     .ide1
  49.         mov     [cache_ide0_search_start], eax
  50.         mov     ecx, [cache_ide0_system_sad_size]
  51.         mov     edi, [cache_ide0_pointer]
  52.         call    .clear
  53.         mov     [cache_ide0_appl_search_start], eax
  54.         mov     ecx, [cache_ide0_appl_sad_size]
  55.         mov     edi, [cache_ide0_data_pointer]
  56.         jmp     .continue
  57. .ide1:
  58.         cmp     [cdpos], 2
  59.         jne     .ide2
  60.         mov     [cache_ide1_search_start], eax
  61.         mov     ecx, [cache_ide1_system_sad_size]
  62.         mov     edi, [cache_ide1_pointer]
  63.         call    .clear
  64.         mov     [cache_ide1_appl_search_start], eax
  65.         mov     ecx, [cache_ide1_appl_sad_size]
  66.         mov     edi, [cache_ide1_data_pointer]
  67.         jmp     .continue
  68. .ide2:
  69.         cmp     [cdpos], 3
  70.         jne     .ide3
  71.         mov     [cache_ide2_search_start], eax
  72.         mov     ecx, [cache_ide2_system_sad_size]
  73.         mov     edi, [cache_ide2_pointer]
  74.         call    .clear
  75.         mov     [cache_ide2_appl_search_start], eax
  76.         mov     ecx, [cache_ide2_appl_sad_size]
  77.         mov     edi, [cache_ide2_data_pointer]
  78.         jmp     .continue
  79. .ide3:
  80.         mov     [cache_ide3_search_start], eax
  81.         mov     ecx, [cache_ide3_system_sad_size]
  82.         mov     edi, [cache_ide3_pointer]
  83.         call    .clear
  84.         mov     [cache_ide3_appl_search_start], eax
  85.         mov     ecx, [cache_ide3_appl_sad_size]
  86.         mov     edi, [cache_ide3_data_pointer]
  87. .continue:
  88.         call    .clear
  89.         popa
  90.         ret
  91. .clear:
  92.         shl     ecx, 1
  93.         cld
  94.         rep stosd
  95.         ret
  96. ;--------------------------------------------------------------------
  97. align 4
  98. cd_calculate_cache:
  99. ; 1 - IDE0 ... 4 - IDE3
  100. .ide0:
  101.         cmp     [cdpos], 1
  102.         jne     .ide1
  103.         cmp     [cd_appl_data], 0
  104.         jne     .ide0_appl_data
  105.         mov     ecx, [cache_ide0_system_sad_size]
  106.         mov     esi, [cache_ide0_pointer]
  107.         ret
  108. .ide0_appl_data:
  109.         mov     ecx, [cache_ide0_appl_sad_size]
  110.         mov     esi, [cache_ide0_data_pointer]
  111.         ret
  112. .ide1:
  113.         cmp     [cdpos], 2
  114.         jne     .ide2
  115.         cmp     [cd_appl_data], 0
  116.         jne     .ide1_appl_data
  117.         mov     ecx, [cache_ide1_system_sad_size]
  118.         mov     esi, [cache_ide1_pointer]
  119.         ret
  120. .ide1_appl_data:
  121.         mov     ecx, [cache_ide1_appl_sad_size]
  122.         mov     esi, [cache_ide1_data_pointer]
  123.         ret
  124. .ide2:
  125.         cmp     [cdpos], 3
  126.         jne     .ide3
  127.         cmp     [cd_appl_data], 0
  128.         jne     .ide2_appl_data
  129.         mov     ecx, [cache_ide2_system_sad_size]
  130.         mov     esi, [cache_ide2_pointer]
  131.         ret
  132. .ide2_appl_data:
  133.         mov     ecx, [cache_ide2_appl_sad_size]
  134.         mov     esi, [cache_ide2_data_pointer]
  135.         ret
  136. .ide3:
  137.         cmp     [cd_appl_data], 0
  138.         jne     .ide3_appl_data
  139.         mov     ecx, [cache_ide3_system_sad_size]
  140.         mov     esi, [cache_ide3_pointer]
  141.         ret
  142. .ide3_appl_data:
  143.         mov     ecx, [cache_ide3_appl_sad_size]
  144.         mov     esi, [cache_ide3_data_pointer]
  145.         ret
  146. ;--------------------------------------------------------------------
  147. align 4
  148. cd_calculate_cache_1:
  149. ; 1 - IDE0 ... 4 - IDE3
  150. .ide0:
  151.         cmp     [cdpos], 1
  152.         jne     .ide1
  153.         cmp     [cd_appl_data], 0
  154.         jne     .ide0_appl_data
  155.         mov     esi, [cache_ide0_pointer]
  156.         ret
  157. .ide0_appl_data:
  158.         mov     esi, [cache_ide0_data_pointer]
  159.         ret
  160. .ide1:
  161.         cmp     [cdpos], 2
  162.         jne     .ide2
  163.         cmp     [cd_appl_data], 0
  164.         jne     .ide1_appl_data
  165.         mov     esi, [cache_ide1_pointer]
  166.         ret
  167. .ide1_appl_data:
  168.         mov     esi, [cache_ide1_data_pointer]
  169.         ret
  170. .ide2:
  171.         cmp     [cdpos], 3
  172.         jne     .ide3
  173.         cmp     [cd_appl_data], 0
  174.         jne     .ide2_appl_data
  175.         mov     esi, [cache_ide2_pointer]
  176.         ret
  177. .ide2_appl_data:
  178.         mov     esi, [cache_ide2_data_pointer]
  179.         ret
  180. .ide3:
  181.         cmp     [cd_appl_data], 0
  182.         jne     .ide3_appl_data
  183.         mov     esi, [cache_ide3_pointer]
  184.         ret
  185. .ide3_appl_data:
  186.         mov     esi, [cache_ide3_data_pointer]
  187.         ret
  188. ;--------------------------------------------------------------------
  189. align 4
  190. cd_calculate_cache_2:
  191. ; 1 - IDE0 ... 4 - IDE3
  192. .ide0:
  193.         cmp     [cdpos], 1
  194.         jne     .ide1
  195.         cmp     [cd_appl_data], 0
  196.         jne     .ide0_appl_data
  197.         mov     eax, [cache_ide0_system_data]
  198.         ret
  199. .ide0_appl_data:
  200.         mov     eax, [cache_ide0_appl_data]
  201.         ret
  202. .ide1:
  203.         cmp     [cdpos], 2
  204.         jne     .ide2
  205.         cmp     [cd_appl_data], 0
  206.         jne     .ide1_appl_data
  207.         mov     eax, [cache_ide1_system_data]
  208.         ret
  209. .ide1_appl_data:
  210.         mov     eax, [cache_ide1_appl_data]
  211.         ret
  212. .ide2:
  213.         cmp     [cdpos], 3
  214.         jne     .ide3
  215.         cmp     [cd_appl_data], 0
  216.         jne     .ide2_appl_data
  217.         mov     eax, [cache_ide2_system_data]
  218.         ret
  219. .ide2_appl_data:
  220.         mov     eax, [cache_ide2_appl_data]
  221.         ret
  222. .ide3:
  223.         cmp     [cd_appl_data], 0
  224.         jne     .ide3_appl_data
  225.         mov     eax, [cache_ide3_system_data]
  226.         ret
  227. .ide3_appl_data:
  228.         mov     eax, [cache_ide3_appl_data]
  229.         ret
  230. ;--------------------------------------------------------------------
  231. align 4
  232. cd_calculate_cache_3:
  233. ;    mov   ecx,cache_max*10/100
  234. ;    mov   edi,[cache_search_start]
  235.  
  236. ; 1 - IDE0 ... 4 - IDE3
  237. .ide0:
  238.         cmp     [cdpos], 1
  239.         jne     .ide1
  240.         cmp     [cd_appl_data], 0
  241.         jne     .ide0_appl_data
  242.         mov     edi, [cache_ide0_search_start]
  243.         ret
  244. .ide0_appl_data:
  245.         mov     edi, [cache_ide0_appl_search_start]
  246.         ret
  247. .ide1:
  248.         cmp     [cdpos], 2
  249.         jne     .ide2
  250.         cmp     [cd_appl_data], 0
  251.         jne     .ide1_appl_data
  252.         mov     edi, [cache_ide1_search_start]
  253.         ret
  254. .ide1_appl_data:
  255.         mov     edi, [cache_ide1_appl_search_start]
  256.         ret
  257. .ide2:
  258.         cmp     [cdpos], 3
  259.         jne     .ide3
  260.         cmp     [cd_appl_data], 0
  261.         jne     .ide2_appl_data
  262.         mov     edi, [cache_ide2_search_start]
  263.         ret
  264. .ide2_appl_data:
  265.         mov     edi, [cache_ide2_appl_search_start]
  266.         ret
  267. .ide3:
  268.         cmp     [cd_appl_data], 0
  269.         jne     .ide3_appl_data
  270.         mov     edi, [cache_ide3_search_start]
  271.         ret
  272. .ide3_appl_data:
  273.         mov     edi, [cache_ide3_appl_search_start]
  274.         ret
  275. ;--------------------------------------------------------------------
  276. align 4
  277. cd_calculate_cache_4:
  278. ;    cmp   edi,cache_max
  279. ; 1 - IDE0 ... 4 - IDE3
  280. .ide0:
  281.         cmp     [cdpos], 1
  282.         jne     .ide1
  283.         cmp     [cd_appl_data], 0
  284.         jne     .ide0_appl_data
  285.         cmp     edi, [cache_ide0_system_sad_size]
  286.         ret
  287. .ide0_appl_data:
  288.         cmp     edi, [cache_ide0_appl_sad_size]
  289.         ret
  290. .ide1:
  291.         cmp     [cdpos], 2
  292.         jne     .ide2
  293.         cmp     [cd_appl_data], 0
  294.         jne     .ide1_appl_data
  295.         cmp     edi, [cache_ide1_system_sad_size]
  296.         ret
  297. .ide1_appl_data:
  298.         cmp     edi, [cache_ide1_appl_sad_size]
  299.         ret
  300. .ide2:
  301.         cmp     [cdpos], 3
  302.         jne     .ide3
  303.         cmp     [cd_appl_data], 0
  304.         jne     .ide2_appl_data
  305.         cmp     edi, [cache_ide2_system_sad_size]
  306.         ret
  307. .ide2_appl_data:
  308.         cmp     edi, [cache_ide2_appl_sad_size]
  309.         ret
  310. .ide3:
  311.         cmp     [cd_appl_data], 0
  312.         jne     .ide3_appl_data
  313.         cmp     edi, [cache_ide3_system_sad_size]
  314.         ret
  315. .ide3_appl_data:
  316.         cmp     edi, [cache_ide3_appl_sad_size]
  317.         ret
  318. ;--------------------------------------------------------------------
  319. align 4
  320. cd_calculate_cache_5:
  321. ;    mov   [cache_search_start],edi
  322. ; 1 - IDE0 ... 4 - IDE3
  323. .ide0:
  324.         cmp     [cdpos], 1
  325.         jne     .ide1
  326.         cmp     [cd_appl_data], 0
  327.         jne     .ide0_appl_data
  328.         mov     [cache_ide0_search_start], edi
  329.         ret
  330. .ide0_appl_data:
  331.         mov     [cache_ide0_appl_search_start], edi
  332.         ret
  333. .ide1:
  334.         cmp     [cdpos], 2
  335.         jne     .ide2
  336.         cmp     [cd_appl_data], 0
  337.         jne     .ide1_appl_data
  338.         mov     [cache_ide1_search_start], edi
  339.         ret
  340. .ide1_appl_data:
  341.         mov     [cache_ide1_appl_search_start], edi
  342.         ret
  343. .ide2:
  344.         cmp     [cdpos], 3
  345.         jne     .ide3
  346.         cmp     [cd_appl_data], 0
  347.         jne     .ide2_appl_data
  348.         mov     [cache_ide2_search_start], edi
  349.         ret
  350. .ide2_appl_data:
  351.         mov     [cache_ide2_appl_search_start], edi
  352.         ret
  353. .ide3:
  354.         cmp     [cd_appl_data], 0
  355.         jne     .ide3_appl_data
  356.         mov     [cache_ide3_search_start], edi
  357.         ret
  358. .ide3_appl_data:
  359.         mov     [cache_ide3_appl_search_start], edi
  360.         ret
  361. ;--------------------------------------------------------------------
  362. ;align 4
  363. ;calculate_linear_to_real:
  364. ;    shr eax, 12
  365. ;    mov eax, [page_tabs+eax*4]
  366. ;    and eax, 0xFFFFF000
  367. ;    ret
  368.