Subversion Repositories Kolibri OS

Rev

Rev 133 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 133 Rev 384
Line 5... Line 5...
5
;;  Distributed under GPL. See file COPYING for details.         ;;
5
;;  Distributed under GPL. See file COPYING for details.         ;;
6
;;  Copyright 2003 Ville Turjanmaa                               ;;
6
;;  Copyright 2003 Ville Turjanmaa                               ;;
7
;;                                                               ;;
7
;;                                                               ;;
8
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Line 9... Line -...
9
 
-
 
10
align 32
-
 
11
 
-
 
12
; GDT TABLE
-
 
13
 
-
 
14
gdts:
-
 
15
 
-
 
16
        dw     gdte-$-1
-
 
17
        dd     gdts
-
 
18
        dw     0
-
 
19
 
-
 
20
int_code_l:
-
 
21
os_code_l:
-
 
22
 
-
 
23
        dw     0xffff
-
 
24
        dw     0x0000
-
 
25
        db     0x00
-
 
26
        dw     11011111b *256 +10011010b
-
 
27
        db     0x00
-
 
28
 
-
 
29
int_data_l:
-
 
30
os_data_l:
-
 
31
 
-
 
32
        dw     0xffff
-
 
33
        dw     0x0000
-
 
34
        db     0x00
-
 
35
        dw     11011111b *256 +10010010b
-
 
36
        db     0x00
-
 
37
 
-
 
38
; --------------- APM ---------------------
-
 
39
apm_code_32:
-
 
40
        dw     0x10        ; limit 64kb
-
 
41
        db     0, 0, 0
-
 
42
        dw     11011111b *256 +10011010b
-
 
43
        db     0x00
-
 
44
apm_code_16:
-
 
45
        dw     0x10
-
 
46
        db     0, 0, 0
-
 
47
        dw     10011111b *256 +10011010b
-
 
48
        db     0x00
-
 
49
apm_data_16:
-
 
50
        dw     0x10
-
 
51
        db     0, 0, 0
-
 
52
        dw     10011111b *256 +10010010b
-
 
53
        db     0x00
-
 
54
; -----------------------------------------
-
 
55
 
-
 
56
app_code_l:
-
 
57
      dw ((0x80000000-std_application_base_address) shr 12) and 0xffff
-
 
58
      dw 0
-
 
59
      db 0
-
 
60
      dw 11010000b*256+11111010b+256*((0x80000000-std_application_base_address) shr 28)
-
 
61
      db std_application_base_address shr 24
-
 
62
 
-
 
63
app_data_l:
-
 
64
      dw (0x80000000-std_application_base_address) shr 12 and 0xffff
-
 
65
      dw 0
-
 
66
      db 0
-
 
67
      dw 11010000b*256+11110010b+256*((0x80000000-std_application_base_address) shr 28)
-
 
68
      db std_application_base_address shr 24
-
 
69
 
-
 
70
graph_data_l:
-
 
71
 
-
 
72
        dw     0x3ff
-
 
73
        dw     0x0000
-
 
74
        db     0x00
-
 
75
        dw     11010000b *256 +11110010b
-
 
76
        db     0x00
-
 
77
 
-
 
78
tss0_l:
-
 
79
      times (max_processes+10) dd 0,0
-
 
80
 
-
 
81
gdte:
-
 
82
 
-
 
83
 
-
 
84
 
9
 
85
idtreg:
10
idtreg:
86
     dw   8*0x41-1
11
     dw   8*0x41-1
87
     dd   idts+8
-
 
88
label idts at 0xB100-8
-
 
89
 
-
 
90
 
-
 
91
 
-
 
92
uglobal
-
 
93
 tss_sceleton:
-
 
94
  l.back   dw 0,0
-
 
95
  l.esp0   dd 0
-
 
96
  l.ss0    dw 0,0
-
 
97
  l.esp1   dd 0
-
 
98
  l.ss1    dw 0,0
-
 
99
  l.esp2   dd 0
-
 
100
  l.ss2    dw 0,0
-
 
101
  l.cr3    dd 0
-
 
102
  l.eip    dd 0
-
 
103
  l.eflags dd 0
-
 
104
  l.eax    dd 0
-
 
105
  l.ecx    dd 0
-
 
106
  l.edx    dd 0
-
 
107
  l.ebx    dd 0
-
 
108
  l.esp    dd 0
-
 
109
  l.ebp    dd 0
-
 
110
  l.esi    dd 0
-
 
111
  l.edi    dd 0
-
 
112
  l.es     dw 0,0
-
 
113
  l.cs     dw 0,0
-
 
114
  l.ss     dw 0,0
-
 
115
  l.ds     dw 0,0
-
 
116
  l.fs     dw 0,0
-
 
