Subversion Repositories Kolibri OS

Rev

Rev 947 | 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: 1942 $
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
946 lrz 114
 
714 Lrz 115
;-------------------------------------------------------
116
;Write message about incorrect v_mode and write message about jmp on swith v_mode
117
v_mode_error:
118
        _setcursor 19,2
119
        mov     si, fatalsel
120
        call    printplain
121
        _setcursor 20,2
122
        mov     si,pres_key
123
        call    printplain
124
        xor     eax,eax
125
        int     16h
126
        jmp     cfgmanager.d
127
;-------------------------------------------------------
128
;
129
 
130
 
131
 
132
;-------------------------------------------------------
133
print_vesa_info:
134
        _setcursor 5,2
135
 
136
        mov     [es:vi.VESASignature],'VBE2'
137
        mov     ax,0x4F00
138
        mov     di,vi      ;0xa000
139
        int     0x10
140
        or      ah,ah
141
        jz      @f
142
        mov     [es:vi.VESASignature],'VESA'
143
        mov     ax,$4F00
144
        mov     di,vi
145
        int     0x10
146
        or      ah,ah
147
        jnz     .exit
148
  @@:
149
        cmp     [es:vi.VESASignature],'VESA'
150
        jne     .exit
151
        cmp     [es:vi.VESAVersion],0x0100
152
        jb      .exit
153
        jmp     .vesaok2
154
 
155
  .exit:
156
        mov     si,novesa
157
        call    printplain
158
        ret
159
 
160
  .vesaok2:
161
        mov     ax,[es:vi.VESAVersion]
162
        add     ax,'00'
163
 
164
        mov     [s_vesa.ver], ah
165
        mov     [s_vesa.ver+2], al
166
        mov     si,s_vesa
167
        call    printplain
168
 
169
        _setcursor 4,2
170
        mov     si,word[es:vi.OemStringPtr]
171
        mov     di,si
172
 
173
        push    ds
174
        mov     ds,word[es:vi.OemStringPtr+2]
175
        call    printplain
176
        pop     ds
177
 
178
        ret
179
;-----------------------------------------------------------------------------
180
 
181
calc_vmodes_table:
182
        pushad
183
 
184
;        push    0
185
;        pop     es
186
 
730 diamond 187
        lfs     si, [es:vi.VideoModePtr]
714 Lrz 188
 
189
        mov     bx,modes_table
190
;save no vesa mode of work 320x200, EGA/CGA 256 梥⮢ and 640x480, VGA 16 梥⮢
191
        mov     word [es:bx],640
192
        mov     word [es:bx+2],480
193
        mov     word [es:bx+6],0x13
194
 
195
        mov     word [es:bx+10],640
196
        mov     word [es:bx+12],480
197
        mov     word [es:bx+16],0x12
198
        add     bx,20
199
  .next_mode:
200
        mov     cx,word [fs:si] ; mode number
201
        cmp     cx,-1
202
        je      .modes_ok.2
203
 
204
        mov     ax,0x4F01
205
        mov     di,mi
206
        int     0x10
207
 
208
        or      ah,ah
209
        jnz     .modes_ok.2;vesa_info.exit
210
 
211
        test    [es:mi.ModeAttributes],00000001b   ;videomode support ?
212
        jz      @f
213
        test    [es:mi.ModeAttributes],00010000b   ;picture ?
214
        jz      @f
215
        test    [es:mi.ModeAttributes],10000000b   ;LFB ?
216
        jz      @f
217
 
1942 clevermous 218
        cmp     [es:mi.BitsPerPixel], 24        ;It show only videomodes to have support 24 and 32 bpp
947 lrz 219
        jb      @f
730 diamond 220
 
947 lrz 221
;        cmp     [es:mi.BitsPerPixel],16
222
;        jne     .l0
223
;        cmp     [es:mi.GreenMaskSize],5
224
;        jne     .l0
225
;        mov     [es:mi.BitsPerPixel],15
714 Lrz 226
 
227
 
947 lrz 228
.l0:
714 Lrz 229
        cmp     [es:mi.XRes],640
230
        jb      @f
