Subversion Repositories Kolibri OS

Rev

Rev 221 | Rev 237 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
164 serge 1
 
227 serge 2
DRV_EXIT     equ -1
3
DRV_COMPAT   equ  1  ;minimal required drivers version
4
DRV_CURRENT  equ  1  ;current drivers model version
5
214 serge 6
 
227 serge 7
8
 
164 serge 9
proc attach_int_handler stdcall, irq:dword, handler:dword
10
11
 
12
	 test ebx, ebx
13
	 jz .err
14
	 mov eax, [handler]
15
	 test eax, eax
16
	 jz .err
17
	 mov [irq_tab+ebx*4], eax
18
         stdcall enable_irq, [irq]
19
	 ret
20
.err:
21
	 xor eax, eax
22
	 ret
23
endp
24
25
 
26
proc  detach_int_handler
27
28
 
29
endp
30
31
 
32
proc enable_irq stdcall, irq_line:dword
33
           mov ebx, [irq_line]
34
           mov edx, 0x21
35
           cmp ebx, 8
36
           jb @F
37
           mov edx, 0xA1
38
           sub ebx,8
39
@@:
40
           in al,dx
41
           btr eax, ebx
42
           out dx, al
43
           ret
44
endp
45
46
 
47
;; proc irq_serv
48
49
 
50
51
 
52
	   push eax
53
	   mov eax, 1
54
	   jmp .main
55
align 4
56
.irq_2:
57
	   push eax
58
	   mov eax, 2
59
	   jmp .main
60
align 4
61
.irq_3:
62
	   push eax
63
	   mov eax, 3
64
	   jmp .main
65
align 4
66
.irq_4:
67
	   push eax
68
	   mov eax, 4
69
	   jmp .main
70
align 4
71
.irq_5:
72
	   push eax
73
	   mov eax, 5
74
	   jmp .main
75
align 4
76
.irq_6:
77
	   push eax
78
	   mov eax, 6
79
	   jmp .main
80
align 4
81
.irq_7:
82
	   push eax
83
	   mov eax, 7
84
	   jmp .main
85
align 4
86
.irq_8:
87
	   push eax
88
	   mov eax, 8
89
	   jmp .main
90
align 4
91
.irq_9:
92
	   push eax
93
	   mov eax, 9
94
	   jmp .main
95
align 4
96
.irq_10:
97
	   push eax
98
	   mov eax, 10
99
	   jmp .main
100
align 4
101
.irq_11:
102
	   push eax
103
	   mov eax, 11
104
	   jmp .main
105
align 4
106
.irq_12:
107
	   push eax
108
	   mov eax, 12
109
	   jmp .main
110
align 4
111
.irq_13:
112
	   push eax
113
	   mov eax, 13
114
	   jmp .main
115
align 4
116
.irq_14:
117
	   push eax
118
	   mov eax, 14
119
	   jmp .main
120
align 4
121
.irq_15:
122
	   push eax
123
	   mov eax, 15
124
	   jmp .main
125
126
 
127
.main:
128
	   save_ring3_context
129
	   mov	 bx, os_data
130
	   mov	 ds, bx
131
	   mov	 es, bx
132
133
 
134
	   test ebx, ebx
135
	   jz .exit
136
137
 
138
139
 
140
	   restore_ring3_context
141
142
 
143
	   mov al, 0x20
144
           jb @f
145
	   out 0xa0, al
146
@@:
147
           out 0x20, al
148
149
 
150
	   iret
151
152
 
153
proc get_notify stdcall, p_ev:dword
154
155
 
156
           mov ebx,[CURRENT_TASK]
157
           shl ebx,8
158
           test dword [ebx+PROC_BASE+0xA8],EVENT_NOTIFY
159
	   jz @f
160
           and dword [ebx+PROC_BASE+0xA8], not EVENT_NOTIFY
161
	   mov edi, [p_ev]
162
	   mov dword [edi], EV_INTR