117
  l.gs     dw 0,0
-
 
118
  l.ldt    dw 0,0
-
 
119
  l.trap   dw 0
-
 
120
  l.io     dw 0
-
 
121
endg
-
 
Line 122... Line 12...
122
 
12
     dd   idts+8
Line 123... Line 13...
123
 
13
 
124
build_process_gdt_tss_pointer:
14
build_process_gdt_tss_pointer:
Line 138... Line 28...
138
        cmp    edi,8*(max_processes+5)
28
        cmp    edi,8*(max_processes+5)
139
        jbe    setgdtl2
29
        jbe    setgdtl2
Line 140... Line 30...
140
 
30
 
Line 141... Line -...
141
        ret
-
 
142
 
31
        ret
Line 143... Line 32...
143
 
32
 
144
build_interrupt_table:
33
build_interrupt_table:
145
 
34
 
Line 164... Line 53...
164
        mov    [edi + 4], word 11101110b*256
53
        mov    [edi + 4], word 11101110b*256
165
        mov    [edi + 6], word (i40 shr 16)
54
        mov    [edi + 6], word (i40 shr 16)
Line 166... Line 55...
166
 
55
 
Line 167... Line -...
167
        ret
-
 
168
 
-
 
169
 
56
        ret
170
 
57
 
171
iglobal
58
iglobal
172
  sys_int:
59
  sys_int:
-
 
60
    dd e0,debug_exc,e2,e3
-
 
61
    dd e4,e5,e6,e7
-
 
62
    dd e8,e9,e10,e11
-
 
63
    dd e12,e13,page_fault_handler,e15
173
    dd   e0,debug_exc,e2,e3,e4,e5,e6,e7,e8,e9,e10,e11,e12,e13,e14,e15
64
 
174
    dd   e16,e17
65
    dd except_16, e17,e18, except_19
175
    times 14 dd unknown_interrupt
66
    times 12 dd unknown_interrupt
-
 
67
 
-
 
68
    dd   irq0  , irq_serv.irq_1, p_irq2 , p_irq3     ;irq_serv.irq_3
176
 
69
    dd   p_irq4 ,irq_serv.irq_5,p_irq6,irq_serv.irq_7
Line 177... Line 70...
177
    dd   irq0  ,irq1  ,p_irq2 ,p_irq3 ,p_irq4 ,p_irq5,p_irq6 ,p_irq7
70
    dd   irq_serv.irq_8, irq_serv.irq_9, irq_serv.irq_10
Line 178... Line 71...
178
    dd   p_irq8,p_irq9,p_irq10,p_irq11,p_irq12,irqD  ,p_irq14,p_irq15
71
    dd   irq_serv.irq_11,p_irq12,irqD ,p_irq14,p_irq15
179
 
72
 
Line 214... Line 107...
214
      save_ring3_context
107
      save_ring3_context
215
      mov bl, num
108
      mov bl, num
216
      jmp exc_c
109
      jmp exc_c
217
}
110
}
Line 218... Line 111...
218
 
111
 
219
exc_wo_code 0, 1, 2, 3, 4, 5, 6, 9, 15, 16 ; 18, 19
112
exc_wo_code 0, 1, 2, 3, 4, 5, 6, 9, 15, 18
Line 220... Line 113...
220
exc_w_code 8, 10, 11, 12, 13, 14, 17
113
exc_w_code 8, 10, 11, 12, 13, 14, 17
221
 
114
 
222
exc_c:
115
exc_c:
223
        mov   ax, os_data
116
        mov   ax, os_data
Line 224... Line 117...
224
        mov   ds, ax
117
        mov   ds, ax
225
        mov   es, ax
118
        mov   es, ax
226
 
119
 
227
; test if debugging
120
; test if debugging
228
        cli
121
        cli
229
        mov   eax, [0x3000]
122
        mov   eax, [CURRENT_TASK]
230
        shl   eax, 8
123
        shl   eax, 8
231
        mov   eax, [0x80000+eax+APPDATA.debugger_slot]
124
        mov   eax, [SLOT_BASE+eax+APPDATA.debugger_slot]
232
        test  eax, eax
125
        test  eax, eax
233
        jnz   .debug
126
        jnz   .debug
234
        sti
127
        sti
235
; not debuggee => say error and terminate
128
; not debuggee => say error and terminate
236
        add   esp, 28h
129
        add   esp, 28h
Line 237... Line 130...
237
        movzx eax, bl        
130
        movzx eax, bl
238
        mov   [error_interrupt], eax
131
        mov   [error_interrupt], eax
Line 239... Line 132...
239
        call  show_error_parameters
132
        call  show_error_parameters
Line 240... Line 133...
240
        
133
 
241
        mov   edx, [0x3010]
