Subversion Repositories Kolibri OS

Rev

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

  1. ;
  2. ; x86 format converters for HERMES
  3. ; Some routines Copyright (c) 1998 Christian Nentwich (brn@eleet.mcb.at)
  4. ; This source code is licensed under the GNU LGPL
  5. ;
  6. ; Please refer to the file COPYING.LIB contained in the distribution for
  7. ; licensing conditions         
  8. ;
  9. ; Most routines are (c) Glenn Fiedler (ptc@gaffer.org), used with permission
  10. ;
  11.  
  12. BITS 32
  13.  
  14. GLOBAL _ConvertX86
  15. GLOBAL _x86return
  16.        
  17. GLOBAL _Hermes_X86_CPU
  18.  
  19.  
  20. SECTION .data
  21.        
  22. cpu_flags dd 0
  23.        
  24.                
  25. SECTION .text
  26.                
  27. ;; _ConvertX86:  
  28. ;; [ESP+8] ConverterInfo*
  29. ;; --------------------------------------------------------------------------
  30. ;; ConverterInfo (ebp+..)
  31. ;;   0: void *s_pixels
  32. ;;   4: int s_width
  33. ;;   8: int s_height
  34. ;;  12: int s_add
  35. ;;  16: void *d_pixels
  36. ;;  20: int d_width
  37. ;;  24: int d_height
  38. ;;  28: int d_add
  39. ;;  32: void (*converter_function)()
  40. ;;  36: int32 *lookup
  41.        
  42. _ConvertX86:
  43.         push ebp
  44.         mov ebp,esp
  45.  
  46. ; Save the registers used by the blitters, necessary for optimized code
  47.         pusha
  48.  
  49.         mov eax,[ebp+8]
  50.  
  51.         cmp dword [eax+4],BYTE 0
  52.         je endconvert
  53.        
  54.         mov ebp,eax
  55.        
  56.         mov esi,[ebp+0]
  57.         mov edi,[ebp+16]
  58.        
  59. y_loop:
  60.         mov ecx,[ebp+4]
  61.  
  62.         jmp [ebp+32]
  63.  
  64. _x86return:    
  65.         add esi,[ebp+12]
  66.         add edi,[ebp+28]
  67.        
  68.         dec dword  [ebp+8]
  69.         jnz y_loop
  70.  
  71. ; Restore the registers used by the blitters, necessary for optimized code
  72.         popa
  73.        
  74.         pop ebp
  75.  
  76. endconvert:    
  77.         ret            
  78.  
  79.  
  80.  
  81. ;; Hermes_X86_CPU returns the CPUID flags in eax
  82.        
  83. _Hermes_X86_CPU:
  84.         pushfd
  85.         pop eax
  86.        
  87.         mov ecx,eax
  88.        
  89.         xor eax,040000h
  90.         push eax
  91.        
  92.         popfd
  93.         pushfd
  94.  
  95.         pop eax
  96.         xor eax,ecx
  97.         jz .L1                  ; Processor is 386
  98.  
  99.         push ecx
  100.         popfd
  101.  
  102.         mov eax,ecx
  103.         xor eax,200000h
  104.  
  105.         push eax
  106.         popfd
  107.         pushfd
  108.  
  109.         pop eax
  110.         xor eax,ecx
  111.         je .L1
  112.        
  113.         pusha
  114.        
  115.         mov eax,1
  116.         cpuid
  117.  
  118.         mov [cpu_flags],edx
  119.  
  120.         popa
  121.  
  122.         mov eax,[cpu_flags]
  123.  
  124. .L1:   
  125.         xor eax,eax
  126.         ret
  127.