Subversion Repositories Kolibri OS

Rev

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

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