Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
750 victor 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
3
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
4
;; Distributed under terms of the GNU General Public License    ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
714 Lrz 7
 
750 victor 8
$Revision: 941 $
9
 
714 Lrz 10
struc VBE_VGAInfo {
11
  .VESASignature          dd ?    ; char
12
  .VESAVersion            dw ?    ; short
13
  .OemStringPtr           dd ?    ; char *
14
  .Capabilities           dd ?    ; ulong
15
  .VideoModePtr           dd ?    ; ulong
16
  .TotalMemory            dw ?    ; short
17
  ; VBE 2.0+
18
  .OemSoftwareRev         db ?    ; short
19
  .OemVendorNamePtr       dw ?    ; char *
20
  .OemProductNamePtr      dw ?    ; char *
21
  .OemProductRevPtr       dw ?    ; char *
22
  .reserved               rb 222  ; char
23
  .OemData                rb 256  ; char
24
}
25
 
26
struc VBE_ModeInfo {
27
  .ModeAttributes         dw ?    ; short
28
  .WinAAttributes         db ?    ; char
29
  .WinBAttributes         db ?    ; char
30
  .WinGranularity         dw ?    ; short
31
  .WinSize                dw ?    ; short
32
  .WinASegment            dw ?    ; ushort
33
  .WinBSegment            dw ?    ; ushort
34
  .WinFuncPtr             dd ?    ; void *
35
  .BytesPerScanLine       dw ?    ; short
36
  .XRes                   dw ?    ; short
37
  .YRes                   dw ?    ; short
38
  .XCharSize              db ?    ; char
39
  .YCharSize              db ?    ; char
40
  .NumberOfPlanes         db ?    ; char
41
  .BitsPerPixel           db ?    ; char
42
  .NumberOfBanks          db ?    ; char
43
  .MemoryModel            db ?    ; char
44
  .BankSize               db ?    ; char
45
  .NumberOfImagePages     db ?    ; char
46
  .res1                   db ?    ; char
47
  .RedMaskSize            db ?    ; char
48
  .RedFieldPosition       db ?    ; char
49
  .GreenMaskSize          db ?    ; char
50
  .GreenFieldPosition     db ?    ; char
51
  .BlueMaskSize           db ?    ; char
52
  .BlueFieldPosition      db ?    ; char
53
  .RsvedMaskSize          db ?    ; char
54
  .RsvedFieldPosition     db ?    ; char
55
  .DirectColorModeInfo    db ?    ; char ; MISSED IN THIS TUTORIAL!! SEE ABOVE
56
  ; VBE 2.0+
57
  .PhysBasePtr            dd ?    ; ulong
58
  .OffScreenMemOffset     dd ?    ; ulong
59
  .OffScreenMemSize       dw ?    ; short
60
  ; VBE 3.0+
61
  .LinbytesPerScanLine    dw ?    ; short
62
  .BankNumberOfImagePages db ?    ; char
63
  .LinNumberOfImagePages  db ?    ; char
64
  .LinRedMaskSize         db ?    ; char
65
  .LinRedFieldPosition    db ?    ; char
66
  .LingreenMaskSize       db ?    ; char
67
  .LinGreenFieldPosition  db ?    ; char
68
  .LinBlueMaskSize        db ?    ; char
69
  .LinBlueFieldPosition   db ?    ; char
70
  .LinRsvdMaskSize        db ?    ; char
71
  .LinRsvdFieldPosition   db ?    ; char
72
  .MaxPixelClock          dd ?    ; ulong
73
  .res2                   rb 190  ; char
74
}
75
 
76
virtual at $A000
77
  vi VBE_VGAInfo
78
  mi VBE_ModeInfo
79
modes_table:
80
end virtual
81
cursor_pos  dw 0         ;âðåìåííîå õðàíåíèå êóðñîðà.
82
home_cursor dw 0    ;current shows rows a table
83
end_cursor  dw 0     ;end of position current shows rows a table
834 diamond 84
scroll_start dw 0    ;start position of scroll bar
85
scroll_end  dw 0     ;end position of scroll bar
714 Lrz 86
long_v_table equ 9   ;long of visible video table
731 diamond 87
size_of_step equ 10
88
scroll_area_size equ (long_v_table-2)
714 Lrz 89
int2str:
90
        dec     bl
