Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | 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.    int  0x40
  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. _debug_crlf db 13, 10, 0
  77.  
  78. macro newline
  79. {
  80.   pushf
  81.   pushad
  82.   mov edx, _debug_crlf
  83.   call debug_outstr
  84.   popad
  85.   popf
  86. }
  87.  
  88. macro print message
  89. {
  90.   dps message
  91.   newline
  92. }
  93.  
  94. macro pregs
  95. {
  96.   dps "EAX: "
  97.   dpd eax
  98.   dps "   EBX: "
  99.   dpd ebx
  100.   newline
  101.   dps "ECX: "
  102.   dpd ecx
  103.   dps "   EDX: "
  104.   dpd edx
  105.   newline
  106. }
  107.  
  108. macro debug_print_hex arg
  109. {
  110.     pushf
  111.     pushad
  112.     if ~arg eq eax
  113.       mov eax, arg
  114.     end if
  115.     call debug_outhex
  116.     popad
  117.     popf
  118. }
  119. dph fix debug_print_hex
  120.  
  121. debug_outhex:
  122.     ;  eax - number
  123.     mov   edx, 8
  124.   .new_char:
  125.     rol   eax, 4
  126.     movzx ecx, al
  127.     and   cl,  0x0f
  128.     mov   cl,  [__hexdigits + ecx]
  129.     pushad
  130.     mcall 63, 1
  131.     popad
  132.     dec   edx
  133.     jnz   .new_char
  134. ret
  135.  
  136. __hexdigits:
  137.   db '0123456789ABCDEF'