134
        mov   edx, [TASK_BASE]
242
        mov   [edx + TASKDATA.state], byte 4
135
        mov   [edx + TASKDATA.state], byte 4
243
        
136
 
244
        jmp   change_task
137
        jmp   change_task
245
 
138
 
246
.debug:
139
.debug:
247
; we are debugged process, notify debugger and suspend ourself
140
; we are debugged process, notify debugger and suspend ourself
248
; eax=debugger PID
141
; eax=debugger PID
249
        cld
142
        cld
250
        movzx ecx, bl
143
        movzx ecx, bl
251
        push  ecx
144
        push  ecx
252
        mov   ecx, [0x3010]
145
        mov   ecx, [TASK_BASE]
253
        push  dword [ecx+TASKDATA.pid]    ; PID of current process
146
        push  dword [ecx+TASKDATA.pid]    ; PID of current process
254
        push  12
147
        push  12
255
        pop   ecx
148
        pop   ecx
256
        push  1        ; 1=exception
149
        push  1        ; 1=exception
257
        call  debugger_notify
150
        call  debugger_notify
258
        pop   ecx
151
        pop   ecx
259
        pop   ecx
152
        pop   ecx
Line 260... Line -...
260
        pop   ecx
-
 
261
        mov   edx, [0x3010]
-
 
262
        mov   byte [edx+TASKDATA.state], 1        ; suspended
-
 
263
        call  change_task
-
 
264
        restore_ring3_context
-
 
265
        iretd
-
 
266
 
-
 
267
;;;;;;;;;;;;;;;;;;;;;;;
-
 
268
;; FPU ERROR HANDLER ;;
-
 
269
;;;;;;;;;;;;;;;;;;;;;;;
-
 
270
 
-
 
271
align 4
-
 
272
e7:
-
 
273
        save_ring3_context
-
 
274
        clts
-
 
275
        mov   ax, os_data
-
 
276
        mov   ds, ax
-
 
277
        mov   es, ax
-
 
278
        
-
 
279
        mov   eax, [prev_user_of_fpu]
-
 
280
        shl   eax, 8
-
 
281
        add   eax, 0x80000 + APPDATA.fpu_save_area
-
 
282
        fsave [eax]
-
 
283
        
-
 
284
        mov   eax, [0x3000]
-
 
285
        mov   [prev_user_of_fpu], eax
-
 
286
        shl   eax, 8
-
 
287
        add   eax, 0x80000
-
 
288
        cmp   [eax + APPDATA.is_fpu_saved], 0
-
 
289
        je    @f
-
 
290
        frstor [eax+APPDATA.fpu_save_area]
-
 
291
     @@:
-
 
292
        mov   [eax + APPDATA.is_fpu_saved], 1
-
 
293
        restore_ring3_context
-
 
294
        iret
153
        pop   ecx
295
        
154
        mov   edx, [TASK_BASE]
Line 296... Line 155...
296
iglobal
155
        mov   byte [edx+TASKDATA.state], 1        ; suspended
297
  prev_user_of_fpu dd 1
156
        call  change_task
Line 334... Line 193...
334
endg
193
endg
Line 335... Line 194...
335
 
194
 
Line 336... Line 195...
336
show_error_parameters:
195
show_error_parameters:
337
        
196
 
338
        mov    [write_error_to],process_pid+43
197
        mov    [write_error_to],process_pid+43
339
        mov    eax,[0x3000]
198
        mov    eax,[CURRENT_TASK]
340
        shl    eax, 5
199
        shl    eax, 5
Line 341... Line 200...
341
        mov    eax,[0x3000+TASKDATA.pid+eax]
200
        mov    eax,[CURRENT_TASK+TASKDATA.pid+eax]
342
        call   writehex
201
        call   writehex
343
        
202
 
Line 378... Line 237...
378
     save_ring3_context
237
     save_ring3_context
379
     mov   edi, num
238
     mov   edi, num
380
     jmp   irq_c
239
     jmp   irq_c
381
}
240
}
Line 382... Line 241...
382
 
241
 
Line 383... Line 242...
383
irqh 2,5,7,8,9,10,11,14,15
242
irqh 2,5,7,8,9,10,11
384
 
243
 
385
 irq_c:
244
 irq_c:
386
     mov   ax, os_data
245
     mov   ax, os_data
Line 439... Line 298...
439
     mov   es, ax
298
     mov   es, ax
440
     call  check_mouse_data_ps2
299
     call  check_mouse_data_ps2
441
     restore_ring3_context
300
     restore_ring3_context
442
     iret
301
     iret
Line -... Line 302...
-
 
302
 
-
 
303
p_irq14:
-
 
304
        save_ring3_context
-
 
305
        mov     ax, os_data
-
 
