Subversion Repositories Kolibri OS

Rev

Rev 4429 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4429 Rev 4457
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
2
;;                                                              ;;
3
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
3
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
4
;; Distributed under terms of the GNU General Public License    ;;
4
;; Distributed under terms of the GNU General Public License    ;;
5
;;                                                              ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7
 
7
 
8
__REV = 0
8
__REV = 0
9
 
9
 
10
macro $Revision a {
10
macro $Revision a {
11
  match =: Num =$,a \{
11
  match =: Num =$,a \{
12
    if __REV < Num
12
    if __REV < Num
13
      __REV = Num
13
      __REV = Num
14
    end if
14
    end if
15
  \}
15
  \}
16
}
16
}
17
 
17
 
18
$Revision: 3598 $
18
$Revision: 3598 $
19
 
19
 
20
 
20
 
21
;// mike.dld, 2006-29-01 [
21
;// mike.dld, 2006-29-01 [
22
 
22
 
23
; macros definition
23
; macros definition
24
macro diff16 title,l1,l2
24
macro diff16 title,l1,l2
25
{
25
{
26
  local s,d
26
  local s,d
27
  s = l2-l1
27
  s = l2-l1
28
  display title,': 0x'
28
  display title,': 0x'
29
  repeat 16
29
  repeat 16
30
    d = 48 + s shr ((16-%) shl 2) and $0F
30
    d = 48 + s shr ((16-%) shl 2) and $0F
31
    if d > 57
31
    if d > 57
32
      d = d + 65-57-1
32
      d = d + 65-57-1
33
    end if
33
    end if
34
    display d
34
    display d
35
  end repeat
35
  end repeat
36
  display 13,10
36
  display 13,10
37
}
37
}
38
macro diff10 title,l1,l2
38
macro diff10 title,l1,l2
39
 {
39
 {
40
  local s,d,z,m
40
  local s,d,z,m
41
  s = l2-l1
41
  s = l2-l1
42
  z = 0
42
  z = 0
43
  m = 1000000000
43
  m = 1000000000
44
  display title,': '
44
  display title,': '
45
  repeat 10
45
  repeat 10
46
   d = '0' + s / m
46
   d = '0' + s / m
47
   s = s - (s/m)*m
47
   s = s - (s/m)*m
48
   m = m / 10
48
   m = m / 10
49
   if d <> '0'
49
   if d <> '0'
50
    z = 1
50
    z = 1
51
   end if
51
   end if
52
   if z <> 0
52
   if z <> 0
53
    display d
53
    display d
54
   end if
54
   end if
55
  end repeat
55
  end repeat
56
  display 13,10
56
  display 13,10
57
 }
57
 }
58
 
58
 
59
include 'kglobals.inc'
59
include 'kglobals.inc'
60
 
60
 
61
; \begin{diamond}[29.09.2006]
61
; \begin{diamond}[29.09.2006]
62
; may be useful for kernel debugging
62
; may be useful for kernel debugging
63
; example 1:
63
; example 1:
64
;       dbgstr 'Hello, World!'
64
;       dbgstr 'Hello, World!'
65
; example 2:
65
; example 2:
66
;       dbgstr 'Hello, World!', save_flags
66
;       dbgstr 'Hello, World!', save_flags
67
macro dbgstr string*, f
67
macro dbgstr string*, f
68
{
68
{
69
local a
69
local a
70
iglobal_nested
70
iglobal_nested
71
a db 'K : ',string,13,10,0
71
a db 'K : ',string,13,10,0
72
endg_nested
72
endg_nested
73
if ~ f eq
73
if ~ f eq
74
        pushfd
74
        pushfd
75
end if
75
end if
76
        push    esi
76
        push    esi
77
        mov     esi, a
77
        mov     esi, a
78
        call    sys_msg_board_str
78
        call    sys_msg_board_str
79
        pop     esi
79
        pop     esi
80
if ~ f eq
80
if ~ f eq
81
        popfd
81
        popfd
82
end if
82
end if
83
}
83
}
84
; \end{diamond}[29.09.2006]
84
; \end{diamond}[29.09.2006]
85
 
85
 
86
macro Mov op1,op2,op3 ; op1 = op2 = op3
86
macro Mov op1,op2,op3 ; op1 = op2 = op3
87
 {
87
 {
88
        mov     op2, op3
88
        mov     op2, op3
89
        mov     op1, op2
89
        mov     op1, op2
90
 }
90
 }
91
 
91
 
92
macro list_init head
92
macro list_init head
93
{
93
{
94
        mov     [head+LHEAD.next], head
94
        mov     [head+LHEAD.next], head
95
        mov     [head+LHEAD.prev], head
95
        mov     [head+LHEAD.prev], head
96
}
96
}
97
 
97
 
98
macro __list_add new, prev, next
98
macro __list_add new, prev, next
99
{
99
{
100
        mov     [next+LHEAD.prev], new
100
        mov     [next+LHEAD.prev], new
101
        mov     [new+LHEAD.next], next
101
        mov     [new+LHEAD.next], next
102
        mov     [new+LHEAD.prev], prev
102
        mov     [new+LHEAD.prev], prev
103
        mov     [prev+LHEAD.next], new
103
        mov     [prev+LHEAD.next], new
104
}
104
}
105
 
105
 
106
macro list_add new, head
106
macro list_add new, head
107
{
107
{
108
        mov     eax, [head+LHEAD.next]
108
        mov     eax, [head+LHEAD.next]
109
    __list_add new, head, eax
109
    __list_add new, head, eax
110
}
110
}
111
 
111
 
112
macro list_add_tail new, head
112
macro list_add_tail new, head
113
{
113
{
114
        mov     eax, [head+LHEAD.prev]
114
        mov     eax, [head+LHEAD.prev]
115
    __list_add new, eax, head
115
    __list_add new, eax, head
116
}
116
}
117
 
117
 
118
macro list_del entry
118
macro list_del entry
119
{
119
{
120
        mov     edx, [entry+list_fd]
120
        mov     edx, [entry+LHEAD.next]
121
        mov     ecx, [entry+list_bk]
121
        mov     ecx, [entry+LHEAD.prev]
122
        mov     [edx+list_bk], ecx
122
        mov     [edx+LHEAD.prev], ecx
123
        mov     [ecx+list_fd], edx
123
        mov     [ecx+LHEAD.next], edx
124
}
124
}
125
 
125
 
126
; MOV Immediate.
126
; MOV Immediate.
127
; Useful for things like movi eax,10:
127
; Useful for things like movi eax,10:
128
; shorter than regular mov, but slightly slower,
128
; shorter than regular mov, but slightly slower,
129
; do not use it in performance-critical places.
129
; do not use it in performance-critical places.
130
macro movi dst, imm
130
macro movi dst, imm
131
{
131
{
132
if imm >= -0x80 & imm <= 0x7F
132
if imm >= -0x80 & imm <= 0x7F
133
        push    imm
133
        push    imm
134
        pop     dst
134
        pop     dst
135
else
135
else
136
        mov     dst, imm
136
        mov     dst, imm
137
end if
137
end if
138
}
138
}