Subversion Repositories Kolibri OS

Rev

Rev 3013 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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