231
        cmp     [es:mi.YRes],480
232
        jb      @f
233
;        cmp     [es:mi.BitsPerPixel],8
234
;        jb      @f
235
 
236
        mov     ax,[es:mi.XRes]
237
        mov     [es:bx+0],ax               ; +0[2] : resolution X
238
        mov     ax,[es:mi.YRes]
239
        mov     [es:bx+2],ax               ; +2[2] : resolution Y
240
        mov     ax,[es:mi.ModeAttributes]
241
        mov     [es:bx+4],ax               ; +4[2] : attributes
242
 
243
        cmp     [s_vesa.ver],'2'
244
        jb      .lp1
245
 
246
        or      cx,0x4000  ; use LFB
1942 clevermous 247
.lp1:   mov     [es:bx+6],cx               ; +6 : mode number
714 Lrz 248
        movzx   ax,byte [es:mi.BitsPerPixel]
249
        mov     word [es:bx+8],ax               ; +8 : bits per pixel
946 lrz 250
        add     bx,size_of_step                 ; size of record
714 Lrz 251
 
252
    @@:
253
        add     si,2
254
        jmp     .next_mode
255
 
256
  .modes_ok.2:
257
 
258
        mov     word[es:bx],-1  ;end video table
259
        mov     word[end_cursor],bx     ;save end cursor position
260
;;;;;;;;;;;;;;;;;;
261
;Sort array
262
;        mov     si,modes_table
263
;.new_mode:
264
;        mov     ax,word [es:si]
265
;        cmp     ax,-1
266
;        je      .exxit
267
;        add     ax,word [es:si+2]
268
;        add     ax,word [es:si+8]
269
;        mov     bp,si
270
;.again:
271
;        add     bp,12
272
;        mov     bx,word [es:bp]
273
;        cmp     bx,-1
274
;        je      .exit
275
;        add     bx,word [es:bp+2]
276
;        add     bx,word [es:bp+8]
277
;
278
;        cmp     ax,bx
279
;        ja      .loops
280
;        jmp     .again
281
;.loops:
282
;        push    dword [es:si]
283
;        push    dword [es:si+4]
284
;        push    dword [es:si+8]
285
;        push    dword [es:bp]
286
;        push    dword [es:bp+4]
287
;        push    dword [es:bp+8]
288
;
289
;        pop     dword [es:si+8]
290
;        pop     dword [es:si+4]
291
;        pop     dword [es:si]
292
;        pop     dword [es:bp+8]
293
;        pop     dword [es:bp+4]
294
;        pop     dword [es:bp]
295
;        jmp     .new_mode
296
;
297
;.exit:  add     si,12
298
;        jmp     .new_mode
299
;.exxit:
300
        popad
301
        ret
302
 
303
;-----------------------------------------------------------------------------
304
 
305
draw_current_vmode:
306
        push    0
307
        pop     es
308
 
309
        mov     si,word [cursor_pos]
310
 
311
        cmp     word [es:si+6],0x12
312
        je      .no_vesa_0x12
313
 
314
        cmp     word [es:si+6],0x13
315
        je      .no_vesa_0x13
316
 
1942 clevermous 317
        mov     di,config_file_variables
714 Lrz 318
        movzx   eax,word[es:si+0]
319
        mov     ecx,10
320
        call    int2strnz
321
        mov     byte[es:di],'x'
322
        inc     di
323
        movzx   eax,word[es:si+2]
324
        call    int2strnz
325
        mov     byte[es:di],'x'
326
        inc     di
327
        movzx   eax,word[es:si+8]
328
        call    int2strnz
329
        mov     dword[es:di],0x00000d0a
1942 clevermous 330
        mov     si,config_file_variables
714 Lrz 331
        push    ds
332
        push    es
333
        pop     ds
334
        call    printplain
335
        pop     ds
336
        ret
337
.no_vesa_0x13:
338
        mov     si,mode0
339
        jmp     .print
340
.no_vesa_0x12:
341
        mov     si,mode9
342
.print:
343
        call    printplain
344
        ret
345
;-----------------------------------------------------------------------------
346
check_first_parm:
1942 clevermous 347
        mov     cx, [number_vm]
