Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
31 halyavin 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
 
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'