163
           mov eax, [ebx+PROC_BASE+APPDATA.event]
164
	   mov dword [edi+4], eax
165
	   ret
166
@@:
167
	   call change_task
168
	   jmp .wait
169
endp
170
171
 
172
proc pci_read32 stdcall, bus:dword, devfn:dword, reg:dword
173
	   xor eax, eax
174
	   xor ebx, ebx
175
	   mov ah, byte [bus]
176
           mov al, 6
177
	   mov bh, byte [devfn]
178
	   mov bl, byte [reg]
179
	   call pci_read_reg
180
	   ret
181
endp
182
183
 
184
proc pci_read8 stdcall, bus:dword, devfn:dword, reg:dword
185
	   xor eax, eax
186
	   xor ebx, ebx
187
	   mov ah, byte [bus]
188
           mov al, 4
189
	   mov bh, byte [devfn]
190
	   mov bl, byte [reg]
191
	   call pci_read_reg
192
	   ret
193
endp
194
195
 
196
proc pci_write8 stdcall, bus:dword, devfn:dword, reg:dword, val:dword
197
	   xor eax, eax
198
	   xor ebx, ebx
199
	   mov ah, byte [bus]
200
           mov al, 8
201
	   mov bh, byte [devfn]
202
	   mov bl, byte [reg]
203
           mov ecx, [val]
204
           call pci_write_reg
205
	   ret
206
endp
207
208
 
209
io_code    equ  IOCTL.io_code
210
input      equ  IOCTL.input
211
inp_size   equ  IOCTL.inp_size
212
output     equ  IOCTL.output
213
out_size   equ  IOCTL.out_size
214
215
 
216
 
217
proc srv_handler stdcall, ioctl:dword
218
           mov esi, [ioctl]
219
           test esi, esi
220
           jz .err
221
222
 
223
           cmp [edi+SRV.magic], ' SRV'
224
	   jne .fail
225
226
 
227
	   jne .fail
228
229
 
230
           ret
231
.fail:
232
           xor eax, eax
233
           not eax
234
           mov [esi+output], eax
235
           mov [esi+out_size], 4
236
           ret
237
.err:
238
           xor eax, eax
239
           not eax
240
           ret
241
endp
242
243
 
244
proc srv_handlerEx stdcall, ioctl:dword
245
           mov esi, [ioctl]
246
           test esi, esi
247
           jz .err
248
           add esi, new_app_base
249
250
 
251
           cmp [edi+SRV.magic], ' SRV'
252
	   jne .fail
253
254
 
255
	   jne .fail
256
257
 
258
           add [esi+output], new_app_base
259
260
 
261
           ret
262
.fail:
263
           xor eax, eax
264
           not eax
265
           mov [esi+output], eax
266
           mov [esi+out_size], 4
267
           ret
268
.err:
269
           xor eax, eax
270
           not eax
271
           ret
272
endp
273
274
 
275
restore  io_code
276
restore  input
277
restore  inp_size
278
restore  output
279
restore  out_size
280
281
 
282
proc get_service stdcall, sz_name:dword
283
	   locals
284
	     srv_ptr  dd ?
285
	     counter  dd ?
286
           endl
188 serge 287
164 serge 288
 
188 serge 289
           test eax, eax
290
           jnz @F
291
           ret
292
@@:
164 serge 293
           mov [srv_ptr], srv_tab
188 serge 294
           mov [counter], 16
295
@@:
296
           stdcall strncmp, [srv_ptr], [sz_name], 16
297
           test eax, eax
298
           je .ok
299
164 serge 300
 
188 serge 301
           dec [counter]
302
           jnz @B
303
.not_load:
164 serge 304
           stdcall find_service, [sz_name]
305
           test eax, eax
306
           jnz @F
188 serge 307
           ret
308
@@:
164 serge 309
           stdcall load_driver, eax
188 serge 310
           ret