348
        jcxz    .novbemode
349
        mov     si, modes_table
350
.findvbemode:
351
        cmp     [es:si+6], cx
352
        jnz     @f
353
        cmp     word [es:si+8],32
354
        je      .ok_found_mode
355
        cmp     word [es:si+8],24
356
        je      .ok_found_mode
357
@@:     add     si,size_of_step
358
        cmp     word [es:si],-1
359
        jnz     .findvbemode
360
.novbemode:
361
        mov     ax, [x_save]
362
        test    ax, ax
363
        jz      .zerro
364
        mov     bx, [y_save]
365
        mov     si, modes_table
366
        call    .loops
367
        test    ax, ax
368
        jz      .ok_found_mode
714 Lrz 369
.zerro:
370
;        mov     ax,modes_table
371
;        mov     word [cursor_pos],ax
372
;        mov     word [home_cursor],ax
373
;        mov     word [preboot_graph],ax
374
;SET default video of mode first probe will fined a move of work 1024x768@32
375
 
376
        mov     ax,1024
377
        mov     bx,768
378
        mov     si,modes_table
379
        call    .loops
380
        test    ax,ax
381
        jz     .ok_found_mode
382
        mov     ax,800
383
        mov     bx,600
384
        mov     si,modes_table
385
        call    .loops
386
        test    ax,ax
387
        jz     .ok_found_mode
388
        mov     ax,640
389
        mov     bx,480
390
        mov     si,modes_table
391
        call    .loops
392
        test    ax,ax
393
        jz     .ok_found_mode
394
 
395
        mov     si,modes_table
396
 
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
 
946 lrz 416
        mov     word [home_cursor],ax
1942 clevermous 417
        mov     si,[preboot_graph]
946 lrz 418
        mov     word [cursor_pos],si
419
 
420
        push    word [es:si]
421
        pop     word [x_save]
422
        push    word [es:si+2]
423
        pop     word [y_save]
424
        push    word [es:si+6]
425
        pop     word [number_vm]
426
 
714 Lrz 427
        ret
428
;;;;;;;;;;;;;;;;;;;;;;;;;;;
429
.loops:
430
        cmp     ax,word [es:si]
431
        jne     .next
432
        cmp     bx,word [es:si+2]
433
        jne     .next
434
        cmp     word [es:si+8],32
435
        je      .ok
436
        cmp     word [es:si+8],24
437
        je      .ok
438
.next:  add     si,size_of_step
439
        cmp     word [es:si],-1
440
        je      .exit
441
        jmp     .loops
442
.ok:    xor     ax,ax
1942 clevermous 443
        ret
444
.exit:  or      ax,-1
445
        ret
714 Lrz 446
 
447
 
448
;-----------------------------------------------------------------------------
449
 
746 Lrz 450
;default_vmode:
714 Lrz 451
 
452
;-----------------------------------------------------------------------------
453
draw_vmodes_table:
454
        _setcursor 9, 2
455
        mov     si,gr_mode
456
        call    printplain
457
 
458
        mov     si,_st
459
        call    printplain
460
 
461
        push    word [cursor_pos]
462
        pop     ax
463
        push    word [home_cursor]
464
        pop     si
465
        mov     cx,si
466
 
467
        cmp     ax,si
468
        je      .ok
469
        jb      .low
470
 
471
 
472
        add     cx,size_of_step*long_v_table
473
 
474
        cmp     ax,cx
475
        jb      .ok
476
 
477
        sub     cx,size_of_step*long_v_table
478
        add     cx,size_of_step
479
        cmp     cx,word[end_cursor]
480
        jae     .ok
481
        add     si,size_of_step
482
        push    si
483
        pop     word [home_cursor]
484
        jmp     .ok
485
 
486
 
487
.low:   sub     cx,size_of_step
488
        cmp     cx,modes_table
489
        jb      .ok
490
        push    cx
491
        push    cx
492
        pop     word [home_cursor]
493
        pop     si
494
 
495
 
496
.ok:
834 diamond 497
; calculate scroll position
498
        push    si
499
        mov     ax, [end_cursor]
