Subversion Repositories Kolibri OS

Rev

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

Rev 438 Rev 444
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1
$Revision: 434 $
2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3
;;                                                              ;;
3
;;                                                              ;;
4
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
4
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
5
;; Distributed under terms of the GNU General Public License    ;;
5
;; Distributed under terms of the GNU General Public License    ;;
6
;;                                                              ;;
6
;;                                                              ;;
7
;;                                                              ;;
7
;;                                                              ;;
8
;;  MenuetOS process management, protected ring3                ;;
8
;;  MenuetOS process management, protected ring3                ;;
9
;;                                                              ;;
9
;;                                                              ;;
10
;;  Distributed under GPL. See file COPYING for details.        ;;
10
;;  Distributed under GPL. See file COPYING for details.        ;;
11
;;  Copyright 2003 Ville Turjanmaa                              ;;
11
;;  Copyright 2003 Ville Turjanmaa                              ;;
12
;;                                                              ;;
12
;;                                                              ;;
13
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
13
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
14
 
14
 
15
align 4
15
align 4
16
idtreg:
16
idtreg:
17
     dw   8*0x41-1
17
     dw   8*0x41-1
18
     dd   idts+8
18
     dd   idts+8
19
 
19
 
20
build_interrupt_table:
20
build_interrupt_table:
21
 
21
 
22
        mov    edi, idts+8
22
        mov    edi, idts+8
23
        mov    esi, sys_int
23
        mov    esi, sys_int
24
        mov    ecx, 0x40
24
        mov    ecx, 0x40
25
     @@:
25
     @@:
26
        lodsd
26
        lodsd
27
        mov    [edi],   ax           ; lower part of offset
27
        mov    [edi],   ax           ; lower part of offset
28
        mov    [edi+2], word os_code ; segment selector
28
        mov    [edi+2], word os_code ; segment selector
29
        mov     ax, word 10001110b shl 8        ; type: interrupt gate
29
        mov     ax, word 10001110b shl 8        ; type: interrupt gate
30
        mov     [edi+4], eax
30
        mov     [edi+4], eax
31
        add    edi, 8
31
        add    edi, 8
32
        loop    @b
32
        loop    @b
33
 
33
 
34
        ;mov    edi,8*0x40+idts+8
34
        ;mov    edi,8*0x40+idts+8
35
        mov     dword [edi], (i40 and 0xFFFF) or (os_code shl 16)
35
        mov     dword [edi], (i40 and 0xFFFF) or (os_code shl 16)
36
        mov     dword [edi+4], (11101111b shl 8) or (i40 and 0xFFFF0000)
36
        mov     dword [edi+4], (11101111b shl 8) or (i40 and 0xFFFF0000)
37
                                                ; type: trap gate
37
                                                ; type: trap gate
38
        ret
38
        ret
39
 
39
 
40
iglobal
40
iglobal
41
  sys_int:
41
  sys_int:
42
    dd e0,debug_exc,e2,e3
42
    dd e0,debug_exc,e2,e3
43
    dd e4,e5,e6,e7
43
    dd e4,e5,e6,e7
44
    dd e8,e9,e10,e11
44
    dd e8,e9,e10,e11
45
    dd e12,e13,page_fault_handler,e15
45
    dd e12,e13,page_fault_handler,e15
46
 
46
 
47
    dd except_16, e17,e18, except_19
47
    dd except_16, e17,e18, except_19
48
    times 12 dd unknown_interrupt
48
    times 12 dd unknown_interrupt
49
 
49
 
50
    dd   irq0  , irq_serv.irq_1, p_irq2 , p_irq3     ;irq_serv.irq_3
50
    dd   irq0  , irq_serv.irq_1, p_irq2 , p_irq3     ;irq_serv.irq_3
51
    dd   irq_serv.irq_4 ,irq_serv.irq_5,p_irq6,irq_serv.irq_7
51
    dd   irq_serv.irq_4 ,irq_serv.irq_5,p_irq6,irq_serv.irq_7
52
    dd   irq_serv.irq_8, irq_serv.irq_9, irq_serv.irq_10
52
    dd   irq_serv.irq_8, irq_serv.irq_9, irq_serv.irq_10
53
    dd   irq_serv.irq_11,p_irq12,irqD ,p_irq14,p_irq15
53
    dd   irq_serv.irq_11,p_irq12,irqD ,p_irq14,p_irq15
54
 
54
 
55
    times 16 dd unknown_interrupt
55
    times 16 dd unknown_interrupt
56
 
56
 
57
    dd   i40
57
    dd   i40
58
endg
58
endg
59
 
59
 
60
macro save_ring3_context
60
macro save_ring3_context
61
{
61
{
62
    pushad
62
    pushad
63
}
63
}
64
macro restore_ring3_context
64
macro restore_ring3_context
65
{
65
{
66
    popad
66
    popad
67
}
67
}
68
 
68
 
69
; simply return control to interrupted process
69
; simply return control to interrupted process
70
unknown_interrupt:
70
unknown_interrupt:
71
     iret
71
     iret
72
 
72
 
73
macro exc_wo_code [num]
73
macro exc_wo_code [num]
74
{
74
{
75
  forward
75
  forward
76
  e#num :
76
  e#num :
77
      save_ring3_context
77
      save_ring3_context
78
      mov bl, num
78
      mov bl, num
79
      jmp exc_c
79
      jmp exc_c
80
}
80
}
81
 
81
 
82
macro exc_w_code [num]
82
macro exc_w_code [num]
83
{
83
{
84
  forward
84
  forward
85
  e#num :
85
  e#num :
86
      add esp, 4
86
      add esp, 4
87
      save_ring3_context
87
      save_ring3_context
88
      mov bl, num
88
      mov bl, num
89
      jmp exc_c
89
      jmp exc_c
90
}
90
}
91
 
91
 
92
exc_wo_code 0, 1, 2, 3, 4, 5, 6, 9, 15, 18
92
exc_wo_code 0, 1, 2, 3, 4, 5, 6, 9, 15, 18
93
exc_w_code 8, 10, 11, 12, 13, 14, 17
93
exc_w_code 8, 10, 11, 12, 13, 14, 17
94
 
94
 
95
exc_c:
95
exc_c:
96
        mov   ax, app_data  ;èñêëþ÷åíèå
96
        mov   ax, app_data  ;èñêëþ÷åíèå
