Subversion Repositories Kolibri OS

Rev

Rev 129 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;-----------------------------------------------------------------------------
  2. ;///// PART OF ATi RADEON 9000 DRIVER ////////////////////////////////////////
  3. ;-----------------------------------------------------------------------------
  4. ; Copyright (c) 2004, mike.dld
  5. ; Using BeOS driver - Copyright (c) 2002, Thomas Kurschel
  6. ;-----------------------------------------------------------------------------
  7. ; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  8. ; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  9. ; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  10. ; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  11. ; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  12. ; FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  13. ; DEALINGS IN THE SOFTWARE.
  14. ;-----------------------------------------------------------------------------
  15.  
  16. macro __include_debug_strings dummy,[_id,_fmt,_len] {
  17.  common
  18.   local c1,a1,a2
  19.  forward
  20.   _id rb _len+1
  21.   db 0
  22.   a1 = 0
  23.   a2 = 0
  24.   if ~ _len eq
  25.    repeat _len-1
  26.     virtual at 0
  27.      db _fmt,13,10,0,0
  28.      load c1 word from %+a2-1
  29.     end virtual
  30.     if (c1='%s')|(c1='%x')|(c1='%d')
  31.      store byte 0 at _id+%+a1-1
  32.      a2 = a2 + 1
  33.     else if (c1='\n')
  34.      store word $0A0D at _id+%+a1-1
  35.      a1 = a1 + 1
  36.      a2 = a2 + 1
  37.     else
  38.      store word c1 at _id+%+a1-1
  39.     end if
  40.    end repeat
  41.   end if
  42.  common
  43. }
  44.  
  45. macro include_debug_strings { __include_debug_strings __debug_strings }
  46.  
  47. SHINFO0 fix SHINFO
  48.  
  49. macro SHINFO _num,_format,[_arg] {
  50.  common
  51.   SHFLOW _format,_arg
  52. }
  53.  
  54. macro SHFLOW _format,[_arg] {
  55.  common
  56.  if __DEBUG__ = 1
  57.   local ..f1,f2,a1,a2,c1,c2,..lbl
  58.   _debug_str_ fix __debug_str_ # a1
  59.   a1 = 0
  60.   c2 = 0
  61.   f2 = 0
  62.   repeat ..lbl-..f1-1
  63.    virtual at 0
  64.     db _format,13,10,0
  65.     load c1 word from %-1
  66.    end virtual
  67.    if c1 = '%s'
  68.     virtual at 0
  69.      db _format,13,10,0
  70.      store word 0 at %-1
  71.      load c1 from f2-c2
  72.     end virtual
  73.     if c1 <> 0
  74.      DEBUGS _debug_str_+f2-c2
  75.     end if
  76.     c2 = c2 + 1
  77.     f2 = %+1
  78.     a2 = 0
  79.     forward
  80.      if a2 = a1
  81.       DEBUGS _arg
  82.      end if
  83.      a2 = a2+1
  84.     common
  85.     a1 = a1+1
  86.    else if c1 = '%x'
  87.     virtual at 0
  88.      db _format,13,10,0
  89.      store word 0 at %-1
  90.      load c1 from f2-c2
  91.     end virtual
  92.     if c1 <> 0
  93.      DEBUGS _debug_str_+f2-c2
  94.     end if
  95.     c2 = c2 + 1
  96.     f2 = %+1
  97.     a2 = 0
  98.     forward
  99.      if a2 = a1
  100.       DEBUGH _arg
  101.      end if
  102.      a2 = a2+1
  103.     common
  104.     a1 = a1+1
  105.    else if c1 = '%d'
  106.     virtual at 0
  107.      db _format,13,10,0
  108.      store word 0 at %-1
  109.      load c1 from f2-c2
  110.     end virtual
  111.     if c1 <> 0
  112.      DEBUGS _debug_str_+f2-c2
  113.     end if
  114.     c2 = c2 + 1
  115.     f2 = %+1
  116.     a2 = 0
  117.     forward
  118.      if a2 = a1
  119.       DEBUGD _arg
  120.      end if
  121.      a2 = a2+1
  122.     common
  123.     a1 = a1+1
  124.    end if
  125.   end repeat
  126.   virtual at 0
  127.    db _format,13,10,0
  128.    load c1 from f2-c2
  129.   end virtual
  130.    if c1 <> 0
  131.    DEBUGS _debug_str_+f2-c2
  132.   end if
  133.   virtual at 0
  134.    ..f1 db _format,13,10,0
  135.    ..lbl:
  136.    __debug_strings fix __debug_strings,_debug_str_,_format,..lbl-..f1-1-c2
  137.   end virtual
  138.  end if
  139. pushad
  140. mov  edi,sys_delay
  141. mov  eax,1
  142. call sys_int
  143. popad
  144. }
  145.  
  146. ;-----------------------------------------------------------------------------
  147.  
  148. macro jif _op1,_cond,_op2,_label,_op {
  149.  if _op eq
  150.   cmp _op1,_op2
  151.  else
  152.   if _op2 eq
  153.    _op _op1
  154.   else
  155.    _op _op1,_op2
  156.   end if
  157.  end if
  158.  j#_cond _label
  159. }
  160.  
  161. macro m2m op1,op2 {
  162.  pushd op2
  163.  popd  op1
  164. }
  165.  
  166. macro BITFIELD _bfnum,_size,[_name,_nbits] {
  167.  common
  168.   local _shift,_mask
  169.   _shift = 0
  170.   .bit_field#_bfnum rb _size
  171.   if B_HOST eq HOST_BENDIAN
  172.  forward
  173.   _mask = 0
  174.   repeat _nbits
  175.    _mask = (_mask shl 1) or 1
  176.   end repeat
  177.   _name = _mask shl _shift
  178.   _name#_shift = _shift
  179.   _shift = _shift + _nbits
  180.  common
  181.   else
  182.  forward
  183.   _mask = 0
  184.   repeat _nbits
  185.    _mask = (_mask shl 1) or 1
  186.   end repeat
  187.   _name = _mask shl (_size-_shift-_nbits)
  188.   _name#_shift = _size-_shift-_nbits
  189.   _shift = _shift + _nbits
  190.  common
  191.   end if
  192. }
  193.  
  194. ;-----------------------------------------------------------------------------
  195.  
  196. sys_delay       =  5*4
  197. sys_pci         = 62*4
  198. sys_debug_board = 63*4
  199.  
  200. ;-----------------------------------------------------------------------------
  201.  
  202. func sys_int
  203. begin
  204.         pushad
  205.         push    eax
  206.         add     edi,[systlb]
  207.         call    dword[edi]
  208.         pop     eax
  209.         popad
  210.         ret
  211. endf
  212.  
  213. func debug_outstr
  214. begin
  215.         mov     eax,1
  216.     .l1:
  217.         mov     bl,[edx]
  218.         test    bl,bl
  219.         jz      .l2
  220.         mov     edi,sys_debug_board
  221.         call    sys_int
  222.         inc     edx
  223.         jmp     .l1
  224.     .l2:
  225.         ret
  226. endf
  227.  
  228. macro DEBUGS [_str] {
  229.  common
  230.   pushf
  231.   pushad
  232.   local ..str,..label,..is_str
  233.   ..is_str = 0
  234.  forward
  235.   if _str eqtype ''
  236.    ..is_str = 1
  237.   end if
  238.  common
  239.   if ..is_str = 1
  240.    jmp ..label
  241.    ..str db _str,0
  242.    ..label:
  243.    mov  edx,..str
  244.    call debug_outstr
  245.   else
  246.    mov  edx,_str
  247.    call debug_outstr
  248.   end if
  249.   popad
  250.   popf
  251. }
  252.  
  253. macro DEBUGF [_str] {
  254.  common
  255.   DEBUGS _str,13,10
  256. }
  257.  
  258. func debug_outchar
  259. begin
  260.         pushad
  261.         mov     bl,al
  262.         mov     eax,1
  263.         mov     edi,sys_debug_board
  264.         call    sys_int
  265.         popad
  266.         ret
  267. endf
  268.  
  269. func debug_outdec
  270. begin
  271.         mov     ecx,10
  272.         push    -'0'
  273.     .l1:
  274.         xor     edx,edx
  275.         div     ecx
  276.         push    edx
  277.         test    eax,eax
  278.         jnz     .l1
  279.     .l2:
  280.         pop     eax
  281.         add     al,'0'
  282.         jz      .l3
  283.         call    debug_outchar
  284.         jmp     .l2
  285.     .l3:
  286.         ret
  287. endf
  288.  
  289. macro DEBUGD _dec {
  290.  pushf
  291.  pushad
  292.  if _dec eqtype eax
  293.   if _dec in <ebx,ecx,edx,esi,edi,ebp,esp>
  294.    mov  eax,_dec
  295.   else if _dec in <ax,bx,cx,dx,si,di,bp,sp,al,ah,bl,bh,cl,ch,dl,dh>
  296.    movzx eax,_dec
  297.   end if
  298.  else
  299.   if (_dec eqtype word[])|(_dec eqtype byte[])
  300.    movzx eax,_dec
  301.   else
  302.    mov eax,_dec
  303.   end if
  304.  end if
  305.  call debug_outdec
  306.  popad
  307.  popf
  308. }
  309.  
  310. func debug_outhex
  311.   __hexdigits db '0123456789ABCDEF'
  312. begin
  313.         mov     edx,8
  314.     .l1:
  315.         rol     eax,4
  316.         push    eax
  317.         and     eax,0x0000000F
  318.         mov     al,[__hexdigits+eax]
  319.         call    debug_outchar
  320.         pop     eax
  321.         dec     edx
  322.         jnz     .l1
  323.         ret
  324. endf
  325.  
  326. macro DEBUGH _hex {
  327.  pushf
  328.  pushad
  329.  if ~_hex eq eax
  330.   mov  eax,_hex
  331.  end if
  332.  call debug_outhex
  333.  popad
  334.  popf
  335. }
  336.  
  337. macro diff16 title,l1,l2
  338.  {
  339.   local s,d
  340.   s = l2-l1
  341.   display title,': 0x'
  342.   repeat 8
  343.    d = '0' + s shr ((8-%) shl 2) and $0F
  344.    if d > '9'
  345.     d = d + 'A'-'9'-1
  346.    end if
  347.    display d
  348.   end repeat
  349.   display 13,10
  350.  }
  351.  
  352. macro diff10 title,l1,l2
  353.  {
  354.   local s,d,z,m
  355.   s = l2-l1
  356.   z = 0
  357.   m = 1000000000
  358.   display title,': '
  359.   repeat 10
  360.    d = '0' + s / m
  361.    s = s - (s/m)*m
  362.    m = m / 10
  363.    if d <> '0'
  364.     z = 1
  365.    end if
  366.    if z <> 0
  367.     display d
  368.    end if
  369.   end repeat
  370.   display 13,10
  371.  }
  372.  
  373. ;-----------------------------------------------------------------------------
  374. ;///// END ///////////////////////////////////////////////////////////////////
  375. ;-----------------------------------------------------------------------------