311
.ok:
164 serge 312
           mov eax, [srv_ptr]
188 serge 313
           ret
314
endp
164 serge 315
316
 
317
proc find_service stdcall ,sz_name:dword
318
319
 
320
	   test eax, eax
321
	   jz .fail
322
323
 
324
@@:
325
           mov eax, [esi]
326
           test eax, eax
327
           jz .fail
328
           push esi
329
           stdcall strncmp, eax, [sz_name], 16
330
           pop esi
331
           test eax, eax
332
           je .ok
333
334
 
335
           jmp @B
336
.ok:
337
           mov eax, [esi+4]
338
           ret
339
.fail:
340
           xor eax, eax
341
           ret
342
endp
343
344
 
345
proc reg_service stdcall, sz_name:dword, handler:dword
346
	   locals
347
	     srv dd ?
348
	   endl
349
350
 
351
	   test eax, eax
352
	   jz .fail
353
354
 
355
	   test ebx, ebx
356
	   jz .fail
357
358
 
359
	   test eax, eax
360
	   jz .fail
361
362
 
363
	   mov edi, eax
364
	   mov esi, [sz_name]
365
	   mov ecx, 16
366
	   rep movsb
367
368
 
369
	   mov [edi+SRV.magic], ' SRV'
370
	   mov [edi+SRV.size], SRV_SIZE
371
	   mov ebx, [handler]
372
	   mov [edi+SRV.srv_proc], ebx
373
           mov eax, [srv]
374
	   ret
375
.fail:
376
	   xor eax, eax
377
	   ret
378
endp
379
380
 
381
proc get_proc stdcall, exp:dword, sz_name:dword
382
383
 
384
.next:
385
           mov eax, [edx]
386
           test eax, eax
387
           jz .end
388
389
 
390
           stdcall strncmp, eax, [sz_name], 16
391
           pop edx
392
           test eax, eax
393
           jz .ok
394
395
 
396
           jmp .next
397
.ok:
398
           mov eax, [edx+4]
399
.end:
400
           ret
401
endp
402
403
 
404
proc get_coff_sym stdcall, pSym:dword,count:dword, sz_sym:dword
405
406
 
407
	   stdcall strncmp, [pSym], [sz_sym], 8
408
	   test eax,eax
409
	   jz .ok
410
	   add [pSym], 18
411
	   dec [count]
412
	   jnz @b
413
	   xor eax, eax
414
	   ret
415
.ok:
416
	   mov ebx, [pSym]
417
	   mov eax, [ebx+8]
418
	   ret
419
endp
420
421
 
422
proc get_curr_task
188 serge 423
           mov eax,[CURRENT_TASK]
424
           shl eax, 8
425
           ret
426
endp
427
164 serge 428
 
188 serge 429
proc get_fileinfo stdcall, file_name:dword, info:dword
430
           locals
431
             cmd     dd ?
432
             offset  dd ?
433
                     dd ?
434
             count   dd ?
435
             buff    dd ?
436
                     db ?
437
             name    dd ?
438
           endl
439
164 serge 440
 
188 serge 441
           mov ebx, [file_name]
442
           sub ebx, new_app_base
443
           mov ecx, [info]
444
           sub ecx, new_app_base
445
164 serge 446
 
188 serge 447
           mov [offset], eax
448
           mov [offset+4], eax
449
           mov [count], eax
450
           mov [buff], ecx
451
           mov byte [buff+4], al
452
           mov [name], ebx
453
164 serge 454
 
188 serge 455
           lea ebx, [cmd]
456
           sub ebx, new_app_base
457
           int 0x40
458
           ret
459
endp
460
164 serge 461
 
188 serge 462
proc read_file stdcall,file_name:dword, buffer:dword, off:dword,\
463
                                     bytes:dword
464
           locals
465
             cmd     dd ?
466
             offset  dd ?
467
                     dd ?
468
             count   dd ?
469
             buff    dd ?
