Subversion Repositories Kolibri OS

Rev

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

Rev 477 Rev 805
1
; new application structure
1
; new application structure
2
macro meos_app_start
2
macro meos_app_start
3
 {
3
 {
4
  use32
4
  use32
5
  org 0x0
5
  org 0x0
6
 
6
 
7
  db 'MENUET01'
7
  db 'MENUET01'
8
  dd 0x01
8
  dd 0x01
9
  dd __start
9
  dd __start
10
  dd __end
10
  dd __end
11
  dd __memory
11
  dd __memory
12
  dd __stack
12
  dd __stack
13
 
13
 
14
  if used __params & ~defined __params
14
  if used __params & ~defined __params
15
    dd __params
15
    dd __params
16
  else
16
  else
17
    dd 0x0
17
    dd 0x0
18
  end if
18
  end if
19
 
19
 
20
  dd 0x0
20
  dd 0x0
21
 }
21
 }
22
MEOS_APP_START fix meos_app_start
22
MEOS_APP_START fix meos_app_start
23
 
23
 
24
macro code
24
macro code
25
 {
25
 {
26
  __start:
26
  __start:
27
 }
27
 }
28
CODE fix code
28
CODE fix code
29
 
29
 
30
macro data
30
macro data
31
 {
31
 {
32
  __data:
32
  __data:
33
 }
33
 }
34
DATA fix data
34
DATA fix data
35
 
35
 
36
macro udata
36
macro udata
37
 {
37
 {
38
  if used __params & ~defined __params
38
  if used __params & ~defined __params
39
    __params:
39
    __params:
40
      db 0
40
      db 0
41
    __end:
41
    __end:
42
      rb 255
42
      rb 255
43
  else
43
  else
44
    __end:
44
    __end:
45
  end if
45
  end if
46
  __udata:
46
  __udata:
47
 }
47
 }
48
UDATA fix udata
48
UDATA fix udata
49
 
49
 
50
macro meos_app_end
50
macro meos_app_end
51
 {
51
 {
52
  align 32
52
  align 32
53
  rb 2048
53
  rb 2048
54
  __stack:
54
  __stack:
55
  __memory:
55
  __memory:
56
 }
56
 }
57
MEOS_APP_END fix meos_app_end
57
MEOS_APP_END fix meos_app_end
58
 
58
 
59
 
59
 
60
; macro for defining multiline text data
60
; macro for defining multiline text data
61
struc mstr [sstring]
61
struc mstr [sstring]
62
 {
62
 {
63
  forward
63
  forward
64
    local ssize
64
    local ssize
65
    virtual at 0
65
    virtual at 0
66
      db sstring
66
      db sstring
67
      ssize = $
67
      ssize = $
68
    end virtual
68
    end virtual
69
    dd ssize
69
    dd ssize
70
    db sstring
70
    db sstring
71
  common
71
  common
72
    dd -1
72
    dd -1
73
 }
73
 }
74
 
74
 
75
 
75
 
76
; strings
76
; strings
77
macro sz name,[data] {       ; from MFAR [mike.dld]
77
macro sz name,[data] {       ; from MFAR [mike.dld]
78
  common
78
  common
79
   if used name
79
   if used name
80
    label name
80
    label name
81
   end if
81
   end if
82
  forward
82
  forward
83
   if used name
83
   if used name
84
    db data
84
    db data
85
   end if
85
   end if
86
  common
86
  common
87
   if used name
87
   if used name
88
    .size = $-name
88
    .size = $-name
89
   end if
89
   end if
90
}
90
}
91
 
91
 
92
macro lsz name,[lng,data] {  ; from MFAR [mike.dld]
92
macro lsz name,[lng,data] {  ; from MFAR [mike.dld]
93
  common
93
  common
94
   if used name
94
   if used name
95
    label name
95
    label name
96
   end if
96
   end if
97
  forward
97
  forward
98
   if (used name)&(lang eq lng)
98
   if (used name)&(lang eq lng)
99
    db data
99
    db data
100
   end if
100
   end if
101
  common
101
  common
102
   if used name
102
   if used name
103
    .size = $-name
103
    .size = $-name
104
   end if
104
   end if
105
}
105
}
106
 
106
 
107
 
107
 
108
 
108
 
109
; easy system call macro
109
; easy system call macro
110
macro mpack dest, hsrc, lsrc
110
macro mpack dest, hsrc, lsrc
111
{
111
{
112
  if (hsrc eqtype 0) & (lsrc eqtype 0)
112
  if (hsrc eqtype 0) & (lsrc eqtype 0)
113
    mov dest, (hsrc) shl 16 + lsrc
113
    mov dest, (hsrc) shl 16 + lsrc
114
  else
114
  else
115
    if (hsrc eqtype 0) & (~lsrc eqtype 0)
115
    if (hsrc eqtype 0) & (~lsrc eqtype 0)
116
      mov dest, (hsrc) shl 16
116
      mov dest, (hsrc) shl 16
117
      add dest, lsrc
117
      add dest, lsrc
118
    else
118
    else
119
      mov dest, hsrc
119
      mov dest, hsrc
120
      shl dest, 16
120
      shl dest, 16
121
      add dest, lsrc
121
      add dest, lsrc
122
    end if
122
    end if
123
  end if
123
  end if
124
}
124
}
125
 