500
        sub     ax, modes_table
501
        mov     bx, size_of_step
502
        cwd
503
        div     bx
504
        mov     si, ax          ; si = size of list
505
        mov     ax, [home_cursor]
506
        sub     ax, modes_table
507
        cwd
508
        div     bx
509
        mov     di, ax
510
        mov     ax, scroll_area_size*long_v_table
511
        cwd
512
        div     si
513
        test    ax, ax
514
        jnz     @f
515
        inc     ax
516
@@:
517
        cmp     al, scroll_area_size
518
        jb      @f
519
        mov     al, scroll_area_size
520
@@:
521
        mov     cx, ax
522
; cx = scroll height
523
; calculate scroll pos
524
        xor     bx, bx          ; initialize scroll pos
525
        sub     al, scroll_area_size+1
526
        neg     al
527
        sub     si, long_v_table-1
528
        jbe     @f
529
        mul     di
530
        div     si
531
        mov     bx, ax
532
@@:
533
        inc     bx
534
        imul    ax, bx, size_of_step
535
        add     ax, [home_cursor]
536
        mov     [scroll_start], ax
537
        imul    cx, size_of_step
538
        add     ax, cx
539
        mov     [scroll_end], ax
540
        pop     si
714 Lrz 541
        mov     bp,long_v_table               ;show rows
542
.@@_next_bit:
834 diamond 543
;clear cursor
1942 clevermous 544
        mov     ax,'  '
946 lrz 545
        mov     word[ds:_r1+21],ax
546
        mov     word[ds:_r1+50],ax
834 diamond 547
 
946 lrz 548
        mov     word[ds:_r2+21],ax
549
        mov     word[ds:_r2+45],ax
834 diamond 550
 
946 lrz 551
        mov     word[ds:_rs+21],ax
552
        mov     word[ds:_rs+46],ax
834 diamond 553
; draw string
714 Lrz 554
        cmp     word [es:si+6],0x12
555
        je      .show_0x12
556
        cmp     word [es:si+6],0x13
557
        je      .show_0x13
558
 
559
        movzx   eax,word[es:si]
560
        cmp     ax,-1
561
        je      .@@_end
562
        mov     di,_rs+23
563
        mov     ecx,10
564
        mov     bl,4
565
        call    int2str
566
        movzx   eax,word[es:si+2]
567
        inc     di
568
        mov     bl,4
569
        call    int2str
570
 
571
        movzx   eax,word[es:si+8]
572
        inc     di
573
        mov     bl,2
574
        call    int2str
575
 
576
        cmp     si, word [cursor_pos]
577
        jne     .next
578
;draw   cursor
579
        mov     word[ds:_rs+21],'>>'
580
        mov     word[ds:_rs+46],'<<'
581
 
582
 
583
 
584
.next:
585
        push    si
586
        mov     si,_rs
587
.@@_sh:
834 diamond 588
; add to the string pseudographics for scrollbar
589
        pop     bx
590
        push    bx
591
        mov     byte [si+53], ' '
592
        cmp     bx, [scroll_start]
593
        jb      @f
594
        cmp     bx, [scroll_end]
595
        jae     @f
596
        mov     byte [si+53], 0xDB ; filled bar
597
@@:
598
        push    bx
599
        add     bx, size_of_step
600
        cmp     bx, [end_cursor]
601
        jnz     @f
602
        mov     byte [si+53], 31 ; 'down arrow' symbol
603
@@:
604
        sub     bx, [home_cursor]
605
        cmp     bx, size_of_step*long_v_table
606
        jnz     @f
607
        mov     byte [si+53], 31 ; 'down arrow' symbol
608
@@:
609
        pop     bx
610
        cmp     bx, [home_cursor]
611
        jnz     @f
612
        mov     byte [si+53], 30 ; 'up arrow' symbol
613
@@:
714 Lrz 614
        call    printplain
615
        pop     si
616
        add     si,size_of_step
617
 
618
        dec     bp
619
        jnz     .@@_next_bit
620
 
621
.@@_end:
622
        mov     si,_bt
623
        call    printplain
624
        ret
