Subversion Repositories Kolibri OS

Rev

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

  1. macro debug_print str
  2. {
  3.    local ..string, ..label
  4.  
  5.    jmp ..label
  6.    ..string db str,0
  7.   ..label:
  8.  
  9.    pushf
  10.    pushad
  11.    mov  edx,..string
  12.    call debug_outstr
  13.    popad
  14.    popf
  15. }
  16.  
  17. dps fix debug_print
  18.  
  19. macro debug_print_dec arg
  20. {
  21.    pushf
  22.    pushad
  23.    if ~arg eq eax
  24.      mov  eax,arg
  25.    end if
  26.    call debug_outdec
  27.    popad
  28.    popf
  29. }
  30.  
  31. dpd fix debug_print_dec
  32.  
  33. ;---------------------------------
  34. debug_outdec:           ;(eax - num, edi-str)
  35.         push 10         ;2
  36.         pop ecx         ;1
  37.         push -'0'       ;2
  38.     .l0:
  39.         xor edx,edx     ;2
  40.         div ecx         ;2
  41.         push edx        ;1
  42.         test eax,eax    ;2
  43.         jnz .l0         ;2
  44.     .l1:
  45.         pop eax         ;1
  46.         add al,'0'      ;2
  47.         call debug_outchar ; stosb
  48.         jnz .l1         ;2
  49.         ret             ;1
  50. ;---------------------------------
  51.  
  52. debug_outchar:          ; al - char
  53.    pushf
  54.    pushad
  55.    mov  cl,al
  56.    mov  eax,63
  57.    mov  ebx,1
  58.    mcall
  59.    popad
  60.    popf
  61. ret
  62.  
  63. debug_outstr:
  64.    mov  eax,63
  65.    mov  ebx,1
  66.  @@:
  67.    mov  cl,[edx]
  68.    test cl,cl
  69.    jz   @f
  70.    int  40h
  71.    inc  edx
  72.    jmp  @b
  73.  @@:
  74.    ret
  75.  
  76.  
  77. macro newline
  78. {
  79.   dps <13,10>
  80. }
  81.  
  82. macro print message
  83. {
  84.   dps message
  85.   newline
  86. }
  87.  
  88. macro pregs
  89. {
  90.   dps "EAX: "
  91.   dpd eax
  92.   dps "   EBX: "
  93.   dpd ebx
  94.   newline
  95.   dps "ECX: "
  96.   dpd ecx
  97.   dps "   EDX: "
  98.   dpd edx
  99.   newline
  100. }
  101.  
  102. macro debug_print_hex arg
  103. {
  104.     pushf
  105.     pushad
  106.     if ~arg eq eax
  107.       mov eax, arg
  108.     end if
  109.     call debug_outhex
  110.     popad
  111.     popf
  112. }
  113. dph fix debug_print_hex
  114.  
  115. debug_outhex:
  116.     ;  eax - number
  117.     mov   edx, 8
  118.   .new_char:
  119.     rol   eax, 4
  120.     movzx ecx, al
  121.     and   cl,  0x0f
  122.     mov   cl,  [__hexdigits + ecx]
  123.     pushad
  124.     mcall 63, 1
  125.     popad
  126.     dec   edx
  127.     jnz   .new_char
  128. ret
  129.  
  130. __hexdigits:
  131.   db '0123456789ABCDEF'