470
                     db ?
471
             name    dd ?
472
           endl
473
164 serge 474
 
188 serge 475
           mov ebx, [file_name]
476
           mov ecx, [off]
477
           mov edx, [bytes]
478
           mov esi, [buffer]
479
           sub ebx, new_app_base
480
           sub esi, new_app_base
481
164 serge 482
 
188 serge 483
           mov [offset], ecx
484
           mov [offset+4], eax
485
           mov [count], edx
486
           mov [buff], esi
487
           mov byte [buff+4], al
488
           mov [name], ebx
489
490
 
491
           lea ebx, [cmd]
492
           sub ebx, new_app_base
493
           int 0x40
494
           ret
495
endp
496
497
 
498
proc load_file stdcall, file_name:dword
499
           locals
500
             attr       dd ?
501
             flags      dd ?
502
             cr_time    dd ?
503
             cr_date    dd ?
504
             acc_time   dd ?
505
             acc_date   dd ?
506
             mod_time   dd ?
507
             mod_date   dd ?
508
             file_size  dd ?
509
510
 
511
             file2      dd ?
211 serge 512
           endl
188 serge 513
514
 
515
           stdcall get_fileinfo, [file_name], eax
516
           test eax, eax
164 serge 517
           jnz .fail
188 serge 518
164 serge 519
 
206 serge 520
521
 
188 serge 522
           mov [file], eax
523
164 serge 524
 
188 serge 525
           cmp ebx, [file_size]
526
           jne .cleanup
527
211 serge 528
 
188 serge 529
           cmp dword [eax], 0x4B43504B
211 serge 530
           jne .exit
531
532
 
533
534
 
535
           jz .cleanup
536
537
 
538
           stdcall unpack, [file], eax
539
           stdcall kernel_free, [file]
540
           mov eax, [file2]
541
.exit:
542
           ret
188 serge 543
.cleanup:
544
           stdcall kernel_free, [file]
545
.fail:
546
           xor eax, eax
547
           ret
548
endp
549
164 serge 550
 
188 serge 551
proc get_proc_ex stdcall, proc_name:dword, imports:dword
552
553
 
554
           mov edx, [imports]
555
           test edx, edx
198 serge 556
           jz .end
557
           mov edx, [edx]
188 serge 558
           test edx, edx
559
           jz .end
560
.next:
561
           mov eax, [edx]
562
           test eax, eax
164 serge 563
           jz .next_table
188 serge 564
164 serge 565
 
188 serge 566
           stdcall strncmp, eax, [proc_name], 16
567
           pop edx
568
           test eax, eax
569
           jz .ok
570
164 serge 571
 
188 serge 572
           jmp .next
573
.next_table:
574
           add [imports], 4
575
           jmp .look_up
576
.ok:
577
           mov eax, [edx+4]
578
           ret
579
.end:
580
           xor eax, eax
581
           ret
582
endp
583
164 serge 584
 
188 serge 585
proc fix_coff_symbols stdcall, sec:dword, symbols:dword,\
586
                      sym_count:dword, strings:dword, imports:dword
587
           locals
588
             retval dd ?
589
           endl
590
164 serge 591
 
188 serge 592
           mov [retval], 1
593
.fix:
594
           movzx ebx, [edi+CSYM.SectionNumber]
595
           test ebx, ebx
596
           jnz .internal
597
           mov eax, dword [edi+CSYM.Name]
598
           test eax, eax
599
           jnz @F
600
164 serge 601
 
188 serge 602
           add edi, [strings]
603
@@:
604
           push edi
605
           stdcall get_proc_ex, edi,[imports]
606
           pop edi
607
164 serge 608
 
188 serge 609
           test eax, eax
610
           jnz @F
611
164 serge 612
 
188 serge 613
           call sys_msg_board_str
614
           mov esi, edi
615
           call sys_msg_board_str
616
           mov esi, msg_CR