97
        mov   ds, ax        ;çàãðóçèì ïðàâèëüíûå çíà÷åíè
97
        mov   ds, ax        ;çàãðóçèì ïðàâèëüíûå çíà÷åíè
98
        mov   es, ax        ;â ðåãèñòðû
98
        mov   es, ax        ;â ðåãèñòðû
99
 
99
 
100
; test if debugging
100
; test if debugging
101
        cli
101
        cli
102
        mov   eax, [current_slot]
102
        mov   eax, [current_slot]
103
        mov   eax, [eax+APPDATA.debugger_slot]
103
        mov   eax, [eax+APPDATA.debugger_slot]
104
        test  eax, eax
104
        test  eax, eax
105
        jnz   .debug
105
        jnz   .debug
106
        sti
106
        sti
107
; not debuggee => say error and terminate
107
; not debuggee => say error and terminate
108
        add   esp, 0x20  ;28h
108
        add   esp, 0x20  ;28h
109
        movzx eax, bl
109
        movzx eax, bl
110
        mov   [error_interrupt], eax
110
        mov   [error_interrupt], eax
111
        call  show_error_parameters
111
        call  show_error_parameters
112
 
112
 
113
        mov   edx, [TASK_BASE]
113
        mov   edx, [TASK_BASE]
114
        mov   [edx + TASKDATA.state], byte 4
114
        mov   [edx + TASKDATA.state], byte 4
115
 
115
 
116
        jmp   change_task
116
        jmp   change_task
117
 
117
 
118
.debug:
118
.debug:
119
; we are debugged process, notify debugger and suspend ourself
119
; we are debugged process, notify debugger and suspend ourself
120
; eax=debugger PID
120
; eax=debugger PID
121
        cld
121
        cld
122
        movzx ecx, bl
122
        movzx ecx, bl
123
        push  ecx
123
        push  ecx
124
        mov   ecx, [TASK_BASE]
124
        mov   ecx, [TASK_BASE]
125
        push  dword [ecx+TASKDATA.pid]    ; PID of current process
125
        push  dword [ecx+TASKDATA.pid]    ; PID of current process
126
        push  12
126
        push  12
127
        pop   ecx
127
        pop   ecx
128
        push  1        ; 1=exception
128
        push  1        ; 1=exception
129
        call  debugger_notify
129
        call  debugger_notify
130
        pop   ecx
130
        pop   ecx
131
        pop   ecx
131
        pop   ecx
132
        pop   ecx
132
        pop   ecx
133
        mov   edx, [TASK_BASE]
133
        mov   edx, [TASK_BASE]
134
        mov   byte [edx+TASKDATA.state], 1        ; suspended
134
        mov   byte [edx+TASKDATA.state], 1        ; suspended
135
        call  change_task
135
        call  change_task
136
        restore_ring3_context
136
        restore_ring3_context
137
        iretd
137
        iretd
138
 
138
 
139
writehex:
139
writehex:
140
      pusha
140
      pusha
141
 
141
 
142
      mov  edi, [write_error_to]
142
      mov  edi, [write_error_to]
143
      mov  esi, 8
143
      mov  esi, 8
144
    @@:
144
    @@:
145
      mov  ecx, eax
145
      mov  ecx, eax
146
      and  ecx, 0xf
146
      and  ecx, 0xf
147
 
147
 
148
      mov  cl,[ecx+hexletters]
148
      mov  cl,[ecx+hexletters]
149
      mov  [edi],cl
149
      mov  [edi],cl
150
      dec  edi
150
      dec  edi
151
 
151
 
152
      shr  eax,4
152
      shr  eax,4
153
      dec  esi
153
      dec  esi
154
      jnz  @b
154
      jnz  @b
155
 
155
 
156
      popa
156
      popa
157
      ret
157
      ret
158
 
158
 
159
iglobal
159
iglobal
160
  hexletters  db '0123456789ABCDEF'
160
  hexletters  db '0123456789ABCDEF'
161
 
161
 
162
  error_interrupt         dd  -1
162
  error_interrupt         dd  -1
163
 
163
 
164
  process_error  db 'K : Process - forced terminate INT: 00000000',13,10,0
164
  process_error  db 'K : Process - forced terminate INT: 00000000',13,10,0
165
  process_pid    db 'K : Process - forced terminate PID: 00000000',13,10,0
165
  process_pid    db 'K : Process - forced terminate PID: 00000000',13,10,0
166
  process_eip    db 'K : Process - forced terminate EIP: 00000000',13,10,0
166
  process_eip    db 'K : Process - forced terminate EIP: 00000000',13,10,0
167
  system_error   db 'K : Kernel error',13,10,0
167
  system_error   db 'K : Kernel error',13,10,0
168
endg
168
endg
169
 
169
 
170
uglobal
170
uglobal
171
  write_error_to  dd  0x0
171
  write_error_to  dd  0x0
172
endg
172
endg
173
 
173
 
174
show_error_parameters:
174
show_error_parameters:
175
 
175
 
176
        mov    [write_error_to],process_pid+43
176
        mov    [write_error_to],process_pid+43
177
        mov    eax,[CURRENT_TASK]
177
        mov    eax,[CURRENT_TASK]
178
        shl    eax, 5
178
        shl    eax, 5
179
        mov    eax,[CURRENT_TASK+TASKDATA.pid+eax]
179
        mov    eax,[CURRENT_TASK+TASKDATA.pid+eax]
180
        call   writehex
180
        call   writehex
181
 
181
 
182
        mov    [write_error_to],process_error+43
182
        mov    [write_error_to],process_error+43
183
        mov    eax,[error_interrupt]
183
        mov    eax,[error_interrupt]
184
        call   writehex
184
        call   writehex
185
 
185
 
186
        cmp    dword [esp+4+4], os_code ; CS
186
        cmp    dword [esp+4+4], os_code ; CS
187
        jnz    @f
187
        jnz    @f
188
        mov    esi,system_error
188
        mov    esi,system_error
189
        call   sys_msg_board_str
189
        call   sys_msg_board_str
190
      @@:
190
      @@:
191
        mov    eax, [esp+4] ; EIP
191
        mov    eax, [esp+4] ; EIP
192
 
192
 
193
        mov    [write_error_to],process_eip+43
193
        mov    [write_error_to],process_eip+43
194
        call   writehex
194
        call   writehex
195
 
195
 