91
        jz      @f
92
        xor     edx,edx
93
        div     ecx
94
        push    edx
95
        call    int2str
96
        pop     eax
97
    @@: or      al,0x30
98
        mov     [ds:di],al
99
        inc     di
100
        ret
101
 
102
int2strnz:
103
        cmp     eax,ecx
104
        jb      @f
105
        xor     edx,edx
106
        div     ecx
107
        push    edx
108
        call    int2strnz
109
        pop     eax
110
    @@: or      al,0x30
111
        mov     [es:di],al
112
        inc     di
113
        ret
114
;-------------------------------------------------------
115
;Write message about incorrect v_mode and write message about jmp on swith v_mode
116
v_mode_error:
117
        _setcursor 19,2
118
        mov     si, fatalsel
119
        call    printplain
120
        _setcursor 20,2
121
        mov     si,pres_key
122
        call    printplain
123
        xor     eax,eax
124
        int     16h
125
        jmp     cfgmanager.d
126
;-------------------------------------------------------
127
;
128
 
129
 
130
 
131
;-------------------------------------------------------
132
print_vesa_info:
133
        _setcursor 5,2
134
 
135
        mov     [es:vi.VESASignature],'VBE2'
136
        mov     ax,0x4F00
137
        mov     di,vi      ;0xa000
138
        int     0x10
139
        or      ah,ah
140
        jz      @f
141
        mov     [es:vi.VESASignature],'VESA'
142
        mov     ax,$4F00
143
        mov     di,vi
144
        int     0x10
145
        or      ah,ah
146
        jnz     .exit
147
  @@:
148
        cmp     [es:vi.VESASignature],'VESA'
149
        jne     .exit
150
        cmp     [es:vi.VESAVersion],0x0100
151
        jb      .exit
152
        jmp     .vesaok2
153
 
154
  .exit:
155
        mov     si,novesa
156
        call    printplain
157
        ret
158
 
159
  .vesaok2:
160
        mov     ax,[es:vi.VESAVersion]
161
        add     ax,'00'
162
 
163
        mov     [s_vesa.ver], ah
164
        mov     [s_vesa.ver+2], al
165
        mov     si,s_vesa
166
        call    printplain
167
 
168
        _setcursor 4,2
169
        mov     si,word[es:vi.OemStringPtr]
170
        mov     di,si
171
 
172
        push    ds
173
        mov     ds,word[es:vi.OemStringPtr+2]
174
        call    printplain
175
        pop     ds
176
 
177
        ret
178
;-----------------------------------------------------------------------------
179
 
180
calc_vmodes_table:
181
        pushad
182
 
183
;        push    0
184
;        pop     es
185
 
730 diamond 186
        lfs     si, [es:vi.VideoModePtr]
714 Lrz 187
 
188
        mov     bx,modes_table
189
;save no vesa mode of work 320x200, EGA/CGA 256 梥⮢ and 640x480, VGA 16 梥⮢
190
        mov     word [es:bx],640
191
        mov     word [es:bx+2],480
192
        mov     word [es:bx+6],0x13
193
 
194
        mov     word [es:bx+10],640
195
        mov     word [es:bx+12],480
196
        mov     word [es:bx+16],0x12
197
        add     bx,20
198
  .next_mode:
199
        mov     cx,word [fs:si] ; mode number
200
        cmp     cx,-1
201
        je      .modes_ok.2
202
 
203
        mov     ax,0x4F01
204
        mov     di,mi
205
        int     0x10
206
 
207
        or      ah,ah
208
        jnz     .modes_ok.2;vesa_info.exit
209
 
210
        test    [es:mi.ModeAttributes],00000001b   ;videomode support ?
211
        jz      @f
212
        test    [es:mi.ModeAttributes],00010000b   ;picture ?
213
        jz      @f
214
        test    [es:mi.ModeAttributes],10000000b   ;LFB ?
215
        jz      @f
216
 
730 diamond 217
;        cmp     [es:mi.BitsPerPixel], 24
218
;        jb      @f
219
 
714 Lrz 220
        cmp     [es:mi.BitsPerPixel],16
221
        jne     .l0
222
        cmp     [es:mi.GreenMaskSize],5