125
 
126
macro __mov reg,a {         ; mike.dld
126
macro __mov reg,a {         ; mike.dld
127
 if ~a eq
127
 if ~a eq
128
   mov reg,a
128
   mov reg,a
129
 end if
129
 end if
130
}
130
}
131
 
131
 
132
__CPU_type	equ	p5
132
__CPU_type      equ     p6
133
SYSENTER_VAR	equ	0
133
SYSENTER_VAR    equ     0
134
 
134
 
135
macro mcall a,b,c,d,e,f {   ; mike.dld, updated by Ghost for Fast System Calls
135
macro mcall a,b,c,d,e,f {   ; mike.dld, updated by Ghost for Fast System Calls
136
 local	..ret_point
136
 local  ..ret_point
137
 __mov eax,a
137
 __mov eax,a
138
 __mov ebx,b
138
 __mov ebx,b
139
 __mov ecx,c
139
 __mov ecx,c
140
 __mov edx,d
140
 __mov edx,d
141
 __mov esi,e
141
 __mov esi,e
142
 __mov edi,f
142
 __mov edi,f
143
 
143
 
144
 if __CPU_type eq p5
144
 if __CPU_type eq p5
145
	int	0x40
145
        int     0x40
146
 else
146
 else
147
  if __CPU_type eq p6
147
  if __CPU_type eq p6
148
	push	ebp
148
        push    ebp
149
	mov	ebp, esp
149
        mov     ebp, esp
150
	push	..ret_point	; it may be 2 or 5 byte
150
        push    ..ret_point     ; it may be 2 or 5 byte
151
	sysenter
151
        sysenter
152
 ..ret_point:
152
 ..ret_point:
153
	pop	edx
153
        pop     edx
154
	pop	ecx
154
        pop     ecx
155
 
155
 
156
  else
156
  else
157
   if __CPU_type eq k6
157
   if __CPU_type eq k6
158
	push	ecx
158
        push    ecx
159
	syscall
159
        syscall
160
	pop	ecx
160
        pop     ecx
161
   else
161
   else
162
	display 'ERROR : unknown CPU type'
162
        display 'ERROR : unknown CPU type'
163
	int	0x40
163
        int     0x40
164
   end if
164
   end if
165
  end if
165
  end if
166
 end if
166
 end if
167
}
167
}
168
 
168
 
169
 
169
 
170
; language for programs
170
; language for programs
171
lang fix ru ; ru en fr ge fi
171
lang fix ru ; ru en fr ge fi
172
 
172
 
173
 
173
 
174
 
174
 
175
; optimize the code for size
175
; optimize the code for size
176
__regs fix 
176
__regs fix 
177
 
177
 
178
macro add arg1,arg2
178
macro add arg1,arg2
179
 {
179
 {
180
   if (arg2 eqtype 0)
180
   if (arg2 eqtype 0)
181
      if (arg2) = 1
181
      if (arg2) = 1
182
         inc arg1
182
         inc arg1
183
      else
183
      else
184
         add arg1,arg2
184
         add arg1,arg2
185
      end if
185
      end if
186
   else
186
   else
187
      add arg1,arg2
187
      add arg1,arg2
188
   end if
188
   end if
189
 }
189
 }
190
 
190
 
191
macro sub arg1,arg2
191
macro sub arg1,arg2
192
 {
192
 {
193
   if (arg2 eqtype 0)
193
   if (arg2 eqtype 0)
194
      if (arg2) = 1
194
      if (arg2) = 1
195
         dec arg1
195
         dec arg1
196
      else
196
      else
197
         sub arg1,arg2
197
         sub arg1,arg2
198
      end if
198
      end if
199
   else
199
   else
200
      sub arg1,arg2
200
      sub arg1,arg2
201
   end if
201
   end if
202
 }
202
 }
203
 
203
 
204
macro mov arg1,arg2
204
macro mov arg1,arg2
205
 {
205
 {
206
   if (arg1 in __regs) & (arg2 eqtype 0)
206
   if (arg1 in __regs) & (arg2 eqtype 0)
207
      if (arg2) = 0
207
      if (arg2) = 0
208
         xor arg1,arg1
208
         xor arg1,arg1
209
      else if (arg2) = 1
209
      else if (arg2) = 1
210
         xor arg1,arg1
210
         xor arg1,arg1
211
         inc arg1
211
         inc arg1
212
      else if (arg2) = -1
212
      else if (arg2) = -1
213
         or  arg1,-1
213
         or  arg1,-1
214
      else if (arg2) > -128 & (arg2) < 128
214
      else if (arg2) > -128 & (arg2) < 128
215
         push arg2
215
         push arg2
216
         pop  arg1
216
         pop  arg1
217
      else
217
      else
218
         mov  arg1,arg2
218
         mov  arg1,arg2
219
      end if
219
      end if
220
   else
220
   else
221
      mov arg1,arg2
221
      mov arg1,arg2
222
   end if
222
   end if
223
 }
223
 }