196
        mov    esi,process_error
196
        mov    esi,process_error
197
        call   sys_msg_board_str
197
        call   sys_msg_board_str
198
 
198
 
199
        mov    esi,process_pid
199
        mov    esi,process_pid
200
        call   sys_msg_board_str
200
        call   sys_msg_board_str
201
 
201
 
202
        mov    esi,process_eip
202
        mov    esi,process_eip
203
        call   sys_msg_board_str
203
        call   sys_msg_board_str
204
 
204
 
205
        ret
205
        ret
206
 
206
 
207
 
207
 
208
 
208
 
209
; irq1  ->  hid/keyboard.inc
209
; irq1  ->  hid/keyboard.inc
210
 
210
 
211
 
211
 
212
macro irqh [num]
212
macro irqh [num]
213
{
213
{
214
  forward
214
  forward
215
  p_irq#num :
215
  p_irq#num :
216
     save_ring3_context
216
     save_ring3_context
217
     mov   edi, num
217
     mov   edi, num
218
     jmp   irq_c
218
     jmp   irq_c
219
}
219
}
220
 
220
 
221
irqh 2,5,7,8,9,10,11
221
irqh 2,5,7,8,9,10,11
222
 
222
 
223
irq_c:
223
irq_c:
224
     mov   ax, app_data  ;os_data
224
     mov   ax, app_data  ;os_data
225
     mov   ds, ax
225
     mov   ds, ax
226
     mov   es, ax
226
     mov   es, ax
227
     call  irqhandler
227
     call  irqhandler
228
     restore_ring3_context
228
     restore_ring3_context
229
     iret
229
     iret
230
 
230
 
231
p_irq6:
231
p_irq6:
232
     save_ring3_context
232
     save_ring3_context
233
     mov   ax, app_data  ;os_data
233
     mov   ax, app_data  ;os_data
234
     mov   ds, ax
234
     mov   ds, ax
235
     mov   es, ax
235
     mov   es, ax
236
     call  fdc_irq
236
     call  fdc_irq
237
     call  ready_for_next_irq
237
     call  ready_for_next_irq
238
     restore_ring3_context
238
     restore_ring3_context
239
     iret
239
     iret
240
 
240
 
241
p_irq3:
241
p_irq3:
242
     save_ring3_context
242
     save_ring3_context
243
     mov   ax, app_data  ;os_data
243
     mov   ax, app_data  ;os_data
244
     mov   ds, ax
244
     mov   ds, ax
245
     mov   es, ax
245
     mov   es, ax
246
     cmp   [com2_mouse_detected],0
246
     cmp   [com2_mouse_detected],0
247
     je    old_irq3_handler
247
     je    old_irq3_handler
248
     call  check_mouse_data_com2
248
     call  check_mouse_data_com2
249
     jmp   p_irq3_1
249
     jmp   p_irq3_1
250
 old_irq3_handler:
250
 old_irq3_handler:
251
     mov   edi,3
251
     mov   edi,3
252
     call  irqhandler
252
     call  irqhandler
253
  p_irq3_1:
253
  p_irq3_1:
254
     restore_ring3_context
254
     restore_ring3_context
255
     iret
255
     iret
256
 
256
 
257
p_irq4:
257
p_irq4:
258
     save_ring3_context
258
     save_ring3_context
259
     mov   ax, app_data  ;os_data
259
     mov   ax, app_data  ;os_data
260
     mov   ds, ax
260
     mov   ds, ax
261
     mov   es, ax
261
     mov   es, ax
262
     cmp   [com1_mouse_detected],0
262
     cmp   [com1_mouse_detected],0
263
     je    old_irq4_handler
263
     je    old_irq4_handler
264
     call  check_mouse_data_com1
264
     call  check_mouse_data_com1
265
     jmp   p_irq4_1
265
     jmp   p_irq4_1
266
 old_irq4_handler:
266
 old_irq4_handler:
267
     mov   edi,4
267
     mov   edi,4
268
     call  irqhandler
268
     call  irqhandler
269
  p_irq4_1:
269
  p_irq4_1:
270
     restore_ring3_context
270
     restore_ring3_context
271
     iret
271
     iret
272
 
272
 
273
p_irq12:
273
p_irq12:
274
     save_ring3_context
274
     save_ring3_context
275
     mov   ax, app_data  ;os_data
275
     mov   ax, app_data  ;os_data
276
     mov   ds, ax
276
     mov   ds, ax
277
     mov   es, ax
277
     mov   es, ax
278
     call  check_mouse_data_ps2
278
     call  check_mouse_data_ps2
279
     restore_ring3_context
279
     restore_ring3_context
280
     iret
280
     iret
281
 
281
 
282
p_irq14:
282
p_irq14:
283
        save_ring3_context
283
        save_ring3_context
284
        mov     ax, app_data  ;os_data
284
        mov     ax, app_data  ;os_data
285
        mov     ds, ax
285
        mov     ds, ax
286
        mov     es, ax
286
        mov     es, ax
287
        call    [irq14_func]
287
        call    [irq14_func]
288
        call    ready_for_next_irq_1
288
        call    ready_for_next_irq_1
289
        restore_ring3_context
289
        restore_ring3_context
290
        iret
290
        iret
291
p_irq15:
291
p_irq15:
292
        save_ring3_context
292
        save_ring3_context
293
        mov     ax, app_data  ;os_data
293
        mov     ax, app_data  ;os_data
294
        mov     ds, ax
294
        mov     ds, ax
295
        mov     es, ax
295
        mov     es, ax
296
        call    [irq15_func]
296
        call    [irq15_func]
297
        call    ready_for_next_irq_1
297
        call    ready_for_next_irq_1
298
        restore_ring3_context
298
        restore_ring3_context
299
        iret
299
        iret
300
 
300
 
301
ready_for_next_irq:
301
ready_for_next_irq:
302
     mov    [check_idle_semaphore],5
302
     mov    [check_idle_semaphore],5
303
     mov   al, 0x20
303
     mov   al, 0x20
304
     out   0x20, al
304
     out   0x20, al
305
     ret
305
     ret
306
 
306
 
307
ready_for_next_irq_1:
307
ready_for_next_irq_1:
308
     mov    [check_idle_semaphore],5
308
     mov    [check_idle_semaphore],5
309
     mov   al, 0x20
309
     mov   al, 0x20
310
     out    0xa0,al