617
           call sys_msg_board_str
618
164 serge 619
 
188 serge 620
@@:
621
           mov edi, [symbols]
622
           mov [edi+CSYM.Value], eax
623
           jmp .next
624
.internal:
625
           dec ebx
626
           shl ebx, 3
627
           lea ebx, [ebx+ebx*4]
628
           add ebx, [sec]
629
630
 
631
           add [edi+CSYM.Value], eax
632
.next:
633
           add edi, CSYM_SIZE
634
           mov [symbols], edi
635
           dec [sym_count]
636
           jnz .fix
637
           mov eax, [retval]
638
           ret
639
endp
164 serge 640
641
 
642
proc fix_coff_relocs stdcall, coff:dword, sec:dword, sym:dword
188 serge 643
	   locals
164 serge 644
             n_sec     dd ?
188 serge 645
	   endl
164 serge 646
647
 
188 serge 648
           movzx ebx, [eax+CFH.nSections]
649
           mov [n_sec], ebx
650
.fix_sec:
651
           mov esi, [sec]
652
	   mov edi, [esi+CFS.PtrReloc]
164 serge 653
           add edi, [coff]
188 serge 654
164 serge 655
 
188 serge 656
           test ecx, ecx
657
           jz .next
658
.next_reloc:
659
	   mov ebx, [edi+CRELOC.SymIndex]
164 serge 660
	   add ebx,ebx
661
	   lea ebx,[ebx+ebx*8]
662
           add ebx, [sym]
188 serge 663
164 serge 664
 
188 serge 665
164 serge 666
 
188 serge 667
           je .dir_32
668
164 serge 669
 
188 serge 670
           jne .next_reloc
671
.rel_32:
672
	   mov eax, [edi+CRELOC.VirtualAddress]
164 serge 673
           add eax, [esi+CFS.VirtualAddress]
188 serge 674
           sub edx, eax
675
           sub edx, 4
676
           jmp .fix
677
.dir_32:
678
	   mov eax, [edi+CRELOC.VirtualAddress]
679
           add eax, [esi+CFS.VirtualAddress]
680
.fix:
681
           add [eax], edx
682
           add edi, 10
683
           dec ecx
684
           jnz .next_reloc
685
.next:
686
           add [sec], COFF_SECTION_SIZE
206 serge 687
           dec [n_sec]
188 serge 688
           jnz .fix_sec
689
.exit:
164 serge 690
	   ret
691
endp
692
693
 
188 serge 694
proc load_driver stdcall, file_name:dword
695
           locals
696
             coff      dd ?
697
             sym       dd ?
698
             strings   dd ?
699
             img_size  dd ?
700
             img_base  dd ?
701
             start     dd ?
702
703
 
704
                       dd ?
705
           endl
706
707
 
708
214 serge 709
 
188 serge 710
           jz .exit
227 serge 711
188 serge 712
 
713
714
 
715
           xor ebx, ebx
716
717
 
718
@@:
719
           add ebx, [edx+CFS.SizeOfRawData]
720
           add ebx, 15
721
           and ebx, not 15
722
           add edx, COFF_SECTION_SIZE
206 serge 723
           dec ecx
188 serge 724
           jnz @B
725
           mov [img_size], ebx
726
727
 
728
           test eax, eax
729
           jz .fail
730
           mov [img_base], eax
731
732
 
733
           xor eax, eax
734
           mov ecx, [img_size]
735
           add ecx, 4095
736
           and ecx, not 4095
737
           shr ecx, 2
738
           cld
739
           rep stosd
740
741
 
742
           movzx ebx, [edx+CFH.nSections]
743
           mov edi, [img_base]
744
           lea eax, [edx+20]
745
@@:
746
           mov [eax+CFS.VirtualAddress], edi
747
           mov esi, [eax+CFS.PtrRawData]
748
           test esi, esi
749
           jnz .copy
750
           add edi, [eax+CFS.SizeOfRawData]