306
        mov     ds, ax
-
 
307
        mov     es, ax
-
 
308
        call    [irq14_func]
-
 
309
        call    ready_for_next_irq_1
-
 
310
        restore_ring3_context
-
 
311
        iret
-
 
312
p_irq15:
-
 
313
        save_ring3_context
-
 
314
        mov     ax, os_data
-
 
315
        mov     ds, ax
-
 
316
        mov     es, ax
-
 
317
        call    [irq15_func]
-
 
318
        call    ready_for_next_irq_1
-
 
319
        restore_ring3_context
-
 
320
        iret
443
 
321
 
444
ready_for_next_irq:
322
ready_for_next_irq:
445
     mov    [check_idle_semaphore],5
323
     mov    [check_idle_semaphore],5
446
     mov   al, 0x20
324
     mov   al, 0x20
447
     out   0x20, al
325
     out   0x20, al
Line 481... Line 359...
481
 
359
 
482
     mov    esi,edi          ; 1
360
     mov    esi,edi          ; 1
483
     shl    esi,6            ; 1
361
     shl    esi,6            ; 1
484
     add    esi,irq00read    ; 1
362
     add    esi,irq00read    ; 1
485
     shl    edi,12           ; 1
363
     shl    edi,12           ; 1
486
     add    edi,0x2E0000
364
     add    edi,IRQ_SAVE
Line 487... Line 365...
487
     mov    ecx,16
365
     mov    ecx,16
Line 488... Line 366...
488
 
366
 
Line 552... Line 430...
552
 
430
 
553
 
431
 
Line 554... Line 432...
554
set_application_table_status:
432
set_application_table_status:
555
        push eax
433
        push eax
556
 
434
 
557
        mov  eax,[0x3000]
435
        mov  eax,[CURRENT_TASK]
Line 558... Line 436...
558
        shl  eax, 5
436
        shl  eax, 5
Line 559... Line 437...
559
        add  eax,0x3000+TASKDATA.pid
437
        add  eax,CURRENT_TASK+TASKDATA.pid
Line 567... Line 445...
567
 
445
 
568
 
446
 
Line 569... Line 447...
569
clear_application_table_status:
447
clear_application_table_status:
570
        push eax
448
        push eax
571
 
449
 
572
        mov  eax,[0x3000]
450
        mov  eax,[CURRENT_TASK]
Line 573... Line 451...
573
        shl  eax, 5
451
        shl  eax, 5
574
        add  eax,0x3000+TASKDATA.pid
452
        add  eax,CURRENT_TASK+TASKDATA.pid
575
        mov  eax,[eax]
453
        mov  eax,[eax]
Line 581... Line 459...
581
 
459
 
Line 582... Line 460...
582
        pop  eax
460
        pop  eax
Line 583... Line -...
583
 
-
 
584
        ret
-
 
585
 
461
 
586
 
462
        ret
587
 
463
 
Line 588... Line 464...
588
sys_resize_app_memory:
464
sys_resize_app_memory:
589
        ; eax = 1 - resize
465
        ; eax = 1 - resize
Line 590... Line 466...
590
        ;     ebx = new amount of memory
466
        ;     ebx = new amount of memory
591
 
-
 
592
        cmp    eax,1
-
 
593
        jne    .no_application_mem_resize
467
 
594
        
-
 
595
        jmp    new_mem_resize ;resize for new type of processes
468
        cmp    eax,1
Line 596... Line -...
596
 
-
 
597
 
-
 
598
     .no_application_mem_resize:
-
 
599
 
-
 
600
        ret
-
 
601
 
-
 
602
 
-
 
603
 
-
 
604
get_app_params:
-
 
605
 
-
 
606
    push eax
-
 
607
 
-
 
608
    cmp  [0x90000+6],word '00'
-
 
609
    jne  no_00_header
-
 
610
 
-
 
611
    mov  eax,[0x90000+12]
-
 
612
    mov  [app_start],eax
-
 
613
    mov  eax,[0x90000+16]
-
 
614
    mov  [app_i_end],eax
-
 
615
    mov  eax,[0x90000+20]
-
 
616
    mov  [app_mem],eax
-
 
617
; \begin{diamond}[20.08.2006]
-
 
618
; sanity check (functions 19,58 load app_i_end bytes and that must
-
 
619
; fit in allocated memory to prevent kernel faults)
-
 
620
    cmp  eax,[app_i_end]
-
 
621
    jb   no_01_header
-
 
622
; \end{diamond}[20.08.2006]
-
 
623
    shr  eax,1
-
 
624
    sub  eax,0x10
-
 
625
    mov  [app_esp],eax
-
 
626
    mov  eax,[0x90000+24]
-
 
627
    mov  [app_i_param],eax