310
     out    0xa0,al
311
     out   0x20, al
311
     out   0x20, al
312
     ret
312
     ret
313
 
313
 
314
irqD:
314
irqD:
315
     save_ring3_context
315
     save_ring3_context
316
     mov   ax, app_data  ;os_data
316
     mov   ax, app_data  ;os_data
317
     mov   ds, ax
317
     mov   ds, ax
318
     mov   es, ax
318
     mov   es, ax
319
 
319
 
320
     mov   dx,0xf0
320
     mov   dx,0xf0
321
     mov   al,0
321
     mov   al,0
322
     out   dx,al
322
     out   dx,al
323
 
323
 
324
     mov   dx,0xa0
324
     mov   dx,0xa0
325
     mov   al,0x20
325
     mov   al,0x20
326
     out   dx,al
326
     out   dx,al
327
     mov   dx,0x20
327
     mov   dx,0x20
328
     out   dx,al
328
     out   dx,al
329
 
329
 
330
     restore_ring3_context
330
     restore_ring3_context
331
 
331
 
332
     iret
332
     iret
333
 
333
 
334
 
334
 
335
irqhandler:
335
irqhandler:
336
 
336
 
337
     push   edi
337
     push   edi
338
 
338
 
339
     mov    esi,edi          ; 1
339
     mov    esi,edi          ; 1
340
     shl    esi,6            ; 1
340
     shl    esi,6            ; 1
341
     add    esi,irq00read    ; 1
341
     add    esi,irq00read    ; 1
342
     shl    edi,12           ; 1
342
     shl    edi,12           ; 1
343
     add    edi,IRQ_SAVE
343
     add    edi,IRQ_SAVE
344
     mov    ecx,16
344
     mov    ecx,16
345
 
345
 
346
     mov    [check_idle_semaphore],5
346
     mov    [check_idle_semaphore],5
347
 
347
 
348
   irqnewread:
348
   irqnewread:
349
     dec    ecx
349
     dec    ecx
350
     js     irqover
350
     js     irqover
351
 
351
 
352
     mov    dx,[esi]         ; 2+
352
     mov    dx,[esi]         ; 2+
353
 
353
 
354
     cmp    dx,0             ; 1
354
     cmp    dx,0             ; 1
355
     jz     irqover
355
     jz     irqover
356
     cmp    [esi+3],byte 1   ; 2     ; byte read
356
     cmp    [esi+3],byte 1   ; 2     ; byte read
357
     jne    noirqbyte        ; 4-11
357
     jne    noirqbyte        ; 4-11
358
 
358
 
359
     in     al,dx
359
     in     al,dx
360
 
360
 
361
     mov    edx,[edi]
361
     mov    edx,[edi]
362
     cmp    edx,4000
362
     cmp    edx,4000
363
     je     irqfull
363
     je     irqfull
364
     mov    ebx,edi
364
     mov    ebx,edi
365
     add    ebx,0x10
365
     add    ebx,0x10
366
     add    ebx,edx
366
     add    ebx,edx
367
     mov    [ebx],al
367
     mov    [ebx],al
368
     inc    edx
368
     inc    edx
369
     mov    [edi],edx
369
     mov    [edi],edx
370
 
370
 
371
     add    esi,4
371
     add    esi,4
372
     jmp    irqnewread
372
     jmp    irqnewread
373
 
373
 
374
   noirqbyte:
374
   noirqbyte:
375
 
375
 
376
 
376
 
377
     cmp    [esi+3],byte 2     ; word read
377
     cmp    [esi+3],byte 2     ; word read
378
     jne    noirqword
378
     jne    noirqword
379
 
379
 
380
     in     ax,dx
380
     in     ax,dx
381
 
381
 
382
     mov    edx,[edi]
382
     mov    edx,[edi]
383
     cmp    edx,4000
383
     cmp    edx,4000
384
     je     irqfull
384
     je     irqfull
385
     mov    ebx,edi
385
     mov    ebx,edi
386
     add    ebx,0x10
386
     add    ebx,0x10
387
     add    ebx,edx
387
     add    ebx,edx
388
     mov    [ebx],ax
388
     mov    [ebx],ax
389
     add    edx,2
389
     add    edx,2
390
     mov    [edi],edx
390
     mov    [edi],edx
391
     add    esi,4
391
     add    esi,4
392
     jmp    irqnewread
392
     jmp    irqnewread
393
 
393
 
394
   noirqword:
394
   noirqword:
395
   irqfull:
395
   irqfull:
396
   irqover:
396
   irqover:
397
 
397
 
398
     mov    al,0x20            ; ready for next irq
398
     mov    al,0x20            ; ready for next irq
399
     out    0x20,al
399
     out    0x20,al
400
 
400
 
401
     pop    ebx
401
     pop    ebx
402
     cmp    ebx,7
402
     cmp    ebx,7
403
     jbe    noa0
403
     jbe    noa0
404
     out    0xa0,al
404
     out    0xa0,al
405
   noa0:
405
   noa0:
406
 
406
 
407
     ret
407
     ret
408
 
408
 
409
 
409
 
410
 
410
 
411
set_application_table_status:
411
set_application_table_status:
412
        push eax
412
        push eax
413
 
413
 
414
        mov  eax,[CURRENT_TASK]
414
        mov  eax,[CURRENT_TASK]
415
        shl  eax, 5
415
        shl  eax, 5
416
        add  eax,CURRENT_TASK+TASKDATA.pid
416
        add  eax,CURRENT_TASK+TASKDATA.pid
417
        mov  eax,[eax]
417
        mov  eax,[eax]
418
 
418
 
419
        mov  [application_table_status],eax
419
        mov  [application_table_status],eax
420
 
420
 
421
        pop  eax
421
        pop  eax
422
 
422
 
423
        ret
423
        ret
424
 
424
 
425
 
425
 
426
clear_application_table_status:
426
clear_application_table_status:
427
        push eax
427
        push eax
428
 
428
 
429
        mov  eax,[CURRENT_TASK]
429
        mov  eax,[CURRENT_TASK]
430
        shl  eax, 5
430
        shl  eax, 5
431
        add  eax,CURRENT_TASK+TASKDATA.pid
431
        add  eax,CURRENT_TASK+TASKDATA.pid
432
        mov  eax,[eax]
432
        mov  eax,[eax]
433
 
433
 
434
        cmp  eax,[application_table_status]