223
        jne     .l0
224
        mov     [es:mi.BitsPerPixel],15
225
 
226
 
227
  .l0:
228
        cmp     [es:mi.XRes],640
229
        jb      @f
230
        cmp     [es:mi.YRes],480
231
        jb      @f
232
;        cmp     [es:mi.BitsPerPixel],8
233
;        jb      @f
234
 
235
        mov     ax,[es:mi.XRes]
236
        mov     [es:bx+0],ax               ; +0[2] : resolution X
237
        mov     ax,[es:mi.YRes]
238
        mov     [es:bx+2],ax               ; +2[2] : resolution Y
239
        mov     ax,[es:mi.ModeAttributes]
240
        mov     [es:bx+4],ax               ; +4[2] : attributes
241
 
242
        cmp     [s_vesa.ver],'2'
243
        jb      .lp1
244
 
245
        or      cx,0x4000  ; use LFB
246
  .lp1: mov     [es:bx+6],cx               ; +6 : mode number
247
        movzx   ax,byte [es:mi.BitsPerPixel]
248
        mov     word [es:bx+8],ax               ; +8 : bits per pixel
249
        add     bx,size_of_step
250
 
251
    @@:
252
        add     si,2
253
        jmp     .next_mode
254
 
255
  .modes_ok.2:
256
 
257
        mov     word[es:bx],-1  ;end video table
258
        mov     word[end_cursor],bx     ;save end cursor position
259
;;;;;;;;;;;;;;;;;;
260
;Sort array
261
;        mov     si,modes_table
262
;.new_mode:
263
;        mov     ax,word [es:si]
264
;        cmp     ax,-1
265
;        je      .exxit
266
;        add     ax,word [es:si+2]
267
;        add     ax,word [es:si+8]
268
;        mov     bp,si
269
;.again:
270
;        add     bp,12
271
;        mov     bx,word [es:bp]
272
;        cmp     bx,-1
273
;        je      .exit
274
;        add     bx,word [es:bp+2]
275
;        add     bx,word [es:bp+8]
276
;
277
;        cmp     ax,bx
278
;        ja      .loops
279
;        jmp     .again
280
;.loops:
281
;        push    dword [es:si]
282
;        push    dword [es:si+4]
283
;        push    dword [es:si+8]
284
;        push    dword [es:bp]
285
;        push    dword [es:bp+4]
286
;        push    dword [es:bp+8]
287
;
288
;        pop     dword [es:si+8]
289
;        pop     dword [es:si+4]
290
;        pop     dword [es:si]
291
;        pop     dword [es:bp+8]
292
;        pop     dword [es:bp+4]
293
;        pop     dword [es:bp]
294
;        jmp     .new_mode
295
;
296
;.exit:  add     si,12
297
;        jmp     .new_mode
298
;.exxit:
299
        popad
300
        ret
301
 
302
;-----------------------------------------------------------------------------
303
 
304
draw_current_vmode:
305
        push    0
306
        pop     es
307
 
308
        mov     si,word [cursor_pos]
309
 
310
        cmp     word [es:si+6],0x12
311
        je      .no_vesa_0x12
312
 
313
        cmp     word [es:si+6],0x13
314
        je      .no_vesa_0x13
315
 
316
        mov     di,loader_block_error
317
        movzx   eax,word[es:si+0]
318
        mov     ecx,10
319
        call    int2strnz
320
        mov     byte[es:di],'x'
321
        inc     di
322
        movzx   eax,word[es:si+2]
323
        call    int2strnz
324
        mov     byte[es:di],'x'
325
        inc     di
326
        movzx   eax,word[es:si+8]
327
        call    int2strnz
328
        mov     dword[es:di],0x00000d0a
329
        mov     si,loader_block_error
330
        push    ds
331
        push    es
332
        pop     ds
333
        call    printplain
334
        pop     ds
335
        ret
336
.no_vesa_0x13:
337
        mov     si,mode0
338
        jmp     .print
339
.no_vesa_0x12:
340
        mov     si,mode9
341
.print:
342
        call    printplain
343
        ret
344
;-----------------------------------------------------------------------------
345
check_first_parm:
749 Lrz 346
        mov     si,word [preboot_graph]
347
        test    si,si