-
 
628
    mov  [app_i_icon],dword 0
-
 
629
 
-
 
630
    pop  eax
-
 
631
    clc
-
 
632
    ret
-
 
633
 
-
 
634
  no_00_header:
-
 
635
 
-
 
636
 
-
 
637
    cmp  [0x90000+6],word '01'
-
 
638
    jne  no_01_header
-
 
639
 
469
        jne    .no_application_mem_resize
640
    mov  eax,[0x90000+12]
-
 
641
    mov  [app_start],eax
-
 
642
    mov  eax,[0x90000+16]
-
 
643
    mov  [app_i_end],eax
-
 
644
    mov  eax,[0x90000+20]
-
 
645
    mov  [app_mem],eax
-
 
646
; \begin{diamond}[20.08.2006]
-
 
647
    cmp  eax,[app_i_end]
-
 
648
    jb   no_01_header
-
 
649
; \end{diamond}[20.08.2006]
-
 
650
    mov  eax,[0x90000+24]
-
 
651
    mov  [app_esp],eax
-
 
652
    mov  eax,[0x90000+28]
-
 
653
    mov  [app_i_param],eax
-
 
654
    mov  eax,[0x90000+32]
-
 
655
    mov  [app_i_icon],eax
-
 
656
 
-
 
657
    pop  eax
-
 
658
    clc
-
 
659
    ret
470
 
Line 660... Line -...
660
 
-
 
661
   no_01_header:
-
 
662
 
-
 
663
    pop  eax
-
 
664
    stc
-
 
665
    ret
-
 
666
 
-
 
667
 
-
 
668
start_application_fl:
-
 
669
    jmp new_start_application_fl
-
 
670
 
-
 
671
;************************************************************************
-
 
672
 
-
 
673
start_application_floppy:
-
 
674
    jmp  new_start_application_floppy
-
 
675
 
-
 
676
;********************************************************************
-
 
677
 
-
 
678
start_application_hd:
-
 
679
    jmp   new_start_application_hd
-
 
680
 
-
 
681
uglobal
-
 
682
  new_process_place  dd  0x0
-
 
683
  app_start    dd  0x0
-
 
684
  app_i_end    dd  0x0
-
 
685
  app_mem      dd  0x0
-
 
686
  app_esp      dd  0x0
-
 
687
  app_i_param  dd  0x0
-
 
688
  app_i_icon   dd  0x0
-
 
689
  ;app_mem_pos  dd  0x0
-
 
690
  appl_path        dd 0x0
-
 
691
  appl_path_size   dd 0x0         
-
 
692
endg
-
 
693
 
-
 
694
;iglobal
-
 
695
  ;hd_app_string      db  'HDAPP       '
471
        stdcall new_mem_resize, ebx
Line 696... Line 472...
696
  ;process_loading    db 'K : Process - loading ',13,10,0
472
        mov [esp+36], eax
697
  ;process_running    db 'K : Process - done',13,10,0
473
        ret
698
  ;first_gdt_search   dd 0x2
474
 
Line 710... Line 486...
710
jmp new_sys_threads
486
jmp new_sys_threads
Line 711... Line 487...
711
 
487
 
712
iglobal
488
iglobal
713
  process_terminating   db 'K : Process - terminating',13,10,0
489
  process_terminating   db 'K : Process - terminating',13,10,0
-
 
490
  process_terminated    db 'K : Process - done',13,10,0
714
  process_terminated    db 'K : Process - done',13,10,0
491
  msg_obj_destroy       db 'K : destroy app object',13,10,0
Line -... Line 492...
-
 
492
endg
-
 
493
 
Line 715... Line 494...
715
endg
494
; param
-
 
495
;  esi= slot
-
 
496
 
-
 
497
terminate: ; terminate application
-
 
498
 
-
 
499
           .slot equ esp   ;locals
-
 
500
 
-
 
501
           push   esi      ;save .slot
-
 
502
 
-
 
503
           shl esi, 8
716
 
504
           cmp [SLOT_BASE+esi+APPDATA.dir_table], 0
-
 
505
           jne @F
717
 
506
           add esp, 4
718
terminate: ; terminate application
507
           ret
719
    push   esi
-
 
720
    mov    esi,process_terminating
-
 
721
    call   sys_msg_board_str
508
@@:
722
    pop    esi
509
           mov    esi,process_terminating
723
 
510
           call   sys_msg_board_str
724
@@:
511
@@:
725
    cli
512
           cli
726
    cmp   [application_table_status],0
513
           cmp   [application_table_status],0
727
    je    term9
514
           je    term9
728
    sti
515
           sti
729
    call  change_task
-
 
730
    jmp   @b
516
           call  change_task
Line -... Line 517...
-
 
517
           jmp   @b