434
        cmp  eax,[application_table_status]
435
        jne  apptsl1
435
        jne  apptsl1
436
        mov  [application_table_status],0
436
        mov  [application_table_status],0
437
      apptsl1:
437
      apptsl1:
438
 
438
 
439
        pop  eax
439
        pop  eax
440
 
440
 
441
        ret
441
        ret
442
 
442
 
443
sys_resize_app_memory:
443
sys_resize_app_memory:
444
        ; eax = 1 - resize
444
        ; eax = 1 - resize
445
        ;     ebx = new amount of memory
445
        ;     ebx = new amount of memory
446
 
446
 
447
        cmp    eax,1
447
        cmp    eax,1
448
        jne    .no_application_mem_resize
448
        jne    .no_application_mem_resize
449
 
449
 
450
        stdcall new_mem_resize, ebx
450
        stdcall new_mem_resize, ebx
451
        mov [esp+36], eax
451
        mov [esp+36], eax
452
        ret
452
        ret
453
 
453
 
454
.no_application_mem_resize:
454
.no_application_mem_resize:
455
        ret
455
        ret
456
 
456
 
457
sys_threads:
457
sys_threads:
458
 
458
 
459
; eax=1 create thread
459
; eax=1 create thread
460
;
460
;
461
;   ebx=thread start
461
;   ebx=thread start
462
;   ecx=thread stack value
462
;   ecx=thread stack value
463
;
463
;
464
; on return : eax = pid
464
; on return : eax = pid
465
jmp new_sys_threads
465
jmp new_sys_threads
466
 
466
 
467
iglobal
467
iglobal
468
  process_terminating   db 'K : Process - terminating',13,10,0
468
  process_terminating   db 'K : Process - terminating',13,10,0
469
  process_terminated    db 'K : Process - done',13,10,0
469
  process_terminated    db 'K : Process - done',13,10,0
470
  msg_obj_destroy       db 'K : destroy app object',13,10,0
470
  msg_obj_destroy       db 'K : destroy app object',13,10,0
471
endg
471
endg
472
 
472
 
473
; param
473
; param
474
;  esi= slot
474
;  esi= slot
475
 
475
 
476
terminate: ; terminate application
476
terminate: ; terminate application
477
 
477
 
478
           .slot equ esp   ;locals
478
           .slot equ esp   ;locals
479
 
479
 
480
           push   esi      ;save .slot
480
           push   esi      ;save .slot
481
 
481
 
482
           shl esi, 8
482
           shl esi, 8
483
           cmp [SLOT_BASE+esi+APPDATA.dir_table], 0
483
           cmp [SLOT_BASE+esi+APPDATA.dir_table], 0
484
           jne @F
484
           jne @F
485
           add esp, 4
485
           add esp, 4
486
           ret
486
           ret
487
@@:
487
@@:
488
           mov    esi,process_terminating
488
           mov    esi,process_terminating
489
           call   sys_msg_board_str
489
           call   sys_msg_board_str
490
@@:
490
@@:
491
           cli
491
           cli
492
           cmp   [application_table_status],0
492
           cmp   [application_table_status],0
493
           je    term9
493
           je    term9
494
           sti
494
           sti
495
           call  change_task
495
           call  change_task
496
           jmp   @b
496
           jmp   @b
497
term9:
497
term9:
498
           call  set_application_table_status
498
           call  set_application_table_status
499
 
499
 
500
           mov esi, [.slot]
500
           mov esi, [.slot]
501
           shl esi,8
501
           shl esi,8
502
           add esi, SLOT_BASE+APP_OBJ_OFFSET
502
           add esi, SLOT_BASE+APP_OBJ_OFFSET
503
@@:
503
@@:
504
           mov eax, [esi+APPOBJ.fd]
504
           mov eax, [esi+APPOBJ.fd]
505
           test eax, eax
505
           test eax, eax
506
           jz @F
506
           jz @F
507
 
507
 
508
           cmp eax, esi
508
           cmp eax, esi
509
           je @F
509
           je @F
510
 
510
 
511
           push esi
511
           push esi
512
           call [eax+APPOBJ.destroy]
512
           call [eax+APPOBJ.destroy]
513
           mov  esi, msg_obj_destroy
513
           mov  esi, msg_obj_destroy
514
           call sys_msg_board_str
514
           call sys_msg_board_str
515
           pop esi
515
           pop esi
516
           jmp @B
516
           jmp @B
517
@@:
517
@@:
518
           mov eax, [.slot]
518
           mov eax, [.slot]
519
           shl eax, 8
519
           shl eax, 8
520
           mov eax,[SLOT_BASE+eax+APPDATA.dir_table]
520
           mov eax,[SLOT_BASE+eax+APPDATA.dir_table]
521
           stdcall destroy_app_space, eax
521
           stdcall destroy_app_space, eax
522
 
522
 
523
           mov esi, [.slot]
523
           mov esi, [.slot]
524
           cmp [fpu_owner],esi   ; if user fpu last -> fpu user = 1
524
           cmp [fpu_owner],esi   ; if user fpu last -> fpu user = 1
525
           jne @F
525
           jne @F
526
 
526
 
527
           mov [fpu_owner],1
527
           mov [fpu_owner],1
528
           mov eax, [256+SLOT_BASE+APPDATA.fpu_state]
528
           mov eax, [256+SLOT_BASE+APPDATA.fpu_state]
529
           clts
529
           clts
530
           bt [cpu_caps], CAPS_SSE
530
           bt [cpu_caps], CAPS_SSE
531
           jnc .no_SSE
531
           jnc .no_SSE
532
           fxrstor [eax]
532
           fxrstor [eax]
533
           jmp @F
533
           jmp @F
534
.no_SSE:
534
.no_SSE:
535
           fnclex
535
           fnclex
536
           frstor [eax]
536
           frstor [eax]
537
@@:
537
@@:
538
 
538
 
539
    mov   [KEY_COUNT],byte 0           ; empty keyboard buffer
539
    mov   [KEY_COUNT],byte 0           ; empty keyboard buffer
540
    mov   [BTN_COUNT],byte 0           ; empty button buffer
540
    mov   [BTN_COUNT],byte 0           ; empty button buffer
541
 
541
 
542
 
542
 
543
; remove defined hotkeys
543
; remove defined hotkeys
544
        mov     eax, hotkey_list