714 Lrz 348
        jnz      .no_zero        ;if no zero
349
.zerro:
350
;        mov     ax,modes_table
351
;        mov     word [cursor_pos],ax
352
;        mov     word [home_cursor],ax
353
;        mov     word [preboot_graph],ax
354
;SET default video of mode first probe will fined a move of work 1024x768@32
355
 
356
        mov     ax,1024
357
        mov     bx,768
358
        mov     si,modes_table
359
        call    .loops
360
        test    ax,ax
361
        jz     .ok_found_mode
362
        mov     ax,800
363
        mov     bx,600
364
        mov     si,modes_table
365
        call    .loops
366
        test    ax,ax
367
        jz     .ok_found_mode
368
        mov     ax,640
369
        mov     bx,480
370
        mov     si,modes_table
371
        call    .loops
372
        test    ax,ax
373
        jz     .ok_found_mode
374
 
375
        mov     si,modes_table
746 Lrz 376
        jmp     .ok_found_mode
714 Lrz 377
 
378
 
746 Lrz 379
 
380
.no_zero:
749 Lrz 381
	mov	bp,word [number_vm]
382
        cmp     bp,word [es:si+6]
383
        jz      .ok_found_mode
746 Lrz 384
        mov     ax,word [x_save]
385
        mov     bx,word [y_save]
386
        mov     si,modes_table
387
        call    .loops
388
        test    ax,ax
389
        jz     .ok_found_mode
390
 
749 Lrz 391
	mov    si,modes_table
746 Lrz 392
;        cmp     ax,modes_table
393
;        jb      .zerro           ;check on correct if bellow
394
;        cmp     ax,word [end_cursor]
395
;        ja      .zerro           ;check on correct if anymore
396
 
714 Lrz 397
.ok_found_mode:
398
        mov     word [home_cursor],si
399
;        mov     word [cursor_pos],si
400
        mov     word [preboot_graph],si
401
        mov     ax,si
402
 
403
        mov     ecx,long_v_table
404
 
405
.loop:  add     ax,size_of_step
406
        cmp     ax,word [end_cursor]
407
        jae     .next_step
408
        loop    .loop
409
.next_step:
410
        sub     ax,size_of_step*long_v_table
411
        cmp     ax,modes_table
738 diamond 412
        jae     @f
413
        mov     ax,modes_table
414
@@:
714 Lrz 415
 
416
        mov     word[home_cursor],ax
417
        push    word [preboot_graph]
418
        pop     word [cursor_pos]
419
        ret
420
;;;;;;;;;;;;;;;;;;;;;;;;;;;
421
.loops:
422
        cmp     ax,word [es:si]
423
        jne     .next
424
        cmp     bx,word [es:si+2]
425
        jne     .next
426
        cmp     word [es:si+8],32
427
        je      .ok
428
        cmp     word [es:si+8],24
429
        je      .ok
430
.next:  add     si,size_of_step
431
        cmp     word [es:si],-1
432
        je      .exit
433
        jmp     .loops
434
.ok:    xor     ax,ax
435
.exit:  ret
436
 
437
 
438
;-----------------------------------------------------------------------------
439
 
746 Lrz 440
;default_vmode:
714 Lrz 441
 
442
;-----------------------------------------------------------------------------
443
draw_vmodes_table:
444
        _setcursor 9, 2
445
        mov     si,gr_mode
446
        call    printplain
447
 
448
        mov     si,_st
449
        call    printplain
450
 
451
        push    word [cursor_pos]
452
        pop     ax
453
        push    word [home_cursor]
454
        pop     si
455
        mov     cx,si
456
 
457
        cmp     ax,si
458
        je      .ok
459
        jb      .low
460
 
461
 
462
        add     cx,size_of_step*long_v_table
463
 
464
        cmp     ax,cx
465
        jb      .ok
466
 
467
        sub     cx,size_of_step*long_v_table
468
        add     cx,size_of_step
469
        cmp     cx,word[end_cursor]
470
        jae     .ok
471
        add     si,size_of_step
472
        push    si
473
        pop     word [home_cursor]
474
        jmp     .ok
475
 
476
 
477
.low:   sub     cx,size_of_step
478
        cmp     cx,modes_table
479
        jb      .ok