751
           jmp .next
752
.copy:
753
           add esi, edx
754
           mov ecx, [eax+CFS.SizeOfRawData]
755
           cld
756
           rep movsb
757
.next:
758
           add edi, 15
759
           and edi, not 15
760
           add eax, COFF_SECTION_SIZE
206 serge 761
           dec ebx
188 serge 762
           jnz @B
763
764
 
765
           add ebx, edx
766
           mov [sym], ebx
767
           mov ecx, [edx+CFH.nSymbols]
768
           add ecx,ecx
769
           lea ecx,[ecx+ecx*8] ;ecx*=18 = nSymbols*CSYM_SIZE
770
           add ecx, [sym]
771
           mov [strings], ecx
772
773
 
774
           mov dword [ebx], kernel_export
775
           mov dword [ebx+4], 0
776
           lea eax, [edx+20]
777
778
 
779
                                     [strings], ebx
780
           test eax, eax
781
           jz .link_fail
227 serge 782
188 serge 783
 
784
           add ebx, 20
785
           stdcall fix_coff_relocs, [coff], ebx, [sym]
786
787
 
788
           stdcall get_coff_sym,[sym],[ebx+CFH.nSymbols],szVersion
227 serge 789
           test eax, eax
790
           jz .link_fail
791
792
 
793
           shr eax, 16
794
           cmp eax, DRV_COMPAT
795
           jb .ver_fail
796
797
 
798
           ja .ver_fail
799
800
 
801
           stdcall get_coff_sym,[sym],[ebx+CFH.nSymbols],szSTART
188 serge 802
           mov [start], eax
803
804
 
805
806
 
807
           stdcall ebx, DRV_ENTRY
214 serge 808
           test eax, eax
188 serge 809
           jnz .ok
810
811
 
812
           xor eax, eax
813
           ret
814
.ok:
815
           mov ebx, [img_base]
816
           mov [eax+SRV.base], ebx
817
           mov ecx, [start]
214 serge 818
           mov [eax+SRV.entry], ecx
819
           ret
188 serge 820
227 serge 821
 
822
           mov esi, msg_CR
823
           call sys_msg_board_str
824
           mov esi, [file_name]
825
           call sys_msg_board_str
826
           mov esi, msg_CR
827
           call sys_msg_board_str
828
           mov esi, msg_version
829
           call sys_msg_board_str
830
           mov esi, msg_www
831
           call sys_msg_board_str
832
           jmp .cleanup
833
834
 
835
           mov esi, msg_module
836
           call sys_msg_board_str
837
           mov esi, [file_name]
838
           call sys_msg_board_str
839
           mov esi, msg_CR
840
           call sys_msg_board_str
841
.cleanup:
842
           stdcall kernel_free,[img_base]
843
.fail:
188 serge 844
           stdcall kernel_free, [coff]
227 serge 845
.exit:
846
           xor eax, eax
188 serge 847
           ret
848
endp
164 serge 849
850
 
198 serge 851
proc load_library stdcall, file_name:dword
852
           locals
853
             coff      dd ?
854
             sym       dd ?
855
             strings   dd ?
856
             img_size  dd ?
857
             img_base  dd ?
858
             exports   dd ?
859
           endl
860
861
 
862
863
 
864
865
 
866
           jz .fail
867
868
 
869
           movzx ecx, [eax+CFH.nSections]
870
           xor ebx, ebx
871
872
 
873
@@:
874
           add ebx, [edx+CFS.SizeOfRawData]
875
           add ebx, 15
876
           and ebx, not 15
877
           add edx, COFF_SECTION_SIZE
206 serge 878
           dec ecx
198 serge 879
           jnz @B
880
           mov [img_size], ebx
881
882
 
883
           stdcall user_alloc, [img_size]
884
885
 
886
           jz .fail
887
           mov [img_base], eax
888
889
 
890
           movzx ebx, [edx+CFH.nSections]