731
  term9:
518
term9:
-
 
519
           call  set_application_table_status
-
 
520
 
-
 
521
           mov esi, [.slot]
732
 
522
           shl esi,8
-
 
523
           add esi, SLOT_BASE+APP_OBJ_OFFSET
Line -... Line 524...
-
 
524
@@:
-
 
525
           mov eax, [esi+APPOBJ.fd]
-
 
526
           test eax, eax
-
 
527
           jz @F
-
 
528
 
-
 
529
           cmp eax, esi
-
 
530
           je @F
-
 
531
 
-
 
532
           push esi
-
 
533
           call [eax+APPOBJ.destroy]
-
 
534
           mov  esi, msg_obj_destroy
-
 
535
           call sys_msg_board_str
-
 
536
           pop esi
-
 
537
           jmp @B
-
 
538
@@:
-
 
539
           mov eax, [.slot]
733
    call  set_application_table_status
540
           shl eax, 8
734
    
541
           mov eax,[SLOT_BASE+eax+APPDATA.dir_table]
-
 
542
           stdcall destroy_app_space, eax
735
    mov    eax,esi
543
 
-
 
544
           mov esi, [.slot]
-
 
545
           cmp [fpu_owner],esi   ; if user fpu last -> fpu user = 1
-
 
546
           jne @F
-
 
547
 
-
 
548
           mov [fpu_owner],1
-
 
549
           mov eax, [256+SLOT_BASE+APPDATA.fpu_state]
736
    call   dispose_app_cr3_table
550
           clts
-
 
551
           bt [cpu_caps], CAPS_SSE
-
 
552
           jnc .no_SSE
-
 
553
           fxrstor [eax]
Line 737... Line 554...
737
 
554
           jmp @F
738
    cmp   [prev_user_of_fpu],esi   ; if user fpu last -> fpu user = 1
555
.no_SSE:
Line 739... Line 556...
739
    jne   fpu_ok_1
556
           fnclex
740
    mov   [prev_user_of_fpu],1
557
           frstor [eax]
741
  fpu_ok_1:
558
@@:
Line 778... Line 595...
778
        cmp     eax, hotkey_buffer+120*8
595
        cmp     eax, hotkey_buffer+120*8
779
        jb      .loop2
596
        jb      .loop2
Line 780... Line 597...
780
 
597
 
781
    mov   ecx,esi                 ; remove buttons
598
    mov   ecx,esi                 ; remove buttons
782
  bnewba2:
599
  bnewba2:
783
    mov   edi,[0xfe88]
600
    mov   edi,[BTN_ADDR]
784
    mov   eax,edi
601
    mov   eax,edi
785
    cld
602
    cld
786
    movzx ebx,word [edi]
603
    movzx ebx,word [edi]
787
    inc   bx
604
    inc   bx
Line 814... Line 631...
814
    mov   eax,[esi+WDATA.box.top]
631
    mov   eax,[esi+WDATA.box.top]
815
    mov   [dly],eax
632
    mov   [dly],eax
816
    add   eax,[esi+WDATA.box.height]
633
    add   eax,[esi+WDATA.box.height]
817
    mov   [dlye],eax
634
    mov   [dlye],eax
Line 818... Line -...
818
 
-
 
819
    mov   [esi+WDATA.box.left], 0
-
 
820
    mov   [esi+WDATA.box.width], 5
-
 
821
    mov   eax,[0xFE04]
-
 
822
    mov   [esi+WDATA.box.top],eax
-
 
823
    mov   [esi+WDATA.box.height], 5
635
 
-
 
636
    xor   eax, eax
-
 
637
    mov   [esi+WDATA.box.left],eax
-
 
638
    mov   [esi+WDATA.box.width],eax
-
 
639
    mov   [esi+WDATA.box.top],eax
824
    xor   eax, eax
640
    mov   [esi+WDATA.box.height],eax
825
    mov   [esi+WDATA.cl_workarea],eax
641
    mov   [esi+WDATA.cl_workarea],eax
826
    mov   [esi+WDATA.cl_titlebar],eax
642
    mov   [esi+WDATA.cl_titlebar],eax
827
    mov   [esi+WDATA.cl_frames],eax
643
    mov   [esi+WDATA.cl_frames],eax
828
    mov   dword [esi+WDATA.reserved],eax ; clear all flags: wstate, redraw, wdrawn
644
    mov   dword [esi+WDATA.reserved],eax ; clear all flags: wstate, redraw, wdrawn
Line 833... Line 649...
833
 
649
 
834
; debuggee test
650
; debuggee test
835
    pushad
651
    pushad
836
    mov  edi, esi
652
    mov  edi, esi
837
    shl  edi, 5
653
    shl  edi, 5