480
        push    cx
481
        push    cx
482
        pop     word [home_cursor]
483
        pop     si
484
 
485
 
486
.ok:
834 diamond 487
; calculate scroll position
488
        push    si
489
        mov     ax, [end_cursor]
490
        sub     ax, modes_table
491
        mov     bx, size_of_step
492
        cwd
493
        div     bx
494
        mov     si, ax          ; si = size of list
495
        mov     ax, [home_cursor]
496
        sub     ax, modes_table
497
        cwd
498
        div     bx
499
        mov     di, ax
500
        mov     ax, scroll_area_size*long_v_table
501
        cwd
502
        div     si
503
        test    ax, ax
504
        jnz     @f
505
        inc     ax
506
@@:
507
        cmp     al, scroll_area_size
508
        jb      @f
509
        mov     al, scroll_area_size
510
@@:
511
        mov     cx, ax
512
; cx = scroll height
513
; calculate scroll pos
514
        xor     bx, bx          ; initialize scroll pos
515
        sub     al, scroll_area_size+1
516
        neg     al
517
        sub     si, long_v_table-1
518
        jbe     @f
519
        mul     di
520
        div     si
521
        mov     bx, ax
522
@@:
523
        inc     bx
524
        imul    ax, bx, size_of_step
525
        add     ax, [home_cursor]
526
        mov     [scroll_start], ax
527
        imul    cx, size_of_step
528
        add     ax, cx
529
        mov     [scroll_end], ax
530
        pop     si
714 Lrz 531
        mov     bp,long_v_table               ;show rows
532
.@@_next_bit:
834 diamond 533
;clear cursor
534
        mov     word[ds:_r1+21],'  '
535
        mov     word[ds:_r1+50],'  '
536
 
537
        mov     word[ds:_r2+21],'  '
538
        mov     word[ds:_r2+45],'  '
539
 
540
        mov     word[ds:_rs+21],'  '
541
        mov     word[ds:_rs+46],'  '
542
; draw string
714 Lrz 543
        cmp     word [es:si+6],0x12
544
        je      .show_0x12
545
        cmp     word [es:si+6],0x13
546
        je      .show_0x13
547
 
548
        movzx   eax,word[es:si]
549
        cmp     ax,-1
550
        je      .@@_end
551
        mov     di,_rs+23
552
        mov     ecx,10
553
        mov     bl,4
554
        call    int2str
555
        movzx   eax,word[es:si+2]
556
        inc     di
557
        mov     bl,4
558
        call    int2str
559
 
560
        movzx   eax,word[es:si+8]
561
        inc     di
562
        mov     bl,2
563
        call    int2str
564
 
565
        cmp     si, word [cursor_pos]
566
        jne     .next
567
;draw   cursor
568
        mov     word[ds:_rs+21],'>>'
569
        mov     word[ds:_rs+46],'<<'
570
 
571
 
572
 
573
.next:
574
        push    si
575
        mov     si,_rs
576
.@@_sh:
834 diamond 577
; add to the string pseudographics for scrollbar
578
        pop     bx
579
        push    bx
580
        mov     byte [si+53], ' '
581
        cmp     bx, [scroll_start]
582
        jb      @f
583
        cmp     bx, [scroll_end]
584
        jae     @f
585
        mov     byte [si+53], 0xDB ; filled bar
586
@@:
587
        push    bx
588
        add     bx, size_of_step
589
        cmp     bx, [end_cursor]
590
        jnz     @f
591
        mov     byte [si+53], 31 ; 'down arrow' symbol
592
@@:
593
        sub     bx, [home_cursor]
594
        cmp     bx, size_of_step*long_v_table
595
        jnz     @f
596
        mov     byte [si+53], 31 ; 'down arrow' symbol
597
@@:
598
        pop     bx
599
        cmp     bx, [home_cursor]
600
        jnz     @f
601
        mov     byte [si+53], 30 ; 'up arrow' symbol
602
@@:
714 Lrz 603
        call    printplain
604
        pop     si
605
        add     si,size_of_step
606
 
607
        dec     bp
608
        jnz     .@@_next_bit
609
 
610
.@@_end:
611
        mov     si,_bt
612
        call    printplain
613
        ret
614
.show_0x13:
615
        push    si