224
 
224
 
225
 
225
 
226
macro struct name
226
macro struct name
227
 {
227
 {
228
  virtual at 0
228
  virtual at 0
229
   name name
229
   name name
230
   sizeof.#name = $ - name
230
   sizeof.#name = $ - name
231
  end virtual
231
  end virtual
232
 }
232
 }
233
 
233
 
234
; structures used in MeOS
234
; structures used in MeOS
235
struc process_information
235
struc process_information
236
 {
236
 {
237
  .cpu_usage               dd ?  ; +0
237
  .cpu_usage               dd ?  ; +0
238
  .window_stack_position   dw ?  ; +4
238
  .window_stack_position   dw ?  ; +4
239
  .window_stack_value      dw ?  ; +6
239
  .window_stack_value      dw ?  ; +6
240
  .not_used1               dw ?  ; +8
240
  .not_used1               dw ?  ; +8
241
  .process_name            rb 12 ; +10
241
  .process_name            rb 12 ; +10
242
  .memory_start            dd ?  ; +22
242
  .memory_start            dd ?  ; +22
243
  .used_memory             dd ?  ; +26
243
  .used_memory             dd ?  ; +26
244
  .PID                     dd ?  ; +30
244
  .PID                     dd ?  ; +30
245
  .x_start                 dd ?  ; +34
245
  .x_start                 dd ?  ; +34
246
  .y_start                 dd ?  ; +38
246
  .y_start                 dd ?  ; +38
247
  .x_size                  dd ?  ; +42
247
  .x_size                  dd ?  ; +42
248
  .y_size                  dd ?  ; +46
248
  .y_size                  dd ?  ; +46
249
  .slot_state              dw ?  ; +50
249
  .slot_state              dw ?  ; +50
250
  rb (1024-52)
250
  rb (1024-52)
251
 }
251
 }
252
struct process_information
252
struct process_information
253
 
253
 
254
struc system_colors
254
struc system_colors
255
 {
255
 {
256
  .frame            dd ?
256
  .frame            dd ?
257
  .grab             dd ?
257
  .grab             dd ?
258
  .grab_button      dd ?
258
  .grab_button      dd ?
259
  .grab_button_text dd ?
259
  .grab_button_text dd ?
260
  .grab_text        dd ?
260
  .grab_text        dd ?
261
  .work             dd ?
261
  .work             dd ?
262
  .work_button      dd ?
262
  .work_button      dd ?
263
  .work_button_text dd ?
263
  .work_button_text dd ?
264
  .work_text        dd ?
264
  .work_text        dd ?
265
  .work_graph       dd ?
265
  .work_graph       dd ?
266
 }
266
 }
267
struct system_colors
267
struct system_colors
268
 
268
 
269
 
269
 
270
; constants
270
; constants
271
 
271
 
272
; events
272
; events
273
EV_IDLE        = 0
273
EV_IDLE        = 0
274
EV_TIMER       = 0
274
EV_TIMER       = 0
275
EV_REDRAW      = 1
275
EV_REDRAW      = 1
276
EV_KEY         = 2
276
EV_KEY         = 2
277
EV_BUTTON      = 3
277
EV_BUTTON      = 3
278
EV_EXIT        = 4
278
EV_EXIT        = 4
279
EV_BACKGROUND  = 5
279
EV_BACKGROUND  = 5
280
EV_MOUSE       = 6
280
EV_MOUSE       = 6
281
EV_IPC         = 7
281
EV_IPC         = 7
282
EV_STACK       = 8
282
EV_STACK       = 8
283
 
283
 
284
; event mask bits for function 40
284
; event mask bits for function 40
285
EVM_REDRAW     =        1b
285
EVM_REDRAW     =        1b
286
EVM_KEY        =       10b
286
EVM_KEY        =       10b
287
EVM_BUTTON     =      100b
287
EVM_BUTTON     =      100b
288
EVM_EXIT       =     1000b
288
EVM_EXIT       =     1000b
289
EVM_BACKGROUND =    10000b
289
EVM_BACKGROUND =    10000b
290
EVM_MOUSE      =   100000b
290
EVM_MOUSE      =   100000b
291
EVM_IPC        =  1000000b
291
EVM_IPC        =  1000000b
292
EVM_STACK      = 10000000b
292
EVM_STACK      = 10000000b