838
    mov  eax, [0x80000+edi*8+APPDATA.debugger_slot]
654
    mov  eax, [SLOT_BASE+edi*8+APPDATA.debugger_slot]
839
    test eax, eax
655
    test eax, eax
840
    jz   .nodebug
656
    jz   .nodebug
841
    push 8
657
    push 8
842
    pop  ecx
658
    pop  ecx
843
    push dword [0x3000+edi+TASKDATA.pid]   ; PID
659
    push dword [CURRENT_TASK+edi+TASKDATA.pid]   ; PID
844
    push 2
660
    push 2
845
    call debugger_notify
661
    call debugger_notify
846
    pop  ecx
662
    pop  ecx
847
    pop  ecx
663
    pop  ecx
848
.nodebug:
664
.nodebug:
Line 849... Line 665...
849
    popad
665
    popad
850
 
666
 
-
 
667
           mov ebx, [.slot]
-
 
668
           shl ebx, 8
-
 
669
           mov ebx,[SLOT_BASE+ebx+APPDATA.pl0_stack]
-
 
670
 
-
 
671
           stdcall kernel_free, ebx
851
    pusha         ; at 0x80000+
672
 
-
 
673
           mov edi, [.slot]
852
    mov   edi,esi
674
           shl edi,8
-
 
675
           add edi,SLOT_BASE
-
 
676
           mov eax, 0x20202020
-
 
677
           stosd
853
    shl   edi,8
678
           stosd
854
    add   edi,0x80000
679
           stosd
855
    mov   ecx,256/4
680
           mov ecx,244/4
856
    xor   eax, eax
-
 
857
    rep   stosd
-
 
858
    popa
-
 
859
 
-
 
860
    pusha          ; name to spaces
-
 
861
    mov   edi,esi
-
 
862
    shl   edi,8
-
 
863
    add   edi,0x80000+APPDATA.app_name
-
 
864
    mov   ecx,11
-
 
865
    mov   eax,' '
-
 
866
    rep   stosb
-
 
Line 867... Line 681...
867
    popa
681
           xor eax, eax
868
 
682
           rep stosd
869
 
683
 
870
  ; activate window
684
  ; activate window
871
        movzx  eax, word [0xC000 + esi*2]
685
        movzx  eax, word [WIN_STACK + esi*2]
872
        cmp    eax, [0x3004]
686
        cmp    eax, [TASK_COUNT]
873
        jne    .dont_activate
687
        jne    .dont_activate
874
        pushad
688
        pushad
875
 .check_next_window:
689
 .check_next_window:
876
        dec    eax
690
        dec    eax
877
        cmp    eax, 1
691
        cmp    eax, 1
878
        jbe    .nothing_to_activate
692
        jbe    .nothing_to_activate
879
        lea    esi, [0xc400+eax*2]
693
        lea    esi, [WIN_POS+eax*2]
880
        movzx  edi, word [esi]               ; edi = process
694
        movzx  edi, word [esi]               ; edi = process
881
        shl    edi, 5
695
        shl    edi, 5
-
 
696
        cmp    [CURRENT_TASK + edi + TASKDATA.state], byte 9  ; skip dead slots
-
 
697
        je     .check_next_window
-
 
698
        add    edi, window_data
-
 
699
; \begin{diamond}[19.09.2006]
-
 
700
; skip minimized windows
882
        cmp    [0x3000 + edi + TASKDATA.state], byte 9  ; skip dead slots
701
        test   [edi + WDATA.fl_wstate], WSTATE_MINIMIZED
883
        je     .check_next_window
702
        jnz    .check_next_window
884
        add    edi, window_data
703
; \end{diamond}
885
        call   waredraw
704
        call   waredraw
Line 886... Line 705...
886
 .nothing_to_activate:
705
 .nothing_to_activate:
887
        popad
706
        popad
888
 .dont_activate:
707
 .dont_activate:
889
 
708
 
890
        push    esi     ; remove hd1 & cd & flp reservation
709
        push    esi     ; remove hd1 & cd & flp reservation
-
 
710
        shl     esi, 5
891
        shl     esi, 5
711
        mov     esi, [esi+CURRENT_TASK+TASKDATA.pid]
892
        mov     esi, [esi+0x3000+TASKDATA.pid]
712
        cmp     [hd1_status], esi
893
        cmp     [hd1_status], esi
713
        jnz     @f
894
        jnz     @f
714
        call    free_hd_channel
-
 
715
        mov     [hd1_status], 0
895
        mov     [hd1_status], 0
716
@@:
896
@@:
717
        cmp     [cd_status], esi
897
        cmp     [cd_status], esi
718
        jnz     @f
898
        jnz     @f
719
        call    free_cd_channel
899
        mov     [cd_status], 0