544
        mov     eax, hotkey_list
545
.loop:
545
.loop:
546
        cmp     [eax+8], esi
546
        cmp     [eax+8], esi
547
        jnz     .cont
547
        jnz     .cont
548
        mov     ecx, [eax]
548
        mov     ecx, [eax]
549
        jecxz   @f
549
        jecxz   @f
550
        push    dword [eax+12]
550
        push    dword [eax+12]
551
        pop     dword [ecx+12]
551
        pop     dword [ecx+12]
552
@@:
552
@@:
553
        mov     ecx, [eax+12]
553
        mov     ecx, [eax+12]
554
        push    dword [eax]
554
        push    dword [eax]
555
        pop     dword [ecx]
555
        pop     dword [ecx]
556
        xor     ecx, ecx
556
        xor     ecx, ecx
557
        mov     [eax], ecx
557
        mov     [eax], ecx
558
        mov     [eax+4], ecx
558
        mov     [eax+4], ecx
559
        mov     [eax+8], ecx
559
        mov     [eax+8], ecx
560
        mov     [eax+12], ecx
560
        mov     [eax+12], ecx
561
.cont:
561
.cont:
562
        add     eax, 16
562
        add     eax, 16
563
        cmp     eax, hotkey_list+256*16
563
        cmp     eax, hotkey_list+256*16
564
        jb      .loop
564
        jb      .loop
565
; remove hotkeys in buffer
565
; remove hotkeys in buffer
566
        mov     eax, hotkey_buffer
566
        mov     eax, hotkey_buffer
567
.loop2:
567
.loop2:
568
        cmp     [eax], esi
568
        cmp     [eax], esi
569
        jnz     .cont2
569
        jnz     .cont2
570
        and     dword [eax+4], 0
570
        and     dword [eax+4], 0
571
        and     dword [eax], 0
571
        and     dword [eax], 0
572
.cont2:
572
.cont2:
573
        add     eax, 8
573
        add     eax, 8
574
        cmp     eax, hotkey_buffer+120*8
574
        cmp     eax, hotkey_buffer+120*8
575
        jb      .loop2
575
        jb      .loop2
576
 
576
 
577
    mov   ecx,esi                 ; remove buttons
577
    mov   ecx,esi                 ; remove buttons
578
  bnewba2:
578
  bnewba2:
579
    mov   edi,[BTN_ADDR]
579
    mov   edi,[BTN_ADDR]
580
    mov   eax,edi
580
    mov   eax,edi
581
    cld
581
    cld
582
    movzx ebx,word [edi]
582
    movzx ebx,word [edi]
583
    inc   bx
583
    inc   bx
584
  bnewba:
584
  bnewba:
585
    dec   bx
585
    dec   bx
586
    jz    bnmba
586
    jz    bnmba
587
    add   eax,0x10
587
    add   eax,0x10
588
    cmp   cx,[eax]
588
    cmp   cx,[eax]
589
    jnz   bnewba
589
    jnz   bnewba
590
    pusha
590
    pusha
591
    mov   ecx,ebx
591
    mov   ecx,ebx
592
    inc   ecx
592
    inc   ecx
593
    shl   ecx,4
593
    shl   ecx,4
594
    mov   ebx,eax
594
    mov   ebx,eax
595
    add   eax,0x10
595
    add   eax,0x10
596
    call  memmove
596
    call  memmove
597
    dec   dword [edi]
597
    dec   dword [edi]
598
    popa
598
    popa
599
    jmp   bnewba2
599
    jmp   bnewba2
600
  bnmba:
600
  bnmba:
601
 
601
 
602
    pusha     ; save window coordinates for window restoring
602
    pusha     ; save window coordinates for window restoring
603
    cld
603
    cld
604
    shl   esi,5
604
    shl   esi,5
605
    add   esi,window_data
605
    add   esi,window_data
606
    mov   eax,[esi+WDATA.box.left]
606
    mov   eax,[esi+WDATA.box.left]
607
    mov   [dlx],eax
607
    mov   [dlx],eax
608
    add   eax,[esi+WDATA.box.width]
608
    add   eax,[esi+WDATA.box.width]
609
    mov   [dlxe],eax
609
    mov   [dlxe],eax
610
    mov   eax,[esi+WDATA.box.top]
610
    mov   eax,[esi+WDATA.box.top]
611
    mov   [dly],eax
611
    mov   [dly],eax
612
    add   eax,[esi+WDATA.box.height]
612
    add   eax,[esi+WDATA.box.height]
613
    mov   [dlye],eax
613
    mov   [dlye],eax
614
 
614
 
615
    xor   eax, eax
615
    xor   eax, eax
616
    mov   [esi+WDATA.box.left],eax
616
    mov   [esi+WDATA.box.left],eax
617
    mov   [esi+WDATA.box.width],eax
617
    mov   [esi+WDATA.box.width],eax
618
    mov   [esi+WDATA.box.top],eax
618
    mov   [esi+WDATA.box.top],eax
619
    mov   [esi+WDATA.box.height],eax
619
    mov   [esi+WDATA.box.height],eax
620
    mov   [esi+WDATA.cl_workarea],eax
620
    mov   [esi+WDATA.cl_workarea],eax
621
    mov   [esi+WDATA.cl_titlebar],eax
621
    mov   [esi+WDATA.cl_titlebar],eax
622
    mov   [esi+WDATA.cl_frames],eax
622
    mov   [esi+WDATA.cl_frames],eax
623
    mov   dword [esi+WDATA.reserved],eax ; clear all flags: wstate, redraw, wdrawn
623
    mov   dword [esi+WDATA.reserved],eax ; clear all flags: wstate, redraw, wdrawn
624
    lea   edi, [esi-window_data+draw_data]
624
    lea   edi, [esi-window_data+draw_data]
625
    mov   ecx,32/4
625
    mov   ecx,32/4
626
    rep   stosd
626
    rep   stosd
627
    popa
627
    popa
628
 
628
 
629
; debuggee test
629
; debuggee test
630
    pushad
630
    pushad
631
    mov  edi, esi
631
    mov  edi, esi
632
    shl  edi, 5
632
    shl  edi, 5
633
    mov  eax, [SLOT_BASE+edi*8+APPDATA.debugger_slot]
633
    mov  eax, [SLOT_BASE+edi*8+APPDATA.debugger_slot]
634
    test eax, eax