616
 
617
        cmp     si, word [cursor_pos]
618
        jne     @f
619
        mov     word[ds:_r1+21],'>>'
620
        mov     word[ds:_r1+50],'<<'
621
@@:
622
        mov     si,_r1
623
        jmp     .@@_sh
624
.show_0x12:
625
        push    si
626
        cmp     si, word [cursor_pos]
627
        jne     @f
628
 
629
        mov     word[ds:_r2+21],'>>'
630
        mov     word[ds:_r2+45],'<<'
631
@@:
632
        mov     si,_r2
633
        jmp     .@@_sh
634
 
635
;-----------------------------------------------------------------------------
636
;Clear arrea of current video page (0xb800)
637
clear_vmodes_table:
638
        pusha
639
       ; draw frames
640
        push    es
641
        push    0xb800
642
        pop     es
643
        mov     di,1444
644
        xor     ax,ax
645
        mov     ah, 1*16+15
646
        mov     cx,70
647
        mov     bp,12
648
.loop_start:
941 Lrz 649
        rep     stosw            ;®ç¨á⪠ ®¡« á⨠íªà ­ 
714 Lrz 650
        mov     cx,70
651
        add     di,20
941 Lrz 652
        dec     bp               ;㬥­ì襭¨¥ bp, ¢ bp áç¥â稪
714 Lrz 653
        jns        .loop_start
654
        pop     es
655
        popa
656
        ret
657
 
658
;-----------------------------------------------------------------------------
659
 
660
set_vmode:
661
        push    0 ;0;x1000
662
        pop     es
663
 
664
        mov     si,word [preboot_graph]            ;[preboot_graph]
665
        mov     cx,word [es:si+6]            ; number of mode
666
 
667
 
668
        mov     ax,word [es:si+0]            ; resolution X
669
        mov     bx,word [es:si+2]            ; resolution Y
670
 
671
 
672
        mov     word [es:0x900A],ax              ; resolution X
673
        mov     word [es:0x900C],bx              ; resolution Y
674
        mov     word [es:0x9008],cx              ; number of mode
675
 
676
        cmp     cx,0x12
677
        je      .mode0x12_0x13
678
        cmp     cx,0x13
679
        je      .mode0x12_0x13
680
 
681
 
682
        cmp     byte [s_vesa.ver],'2'
683
        jb      .vesa12
684
 
685
;  VESA 2 and Vesa 3
686
 
687
        mov     ax,0x4f01
688
        and     cx,0xfff
689
        mov     di,mi;0xa000
690
        int     0x10
691
        ; LFB
692
        mov     eax,[es:mi.PhysBasePtr];di+0x28]
693
        mov     [es:0x9018],eax
694
        ; ---- vbe voodoo
695
        BytesPerLine equ 0x10
696
        mov     ax, [es:di+BytesPerLine]
697
        mov     [es:0x9001], ax
698
        ; BPP
699
        cmp     [es:mi.BitsPerPixel],16
700
        jne     .l0
701
        cmp     [es:mi.GreenMaskSize],5
702
        jne     .l0
703
        mov     [es:mi.BitsPerPixel],15
704
.l0:
705
        mov     al, byte [es:di+0x19]
706
        mov     [es:0x9000], al
707
        jmp     .exit
708
 
709
.mode0x12_0x13:
710
        mov     byte [es:0x9000], 32
711
        or      dword [es:0x9018], 0xFFFFFFFF; 0x800000
712
 
713
 
714
;  VESA 1.2 PM BANK SWITCH ADDRESS
715
 
716
.vesa12:
717
 
718
 
719
        mov     ax,0x4f0A
720
        xor     bx,bx
721
        int     0x10
722
        xor     eax,eax
723
        xor     ebx,ebx
724
        mov     ax,es
725
        shl     eax,4
726
        mov     bx,di
727
        add     eax,ebx
728
        movzx   ebx,word[es:di]
729
        add     eax,ebx
730
        push    0x0000
731
        pop     es
732
        mov     [es:0x9014],eax
733
  .exit:
734
        ret
735
 
736
 
737
;        mov     dword[es:0x9018],0x000A0000
738
;        ret
739
 
740
;=============================================================================
741
;=============================================================================
742
;=============================================================================
743