720
        mov     [cd_status], 0
Line 905... Line 726...
905
        pop     esi
726
        pop     esi
Line 906... Line 727...
906
 
727
 
907
    pusha ; remove all irq reservations
728
    pusha ; remove all irq reservations
908
    mov   eax,esi
729
    mov   eax,esi
909
    shl   eax, 5
730
    shl   eax, 5
910
    mov   eax,[eax+0x3000+TASKDATA.pid]
731
    mov   eax,[eax+CURRENT_TASK+TASKDATA.pid]
911
    mov   edi,irq_owner
732
    mov   edi,irq_owner
912
    mov   ecx,16
733
    mov   ecx,16
913
  newirqfree:
734
  newirqfree:
914
    scasd
735
    scasd
915
    jne   nofreeirq
736
    jne   nofreeirq
916
    mov   [edi-4],dword 0
737
    mov   [edi-4],dword 0
917
  nofreeirq:
738
  nofreeirq:
918
    loop   newirqfree
739
    loop   newirqfree
Line 919... Line -...
919
    popa
-
 
920
 
740
    popa
921
 
741
 
922
    pusha                     ; remove all port reservations
742
    pusha                     ; remove all port reservations
923
    mov   edx,esi
743
    mov   edx,esi
924
    shl   edx, 5
744
    shl   edx, 5
Line 925... Line 745...
925
    add   edx,0x3000
745
    add   edx,CURRENT_TASK
Line 926... Line 746...
926
    mov   edx,[edx+TASKDATA.pid]
746
    mov   edx,[edx+TASKDATA.pid]
Line 927... Line 747...
927
 
747
 
928
  rmpr0:
748
  rmpr0:
Line 929... Line 749...
929
 
749
 
Line 930... Line 750...
930
    mov   esi,[0x2d0000]
750
    mov   esi,[RESERVED_PORTS]
931
 
751
 
932
    cmp   esi,0
752
    cmp   esi,0
Line 933... Line 753...
933
    je    rmpr9
753
    je    rmpr9
934
 
754
 
Line 935... Line 755...
935
  rmpr3:
755
  rmpr3:
Line 955... Line 775...
955
    mov   esi,edi
775
    mov   esi,edi
956
    add   esi,16
776
    add   esi,16
957
    cld
777
    cld
958
    rep   movsb
778
    rep   movsb
Line 959... Line 779...
959
 
779
 
Line 960... Line 780...
960
    dec   dword [0x2d0000]
780
    dec   dword [RESERVED_PORTS]
Line 961... Line 781...
961
 
781
 
Line 962... Line 782...
962
    jmp   rmpr0
782
    jmp   rmpr0
963
 
783
 
964
  rmpr9:
784
  rmpr9:
965
 
785
 
966
    popa
786
    popa
967
    mov  edi,esi         ; do not run this process slot
787
    mov  edi,esi         ; do not run this process slot
968
    shl  edi, 5
788
    shl  edi, 5
969
    mov  [edi+0x3000 + TASKDATA.state],byte 9
789
    mov  [edi+CURRENT_TASK + TASKDATA.state],byte 9
970
; debugger test - terminate all debuggees
790
; debugger test - terminate all debuggees
971
    mov  eax, 2
791
    mov  eax, 2
972
    mov  ecx, 0x80000+2*0x100+APPDATA.debugger_slot
792
    mov  ecx, SLOT_BASE+2*0x100+APPDATA.debugger_slot
973
.xd0:
793
.xd0:
974
    cmp  eax, [0x3004]
794
    cmp  eax, [TASK_COUNT]
975
    ja   .xd1
795
    ja   .xd1
Line 996... Line 816...
996
    call  [calculatescreen]
816
    call  [calculatescreen]
997
    xor   eax, eax
817
    xor   eax, eax
998
    xor   esi, esi
818
    xor   esi, esi
999
    call  redrawscreen
819
    call  redrawscreen
Line 1000... Line 820...
1000
 
820
 
1001
    mov   [0xfff4],byte 0  ; no mouse background
821
    mov   [MOUSE_BACKGROUND],byte 0  ; no mouse background
Line 1002... Line 822...
1002
    mov   [0xfff5],byte 0  ; draw mouse
822
    mov   [DONT_DRAW_MOUSE],byte 0  ; draw mouse
1003
 
823
 
1004
    mov   [application_table_status],0
824
    mov   [application_table_status],0
1005
    mov   esi,process_terminated
825
    mov   esi,process_terminated
1006
    call  sys_msg_board_str
826
    call  sys_msg_board_str
-
 
827
    add esp, 4
Line 1007... Line 828...
1007
 
828
    ret
1008
    ret
829
restore .slot
1009
 
830
 
1010
iglobal
831
iglobal