634
    test eax, eax
635
    jz   .nodebug
635
    jz   .nodebug
636
    push 8
636
    push 8
637
    pop  ecx
637
    pop  ecx
638
    push dword [CURRENT_TASK+edi+TASKDATA.pid]   ; PID
638
    push dword [CURRENT_TASK+edi+TASKDATA.pid]   ; PID
639
    push 2
639
    push 2
640
    call debugger_notify
640
    call debugger_notify
641
    pop  ecx
641
    pop  ecx
642
    pop  ecx
642
    pop  ecx
643
.nodebug:
643
.nodebug:
644
    popad
644
    popad
645
 
645
 
646
           mov ebx, [.slot]
646
           mov ebx, [.slot]
647
           shl ebx, 8
647
           shl ebx, 8
648
           mov ebx,[SLOT_BASE+ebx+APPDATA.pl0_stack]
648
           mov ebx,[SLOT_BASE+ebx+APPDATA.pl0_stack]
649
 
649
 
650
           stdcall kernel_free, ebx
650
           stdcall kernel_free, ebx
651
 
651
 
652
           mov edi, [.slot]
652
           mov edi, [.slot]
653
           shl edi,8
653
           shl edi,8
654
           add edi,SLOT_BASE
654
           add edi,SLOT_BASE
655
 
655
 
656
           mov eax, [edi+APPDATA.io_map]
656
           mov eax, [edi+APPDATA.io_map]
657
           cmp eax, (tss._io_map_0-OS_BASE+PG_MAP)
657
           cmp eax, (tss._io_map_0-OS_BASE+PG_MAP)
658
           je @F
658
           je @F
659
           call free_page
659
           call free_page
660
@@:
660
@@:
661
           mov eax, [edi+APPDATA.io_map+4]
661
           mov eax, [edi+APPDATA.io_map+4]
662
           cmp eax, (tss._io_map_1-OS_BASE+PG_MAP)
662
           cmp eax, (tss._io_map_1-OS_BASE+PG_MAP)
663
           je @F
663
           je @F
664
           call free_page
664
           call free_page
665
@@:
665
@@:
666
           mov eax, 0x20202020
666
           mov eax, 0x20202020
667
           stosd
667
           stosd
668
           stosd
668
           stosd
669
           stosd
669
           stosd
670
           mov ecx,244/4
670
           mov ecx,244/4
671
           xor eax, eax
671
           xor eax, eax
672
           rep stosd
672
           rep stosd
673
 
673
 
674
  ; activate window
674
  ; activate window
675
        movzx  eax, word [WIN_STACK + esi*2]
675
        movzx  eax, word [WIN_STACK + esi*2]
676
        cmp    eax, [TASK_COUNT]
676
        cmp    eax, [TASK_COUNT]
677
        jne    .dont_activate
677
        jne    .dont_activate
678
        pushad
678
        pushad
679
 .check_next_window:
679
 .check_next_window:
680
        dec    eax
680
        dec    eax
681
        cmp    eax, 1
681
        cmp    eax, 1
682
        jbe    .nothing_to_activate
682
        jbe    .nothing_to_activate
683
        lea    esi, [WIN_POS+eax*2]
683
        lea    esi, [WIN_POS+eax*2]
684
        movzx  edi, word [esi]               ; edi = process
684
        movzx  edi, word [esi]               ; edi = process
685
        shl    edi, 5
685
        shl    edi, 5
686
        cmp    [CURRENT_TASK + edi + TASKDATA.state], byte 9  ; skip dead slots
686
        cmp    [CURRENT_TASK + edi + TASKDATA.state], byte 9  ; skip dead slots
687
        je     .check_next_window
687
        je     .check_next_window
688
        add    edi, window_data
688
        add    edi, window_data
689
; \begin{diamond}[19.09.2006]
689
; \begin{diamond}[19.09.2006]
690
; skip minimized windows
690
; skip minimized windows
691
        test   [edi + WDATA.fl_wstate], WSTATE_MINIMIZED
691
        test   [edi + WDATA.fl_wstate], WSTATE_MINIMIZED
692
        jnz    .check_next_window
692
        jnz    .check_next_window
693
; \end{diamond}
693
; \end{diamond}
694
        call   waredraw
694
        call   waredraw
695
 .nothing_to_activate:
695
 .nothing_to_activate:
696
        popad
696
        popad
697
 .dont_activate:
697
 .dont_activate:
698
 
698
 
699
        push    esi     ; remove hd1 & cd & flp reservation
699
        push    esi     ; remove hd1 & cd & flp reservation
700
        shl     esi, 5
700
        shl     esi, 5
701
        mov     esi, [esi+CURRENT_TASK+TASKDATA.pid]
701
        mov     esi, [esi+CURRENT_TASK+TASKDATA.pid]
702
        cmp     [hd1_status], esi
702
        cmp     [hd1_status], esi
703
        jnz     @f
703
        jnz     @f
704
        call    free_hd_channel
704
        call    free_hd_channel
705
        mov     [hd1_status], 0
705
        mov     [hd1_status], 0
706
@@:
706
@@:
707
        cmp     [cd_status], esi
707
        cmp     [cd_status], esi
708
        jnz     @f
708
        jnz     @f
709
        call    free_cd_channel
709
        call    free_cd_channel
710
        mov     [cd_status], 0
710
        mov     [cd_status], 0
711
@@:
711
@@:
712
        cmp     [flp_status], esi
712
        cmp     [flp_status], esi
713
        jnz     @f
713
        jnz     @f
714
        mov     [flp_status], 0
714
        mov     [flp_status], 0
715
@@:
715
@@:
716
        pop     esi
716
        pop     esi
717
 
717
 
718
    pusha ; remove all irq reservations
718
    pusha ; remove all irq reservations
719
    mov   eax,esi
719
    mov   eax,esi
720
    shl   eax, 5
720
    shl   eax, 5
721
    mov   eax,[eax+CURRENT_TASK+TASKDATA.pid]
721
    mov   eax,[eax+CURRENT_TASK+TASKDATA.pid]
722
    mov   edi,irq_owner
722
    mov   edi,irq_owner
723
    mov   ecx,16
723
    mov   ecx,16
724
  newirqfree:
724
  newirqfree:
725
    scasd
725
    scasd
726
    jne   nofreeirq
726
    jne   nofreeirq
727
    mov   [edi-4],dword 0