625
.show_0x13:
626
        push    si
627
 
628
        cmp     si, word [cursor_pos]
629
        jne     @f
630
        mov     word[ds:_r1+21],'>>'
631
        mov     word[ds:_r1+50],'<<'
632
@@:
633
        mov     si,_r1
634
        jmp     .@@_sh
635
.show_0x12:
636
        push    si
637
        cmp     si, word [cursor_pos]
638
        jne     @f
639
 
640
        mov     word[ds:_r2+21],'>>'
641
        mov     word[ds:_r2+45],'<<'
642
@@:
643
        mov     si,_r2
644
        jmp     .@@_sh
645
 
646
;-----------------------------------------------------------------------------
647
;Clear arrea of current video page (0xb800)
648
clear_vmodes_table:
649
        pusha
650
       ; draw frames
651
        push    es
652
        push    0xb800
653
        pop     es
654
        mov     di,1444
655
        xor     ax,ax
656
        mov     ah, 1*16+15
657
        mov     cx,70
658
        mov     bp,12
659
.loop_start:
946 lrz 660
        rep     stosw
714 Lrz 661
        mov     cx,70
662
        add     di,20
946 lrz 663
        dec     bp
1942 clevermous 664
        jns             .loop_start
714 Lrz 665
        pop     es
666
        popa
667
        ret
668
 
669
;-----------------------------------------------------------------------------
670
 
671
set_vmode:
672
        push    0 ;0;x1000
673
        pop     es
674
 
675
        mov     si,word [preboot_graph]            ;[preboot_graph]
676
        mov     cx,word [es:si+6]            ; number of mode
677
 
678
 
679
        mov     ax,word [es:si+0]            ; resolution X
680
        mov     bx,word [es:si+2]            ; resolution Y
681
 
682
 
683
        mov     word [es:0x900A],ax              ; resolution X
684
        mov     word [es:0x900C],bx              ; resolution Y
685
        mov     word [es:0x9008],cx              ; number of mode
686
 
687
        cmp     cx,0x12
688
        je      .mode0x12_0x13
689
        cmp     cx,0x13
690
        je      .mode0x12_0x13
691
 
692
 
693
        cmp     byte [s_vesa.ver],'2'
694
        jb      .vesa12
695
 
696
;  VESA 2 and Vesa 3
697
 
698
        mov     ax,0x4f01
699
        and     cx,0xfff
700
        mov     di,mi;0xa000
701
        int     0x10
702
        ; LFB
703
        mov     eax,[es:mi.PhysBasePtr];di+0x28]
704
        mov     [es:0x9018],eax
705
        ; ---- vbe voodoo
706
        BytesPerLine equ 0x10
707
        mov     ax, [es:di+BytesPerLine]
708
        mov     [es:0x9001], ax
709
        ; BPP
710
        cmp     [es:mi.BitsPerPixel],16
711
        jne     .l0
712
        cmp     [es:mi.GreenMaskSize],5
713
        jne     .l0
714
        mov     [es:mi.BitsPerPixel],15
715
.l0:
716
        mov     al, byte [es:di+0x19]
717
        mov     [es:0x9000], al
718
        jmp     .exit
719
 
720
.mode0x12_0x13:
721
        mov     byte [es:0x9000], 32
722
        or      dword [es:0x9018], 0xFFFFFFFF; 0x800000
723
 
724
 
725
;  VESA 1.2 PM BANK SWITCH ADDRESS
726
 
727
.vesa12:
728
 
729
 
730
        mov     ax,0x4f0A
731
        xor     bx,bx
732
        int     0x10
733
        xor     eax,eax
734
        xor     ebx,ebx
735
        mov     ax,es
736
        shl     eax,4
737
        mov     bx,di
738
        add     eax,ebx
739
        movzx   ebx,word[es:di]
740
        add     eax,ebx
741
        push    0x0000
742
        pop     es
743
        mov     [es:0x9014],eax
744
  .exit:
745
        ret
746
 
747
 
748
;        mov     dword[es:0x9018],0x000A0000
749
;        ret
750
 
751
;=============================================================================
752
;=============================================================================
753
;=============================================================================
754