891
           mov edi, [img_base]
892
           lea eax, [edx+20]
893
@@:
894
           mov [eax+CFS.VirtualAddress], edi
895
           mov esi, [eax+CFS.PtrRawData]
896
           test esi, esi
897
           jnz .copy
898
           add edi, [eax+CFS.SizeOfRawData]
899
           jmp .next
900
.copy:
901
           add esi, edx
902
           add edi, new_app_base
903
           mov ecx, [eax+CFS.SizeOfRawData]
904
           cld
905
           rep movsb
906
.next:
907
           add edi, 15-new_app_base
908
           and edi, not 15
909
           add eax, COFF_SECTION_SIZE
206 serge 910
           dec ebx
198 serge 911
           jnz @B
912
913
 
914
           add ebx, edx
915
           mov [sym], ebx
916
           mov ecx, [edx+CFH.nSymbols]
917
           add ecx,ecx
918
           lea ecx,[ecx+ecx*8] ;ecx*=18 = nSymbols*CSYM_SIZE
919
           add ecx, [sym]
920
           mov [strings], ecx
921
922
 
923
924
 
925
                                     [strings], dword 0
926
           test eax, eax
927
           jnz @F
928
929
 
930
           mov edx, [coff]
931
           movzx ebx, [edx+CFH.nSections]
932
           mov edi, new_app_base
933
           lea eax, [edx+20]
934
@@:
935
           add [eax+CFS.VirtualAddress], edi  ;patch user space offset
936
           add eax, COFF_SECTION_SIZE
206 serge 937
           dec ebx
198 serge 938
           jnz @B
939
940
 
941
           stdcall fix_coff_relocs, [coff], edx, [sym]
942
943
 
944
           stdcall get_coff_sym,[sym],[ebx+CFH.nSymbols],szEXPORTS
945
           mov [exports], eax
946
947
 
948
           mov eax, [exports]
949
           ret
950
.fail:
951
           xor eax, eax
952
           ret
953
endp
954
955
 
214 serge 956
proc stop_all_services
957
           not [srv_map]
227 serge 958
.next:
214 serge 959
           bsf eax, [srv_map]
960
           jnz .find
961
           ret
962
.find:
963
           btr [srv_map], eax
964
           shl eax,0x02
965
           lea eax,[srv_tab+eax+eax*8]   ;srv_tab+eax*36
966
           cmp [eax+SRV.magic], ' SRV'
227 serge 967
           jne .next
968
           cmp [eax+SRV.size], SRV_SIZE
969
           jne .next
970
           mov ebx, [eax+SRV.entry]
214 serge 971
           stdcall ebx, dword -1
972
           jmp .next
973
endp
974
198 serge 975
 
214 serge 976
 
202 diamond 977
drv_infinity   db '/rd/1/drivers/infinity.obj', 0
978
drv_hw_mouse   db '/rd/1/drivers/ati2d.obj',0
227 serge 979
164 serge 980
 
981
szInfinity     db 'INFINITY',0
982
szHwMouse      db 'HWCURSOR',0
227 serge 983
164 serge 984
 
985
szEXPORTS      db 'EXPORTS',0
986
szIMPORTS      db 'IMPORTS',0
987
988
 
188 serge 989
msg_module     db 'in module ',0
990
msg_version    db 'incompatible driver version',13,10,0
227 serge 991
msg_www        db 'please visit www.kolibrios.org',13,10,0
992
msg_CR         db  13,10,0
188 serge 993
994
 
214 serge 995
create_cursor    dd 0
227 serge 996
set_hw_cursor    dd 0
214 serge 997
hw_restore       dd 0
221 serge 998
214 serge 999
 
164 serge 1000
services:
1001
           dd szSound,    drv_sound
1002
           dd szInfinity, drv_infinity
1003
           dd szHwMouse,  drv_hw_mouse
227 serge 1004
           dd 0
164 serge 1005