727
    mov   [edi-4],dword 0
728
  nofreeirq:
728
  nofreeirq:
729
    loop   newirqfree
729
    loop   newirqfree
730
    popa
730
    popa
731
 
731
 
732
    pusha                     ; remove all port reservations
732
    pusha                     ; remove all port reservations
733
    mov   edx,esi
733
    mov   edx,esi
734
    shl   edx, 5
734
    shl   edx, 5
735
    add   edx,CURRENT_TASK
735
    add   edx,CURRENT_TASK
736
    mov   edx,[edx+TASKDATA.pid]
736
    mov   edx,[edx+TASKDATA.pid]
737
 
737
 
738
  rmpr0:
738
  rmpr0:
739
 
739
 
740
    mov   esi,[RESERVED_PORTS]
740
    mov   esi,[RESERVED_PORTS]
741
 
741
 
742
    cmp   esi,0
742
    cmp   esi,0
743
    je    rmpr9
743
    je    rmpr9
744
 
744
 
745
  rmpr3:
745
  rmpr3:
746
 
746
 
747
    mov   edi,esi
747
    mov   edi,esi
748
    shl   edi,4
748
    shl   edi,4
749
    add   edi,RESERVED_PORTS
749
    add   edi,RESERVED_PORTS
750
 
750
 
751
    cmp   edx,[edi]
751
    cmp   edx,[edi]
752
    je    rmpr4
752
    je    rmpr4
753
 
753
 
754
    dec   esi
754
    dec   esi
755
    jnz   rmpr3
755
    jnz   rmpr3
756
 
756
 
757
    jmp   rmpr9
757
    jmp   rmpr9
758
 
758
 
759
  rmpr4:
759
  rmpr4:
760
 
760
 
761
    mov   ecx,256
761
    mov   ecx,256
762
    sub   ecx,esi
762
    sub   ecx,esi
763
    shl   ecx,4
763
    shl   ecx,4
764
 
764
 
765
    mov   esi,edi
765
    mov   esi,edi
766
    add   esi,16
766
    add   esi,16
767
    cld
767
    cld
768
    rep   movsb
768
    rep   movsb
769
 
769
 
770
    dec   dword [RESERVED_PORTS]
770
    dec   dword [RESERVED_PORTS]
771
 
771
 
772
    jmp   rmpr0
772
    jmp   rmpr0
773
 
773
 
774
  rmpr9:
774
  rmpr9:
775
 
775
 
776
    popa
776
    popa
777
    mov  edi,esi         ; do not run this process slot
777
    mov  edi,esi         ; do not run this process slot
778
    shl  edi, 5
778
    shl  edi, 5
779
    mov  [edi+CURRENT_TASK + TASKDATA.state],byte 9
779
    mov  [edi+CURRENT_TASK + TASKDATA.state],byte 9
780
; debugger test - terminate all debuggees
780
; debugger test - terminate all debuggees
781
    mov  eax, 2
781
    mov  eax, 2
782
    mov  ecx, SLOT_BASE+2*0x100+APPDATA.debugger_slot
782
    mov  ecx, SLOT_BASE+2*0x100+APPDATA.debugger_slot
783
.xd0:
783
.xd0:
784
    cmp  eax, [TASK_COUNT]
784
    cmp  eax, [TASK_COUNT]
785
    ja   .xd1
785
    ja   .xd1
786
    cmp  dword [ecx], esi
786
    cmp  dword [ecx], esi
787
    jnz  @f
787
    jnz  @f
788
    and  dword [ecx], 0
788
    and  dword [ecx], 0
789
    pushad
789
    pushad
790
    xchg eax, ebx
790
    xchg eax, ebx
791
    mov  eax, 2
791
    mov  eax, 2
792
    call sys_system
792
    call sys_system
793
    popad
793
    popad
794
@@:
794
@@:
795
    inc  eax
795
    inc  eax
796
    add  ecx, 0x100
796
    add  ecx, 0x100
797
    jmp  .xd0
797
    jmp  .xd0
798
.xd1:
798
.xd1:
799
;    call  systest
799
;    call  systest
800
    sti  ; .. and life goes on
800
    sti  ; .. and life goes on
801
 
801
 
802
    mov   eax, [dlx]
802
    mov   eax, [dlx]
803
    mov   ebx, [dly]
803
    mov   ebx, [dly]
804
    mov   ecx, [dlxe]
804
    mov   ecx, [dlxe]
805
    mov   edx, [dlye]
805
    mov   edx, [dlye]
806
    call  calculatescreen
806
    call  calculatescreen
807
    xor   eax, eax
807
    xor   eax, eax
808
    xor   esi, esi
808
    xor   esi, esi
809
    call  redrawscreen
809
    call  redrawscreen
810
 
810
 
811
    mov   [MOUSE_BACKGROUND],byte 0  ; no mouse background
811
    mov   [MOUSE_BACKGROUND],byte 0  ; no mouse background
812
    mov   [DONT_DRAW_MOUSE],byte 0  ; draw mouse
812
    mov   [DONT_DRAW_MOUSE],byte 0  ; draw mouse
813
 
813
 
814
    mov   [application_table_status],0
814
    mov   [application_table_status],0
815
    mov   esi,process_terminated
815
    mov   esi,process_terminated
816
    call  sys_msg_board_str
816
    call  sys_msg_board_str
817
    add esp, 4
817
    add esp, 4
818
    ret
818
    ret
819
restore .slot
819
restore .slot
820
 
820
 
821
iglobal
821
iglobal
822
  boot_sched_1    db   'Building gdt tss pointer',0
822
  boot_sched_1    db   'Building gdt tss pointer',0
823
  boot_sched_2    db   'Building IDT table',0
823
  boot_sched_2    db   'Building IDT table',0
824
endg
824
endg
825
 
825
 
826
 
826
 
827
build_scheduler:
827
build_scheduler:
828
 
828
 
829
        mov    esi,boot_sched_1
829
        mov    esi,boot_sched_1
830
        call   boot_log
830
        call   boot_log
831
  ;      call   build_process_gdt_tss_pointer
831
  ;      call   build_process_gdt_tss_pointer
832
 
832
 
833
  ;      mov    esi,boot_sched_2
833
  ;      mov    esi,boot_sched_2
834
  ;      call   boot_log
834
  ;      call   boot_log
835
 
835
 
836
        ret
836
        ret