Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
129 mikedld 1
 
2
  .VESASignature          dd ?    ; char
3
  .VESAVersion            dw ?    ; short
4
  .OemStringPtr           dd ?    ; char *
5
  .Capabilities           dd ?    ; ulong
6
  .VideoModePtr           dd ?    ; ulong
7
  .TotalMemory            dw ?    ; short
8
  ; VBE 2.0+
9
  .OemSoftwareRev         db ?    ; short
10
  .OemVendorNamePtr       dw ?    ; char *
11
  .OemProductNamePtr      dw ?    ; char *
12
  .OemProductRevPtr       dw ?    ; char *
13
  .reserved               rb 222  ; char
14
  .OemData                rb 256  ; char
15
}
16
17
 
18
  .ModeAttributes         dw ?    ; short
19
  .WinAAttributes         db ?    ; char
20
  .WinBAttributes         db ?    ; char
21
  .WinGranularity         dw ?    ; short
22
  .WinSize                dw ?    ; short
23
  .WinASegment            dw ?    ; ushort
24
  .WinBSegment            dw ?    ; ushort
25
  .WinFuncPtr             dd ?    ; void *
26
  .BytesPerScanLine       dw ?    ; short
27
  .XRes                   dw ?    ; short
28
  .YRes                   dw ?    ; short
29
  .XCharSize              db ?    ; char
30
  .YCharSize              db ?    ; char
31
  .NumberOfPlanes         db ?    ; char
32
  .BitsPerPixel           db ?    ; char
33
  .NumberOfBanks          db ?    ; char
34
  .MemoryModel            db ?    ; char
35
  .BankSize               db ?    ; char
36
  .NumberOfImagePages     db ?    ; char
37
  .res1                   db ?    ; char
38
  .RedMaskSize            db ?    ; char
39
  .RedFieldPosition       db ?    ; char
40
  .GreenMaskSize          db ?    ; char
41
  .GreenFieldPosition     db ?    ; char
42
  .BlueMaskSize           db ?    ; char
43
  .BlueFieldPosition      db ?    ; char
44
  .RsvedMaskSize          db ?    ; char
45
  .RsvedFieldPosition     db ?    ; char
46
  .DirectColorModeInfo    db ?    ; char ; MISSED IN THIS TUTORIAL!! SEE ABOVE
47
  ; VBE 2.0+
48
  .PhysBasePtr            dd ?    ; ulong
49
  .OffScreenMemOffset     dd ?    ; ulong
50
  .OffScreenMemSize       dw ?    ; short
51
  ; VBE 3.0+
52
  .LinbytesPerScanLine    dw ?    ; short
53
  .BankNumberOfImagePages db ?    ; char
54
  .LinNumberOfImagePages  db ?    ; char
55
  .LinRedMaskSize         db ?    ; char
56
  .LinRedFieldPosition    db ?    ; char
57
  .LingreenMaskSize       db ?    ; char
58
  .LinGreenFieldPosition  db ?    ; char
59
  .LinBlueMaskSize        db ?    ; char
60
  .LinBlueFieldPosition   db ?    ; char
61
  .LinRsvdMaskSize        db ?    ; char
62
  .LinRsvdFieldPosition   db ?    ; char
63
  .MaxPixelClock          dd ?    ; ulong
64
  .res2                   rb 190  ; char
65
}
66
67
 
68
  vi VBE_VGAInfo
69
  mi VBE_ModeInfo
70
  modes_table:
71
end virtual
72
73
 
74
ln_num db 6
75
ln_cnt db ?
76
db ?
77
78
 
79
ln_num2 db ?
80
ln_cnt2 db ?
81
db ?
82
83
 
84
vm_col db 2
85
86
 
87
        push    0
88
        pop     es
89
90
 
91
92
 
93
        mov     ax,$4F00
94
        mov     di,vi
95
        int     $10
96
        or      ah,ah
97
        jz      @f
98
        mov     [es:vi.VESASignature],'VESA'
99
        mov     ax,$4F00
100
        mov     di,vi
101
        int     $10
102
        or      ah,ah
103
        jnz     .exit
104
  @@:
105
        cmp     [es:vi.VESASignature],'VESA'
106
        jne     .exit
107
        cmp     [es:vi.VESAVersion],$0100
108
        jb      .exit
109
        jmp     .vesaok2
110
111
 
112
        ;pushad
113
        push    0
114
        pop     es
115
        mov     si,novesa-0x10000
116
        call    printplain
117
        ret
118
        ;pushw   'bb'
119
        ;jmp     enum_modes.modes_ok
120
121
 
122
        mov     ecx,0x00200000
123
        mov     ax,[es:vi.TotalMemory]
124
        shr     ax,4
125
        mov     bl,10
126
        div     bl
127
        mov     ch,ah
128
        and     ax,0x00FF
129
        div     bl
130
        shl     ecx,8
131
        mov     cx,ax
132
        add     ecx,'000'
133
134
 
135
        add     ax,'00'
136
137
 
138
        pop     es
139
        mov     [es:s_vesa.ver-0x10000], ah
140
        mov     [es:s_vesa.ver+2-0x10000], al
141
        mov     dword[es:s_vesa.mem-0x10000],ecx
142
        mov     si,s_vesa-0x10000
143
        call    printplain
144
145
 
146
        _setcursor 5,2
147
        mov     si,_oem-0x10000
148
        call    printplain
149
end if ; mm
150
151
 
152
        pop     es
153
        mov     si,word[es:vi.OemStringPtr]
154
        mov     di,si
155
        push    word[es:vi.OemStringPtr+2]
156
        pop     es
157
if 0 ; mm
158
;       mov     al,0x0A
159
        pop     es
160
        mov     ax,es
161
        mov     ds,ax
162
        call    printplain
163
        pop     es
164
end if ; mm
165
        push    0x1000
166
        pop     ds
167
        mov     si,s_ven_intel-0x10000
168
        call    substr
169
        mov     al,1
170
        je      .vendor_ok
171
        mov     si,s_ven_s3-0x10000
172
        call    substr
173
        mov     al,2
174
        je      .vendor_ok
175
        mov     al,3
176
  .vendor_ok:
177
        push    0 0x1000
178
        pop     ds es
179
        mov     [es:0x9035],al
180
        ret
181
182
 
183
184
 
185
        push    0 0x1000
186
        pop     ds es
187
        ;movzx   eax,byte [es:preboot_graph-0x10000]
188
        ;cmp     eax,0
189
        ;jne     pre_graph
190
        ;_setcursor 9,2
191
        ;mov     si,gr_mode-0x10000
192
        ;call    printplain
193
  .enum_modes:
194
        pushad
195
        push    0x0000
196
        pop     es
197
        ;mov     si,s_mode1-0x10000
198
        ;call    printplain
199
        mov     si,word[es:vi.VideoModePtr]
200
        push    word[es:vi.VideoModePtr+2]
201
        pop     fs
202
        ;pushw   1
203
204
 
205
  .next_mode:
206
        mov     cx,[fs:si] ; mode number
207
        cmp     cx,-1
208
        je      .modes_ok.2
209
210
 
211
        mov     di,mi
212
        int     $10
213
214
 
215
        jnz     .modes_ok.2;vesa_info.exit
216
        test    [es:mi.ModeAttributes],00000001b
217
        jz      @f
218
        test    [es:mi.ModeAttributes],00010000b
219
        jz      @f
220
221
 
222
        jne     .l0
223
        cmp     [es:mi.GreenMaskSize],5
224
        jne     .l0
225
        mov     [es:mi.BitsPerPixel],15
226
  .l0:
227
228
 
229
        jb      @f
230
        cmp     [es:mi.YRes],480
231
        jb      @f
232
        cmp     [es:mi.BitsPerPixel],15
233
        jb      @f
234
235
 
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
        cmp     [s_vesa.ver-0x10000],'2'
242
        jb      .lp1
243
        or      cx,0x4000  ; use LFB
244
  .lp1: mov     [es:bx+6],cx               ; +6[2] : mode number
245
        mov     al,[es:mi.BitsPerPixel]
246
        mov     [es:bx+8],al               ; +8[1] : bits per pixel
247
248
 
249
250
 
251
        add     si,2
252
        jmp     .next_mode
253
254
 
255
256
 
257
258
 
259
        cmp     si,bx
260
        jae     @f
261
        mov     ax,[es:si+0-10]
262
        cmp     ax,[es:si+0]
263
        ja      .xch
264
        jb      @b
265
        mov     ax,[es:si+2-10]
266
        cmp     ax,[es:si+2]
267
        ja      .xch
268
        jb      @b
269
        mov     al,[es:si+8-10]
270
        cmp     al,[es:si+8]
271
        ja      .xch
272
        jb      @b
273
        pushad
274
  .del: push    dword[es:si+0] dword[es:si+4]  word[es:si+8] dword[es:si+0+10] dword[es:si+4+10]  word[es:si+8+10]
275
        pop      word[es:si+8] dword[es:si+4] dword[es:si+0]  word[es:si+8+10] dword[es:si+4+10] dword[es:si+0+10]
276
        add     si,10
277
        cmp     si,bx
278
        jb      .del
279
        popad
280
        mov     si,modes_table
281
        sub     bx,10
282
        jmp     @b
283
  .xch: push    dword[es:si+0] dword[es:si+4]  word[es:si+8] dword[es:si+0-10] dword[es:si+4-10]  word[es:si+8-10]
284
        pop      word[es:si+8] dword[es:si+4] dword[es:si+0]  word[es:si+8-10] dword[es:si+4-10] dword[es:si+0-10]
285
        mov     si,modes_table;-0x10000;m_info
286
        jmp     @b
287
288
 
289
290
 
291
        pop     es
292
        mov     word[es:bx],-1
293
        mov     si,modes_table
294
        mov     di,0x0AC00
295
        pushw   [es:si+2] [es:si+0]
296
        mov     bp,sp
297
        mov     [ds:ln_cnt],0
298
        mov     word[es:si-10],0
299
        jmp     .wr.2
300
301
 
302
        cmp     word[es:si-10],-1
303
        je      @f
304
305
 
306
        cmp     ax,[ss:bp+0]
307
        jne     .wr
308
        mov     ax,[es:si+2]
309
        cmp     ax,[ss:bp+2]
310
        jne     .wr
311
312
 
313
        mov     bx,4
314
        cmp     al,4
315
        je      .l1
316
        add     bx,4
317
        cmp     al,8
318
        je      .l1
319
        add     bx,4
320
        cmp     al,15
321
        je      .l1
322
        add     bx,4
323
        cmp     al,16
324
        je      .l1
325
        add     bx,4
326
        cmp     al,24
327
        je      .l1
328
        add     bx,4
329
  .l1:  mov     eax,[es:si+4]      ; mode attributes & number
330
        mov     [es:di+bx],eax
331
332
 
333
        jmp     @b
334
335
 
336
        pushw   [ss:bp+0] [ss:bp+2]
337
        popw    [es:di+2] [es:di+0]
338
        add     di,4+6*4
339
        inc     [ds:ln_cnt]
340
        pushw   [es:si+0] [es:si+2]
341
        popw    [ss:bp+2] [ss:bp+0]
342
  .wr.2:
343
        mov     cx,(4+6*4)/2
344
        xor     ax,ax
345
        push    di
346
        cld
347
        rep     stosw
348
        pop     di
349
        jmp     .ww
350
351
 
352
        popad
353
        ret
354
355
 
356
357
 
358
359
 
360
        push    es ds 0 0x1000
361
        pop     es ds
362
        movzx   ax,[es:vm_row]
363
        mov     dx,4+6*4
364
        mul     dx
365
        mov     si,ax
366
        add     si,0x0AC00
367
        mov     di,0x0A000
368
        movzx   eax,word[si+0]
369
        mov     ecx,10
370
        call    int2strnz
371
        mov     byte[ds:di],'x'
372
        inc     di
373
        movzx   eax,word[si+2]
374
        call    int2strnz
375
        mov     byte[ds:di],'x'
376
        inc     di
377
        movzx   bx,[es:vm_col]
378
        movzx   eax,[es:bx+vm_bpp]
379
        call    int2strnz
380
        mov     byte[ds:di],0
381
        mov     si,0x0A000
382
        call    printplain
383
        pop     ds es
384
        ret
385
386
 
387
388
 
389
        _setcursor 9,2
390
        mov     si,gr_mode-0x10000
391
        call    printplain
392
        ;mov    ah,9
393
        ;mov    dx,_tl
394
        ;int    $21
395
        mov     si,_tl-0x10000
396
        call    printplain
397
        push    0
398
        pop     es
399
        movzx   ax,[ds:ln_top]
400
        mov     dx,4+6*4
401
        mul     dx
402
        mov     si,ax
403
        add     si,0x0AC00
404
405
 
406
        mov     dword[ds:ln_top2],eax ; top+num+cnt
407
408
 
409
    @@: push    cx
410
411
 
412
        mov     di,_rs-0x10000+2+14
413
        mov     ecx,10
414
        mov     bl,4
415
        call    int2str
416
        movzx   eax,word[es:si+2]
417
        inc     di
418
        mov     bl,4
419
        call    int2str
420
421
 
422
        add     di,4
423
        mov     cx,6
424
  .lp0: mov     al,' '
425
        cmp     word[es:si],0
426
        je      .lp1
427
        mov     al,0xFB ; check
428
  .lp1: mov     [ds:di],al
429
        add     si,4
430
        add     di,6
431
        loop    .lp0
432
433
 
434
        mov     si,_rs-0x10000
435
        call    printplain
436
        pop     si
437
438
 
439
        loop    @b
440
441
 
442
        call    printplain
443
        ret
444
445
 
446
447
 
448
        mov     al,[vm_row]
449
        sub     al,[ln_top]
450
        add     al,13
451
        mov     dh,al
452
        mov     al,[vm_col]
453
        mov     dl,6
454
        mul     dl
455
        add     al,28
456
        mov     dl,al
457
        call    setcursor
458
        mov     si,_sel1-0x10000
459
        mov     [si],ch
460
        call    printplain
461
        add     dl,2
462
        call    setcursor
463
        mov     si,_sel2-0x10000
464
        mov     [si],cl
465
        call    printplain
466
        dec     dl
467
        call    setcursor
468
        ret
469
470
 
471
472
 
473
{
474
  pushad
475
  pushfd
476
  push es ds 0 0x1000
477
  pop ds es
478
  mov si,badsect-2-0x10000
479
  call printplain
480
  pop ds es
481
  popfd
482
  popad
483
}
484
485
 
486
        push    0 0x1000
487
        pop     ds es
488
        movzx   ax,[ds:vm_row]
489
        mov     dx,4+6*4
490
        mul     dx
491
        add     ax,0x0AC00
492
        mov     si,ax
493
        mov     cx,[es:si+0]            ; resolution X
494
        mov     dx,[es:si+2]            ; resolution Y
495
        movzx   bx,[ds:vm_col]
496
        shl     bx,2
497
        mov     bx,[es:si+4+bx+2]         ; mode number
498
499
 
500
;        mov     cx,1024
501
;        mov     dx,768
502
;        mov     byte[es:0x9000],24
503
504
 
505
        je      .gml00
506
        cmp     bx,0x13
507
        je      .sgml1
508
509
 
510
        mov     al,[ds:bp+vm_bpp]
511
        mov     [es:0x9000],al
512
        jmp     .gml10
513
514
 
515
        mov     [es:0x9000],byte 32
516
        jmp     .gml10
517
518
 
519
        mov     [es:0x9000],byte 4
520
521
 
522
        mov     [es:0x9008],bx
523
        mov     [es:0x900A],cx
524
        mov     [es:0x900C],dx
525
        mov     al,[s_vesa.ver-0x10000]
526
        mov     [es:0x9034],al
527
;       push    0x1000
528
;       pop     es
529
        mov     [s_bpp.bpp-0x10000],'8 '
530
        cmp     bx,0x13
531
        je      .bppl;nov
532
        mov     [s_bpp.bpp-0x10000],'4 '
533
        cmp     bx,0x12
534
        je      .bppl;nov
535
536
 
537
538
 
539
540
 
541
        mov     cx,bx
542
        and     cx,0xfff
543
        push    0x0000
544
        pop     es
545
        mov     di,mi;0xa000
546
        int     0x10
547
        ; LFB
548
        mov     eax,[es:mi.PhysBasePtr];di+0x28]
549
        mov     [es:0x9018],eax
550
        ; BPP
551
;        cmp     [es:mi.BitsPerPixel],16
552
;        jne     .l0
553
;        cmp     [es:mi.GreenMaskSize],5
554
;        jne     .l0
555
;        mov     [es:mi.BitsPerPixel],15
556
;  .l0:  mov     al,[es:mi.BitsPerPixel];di+0x19]
557
;        mov     [es:0x9000],al
558
        ; ---- vbe voodoo
559
        ;BytesPerScanLine equ 0x10
384 mikedld 560
        push ax
129 mikedld 561
        mov ax, [es:mi.BytesPerScanLine];di+BytesPerScanLine]
562
        mov [es:0x9001],ax
563
        pop ax
564
        ; -----
565
    .nov:
566
        mov     al,[es:0x9000]
567
568
 
569
        jnz     .nbpp15
570
        mov     [s_bpp.bpp-0x10000],'15'
571
        jmp     .bppl
572
    .nbpp15:
573
        cmp     al,16
574
        jnz     .nbpp16
575
        mov     [s_bpp.bpp-0x10000],'16'
576
        jmp     .bppl
577
    .nbpp16:
578
        cmp     al,24
579
        jnz     .nbpp24
580
        mov     [s_bpp.bpp-0x10000],'24'
581
        jmp     .bppl
582
    .nbpp24:
583
        cmp     al,32
584
        jnz     .nbpp32
585
        mov     [s_bpp.bpp-0x10000],'32'
586
        jmp     .bppl
587
    .nbpp32:
588
        mov     [s_bpp.bpp-0x10000],'??'
589
        mov     si,s_bpp-0x10000
590
        call    printplain
591
        jmp     $
592
    .bppl:
593
        mov     si,s_bpp-0x10000
594
        call    printplain
595
596
 
597
 
598
599
 
600
        jb      @f
601
602
 
603
        mov     bx,0x0
604
        int     0x10
605
        xor     eax,eax
606
        xor     ebx,ebx
607
        mov     ax,es
608
        shl     eax,4
609
        mov     bx,di
610
        add     eax,ebx
611
        movzx   ebx,word[es:di]
612
        add     eax,ebx
613
        push    0x0000
614
        pop     es
615
        mov     [es:0x9014],eax
616
        jmp     .lp1
617
    @@:
618
619
 
620
  .lp1:
621
622
 
623
624
 
625
;=============================================================================
626
;=============================================================================
627
628
 
629
vesa_info:
630
macro sdfawgsgwaew {
631
        push    0
632
        pop     es
633
634
 
635
        mov     ax,$4F00
636
        mov     di,vi
637
        int     $10
638
        or      ah,ah
639
        jz      @f
640
        mov     [es:vi.VESASignature],'VESA'
641
        mov     ax,$4F00
642
        mov     di,vi
643
        int     $10
644
        or      ah,ah
645
        jnz     .exit
646
  @@:
647
        cmp     [es:vi.VESASignature],'VESA'
648
        jne     .exit
649
        cmp     [es:vi.VESAVersion],$0100
650
        jb      .exit
651
        jmp     vesaok2
652
653
 
654
        pushad
655
        push    0
656
        pop     es
657
        mov     si,s_mode1-0x10000
658
        call    printplain
659
;       mov     si,word[es:vi.VideoModePtr]
660
;       push    word[es:vi.VideoModePtr+2]
661
;       pop     fs
662
        pushw   'bb'
663
        jmp     enum_modes.modes_ok
664
;       push    0x1000
665
;       pop     es
666
;       mov     si,novesa-0x10000
667
;       call    print
668
;       mov     ax,16
669
;       jmp     $;novesafound
670
671
 
672
        mov     ecx,0x00200000
673
        mov     ax,[es:vi.TotalMemory]
674
        shr     ax,4
675
        mov     bl,10
676
        div     bl
677
        mov     ch,ah
678
        and     ax,0x00FF
679
        div     bl
680
        shl     ecx,8
681
        mov     cx,ax
682
        add     ecx,'000'
683
684
 
685
        add     ax,'00'
686
687
 
688
        pop     es
689
        mov     [es:s_vesa.ver-0x10000], ah
690
        mov     [es:s_vesa.ver+2-0x10000], al
691
        mov     dword[es:s_vesa.mem-0x10000],ecx
692
        mov     si,s_vesa-0x10000
693
        call    print
694
695
 
696
        mov     si,_oem-0x10000
697
        call    print
698
699
 
700
        pop     es
701
        mov     si,word[es:vi.OemStringPtr]
702
        mov     di,si
703
        push    word[es:vi.OemStringPtr+2]
704
        pop     es
705
        mov     al,0x0A
706
        push    es
707
        call    draw_text
708
        pop     es
709
710
 
711
        pop     ds
712
        mov     si,s_ven_intel-0x10000
713
        call    substr
714
        mov     al,1
715
        je      vendor_ok
716
        mov     si,s_ven_s3-0x10000
717
        call    substr
718
        mov     al,2
719
        je      vendor_ok
720
        mov     al,3
721
  vendor_ok:
722
        push    0 0x1000
723
        pop     ds es
724
        mov     [es:0x9035],al
725
;// mike.dld, 2005-08-20 ]
726
727
 
728
;!!     call    setbase1000
729
730
 
731
732
 
733
        cmp     eax,0
734
        jne     pre_graph
735
        mov     si,gr_mode-0x10000
736
        call    printplain
737
  enum_modes:
738
        pushad
739
        push    0x0000
740
        pop     es
741
        mov     si,s_mode1-0x10000
742
        call    printplain
743
        mov     si,word[es:vi.VideoModePtr]
744
        push    word[es:vi.VideoModePtr+2]
745
        pop     fs
746
        pushw   1
747
748
 
749
  .next_mode:
750
        mov     cx,[fs:si] ; mode number
751
        cmp     cx,-1
752
        je      .modes_ok.2
753
754
 
755
        mov     di,mi
756
        int     $10
757
758
 
759
        jnz     .modes_ok.2;vesa_info.exit
760
        test    [es:mi.ModeAttributes],00000001b
761
        jz      @f
762
        test    [es:mi.ModeAttributes],00010000b
763
        jz      @f
764
765
 
766
        jne     .l0
767
        cmp     [es:mi.GreenMaskSize],5
768
        jne     .l0
769
        mov     [es:mi.BitsPerPixel],15
770
  .l0:
771
772
 
773
        jb      @f
774
        cmp     [es:mi.YRes],480
775
        jb      @f
776
        cmp     [es:mi.BitsPerPixel],15
777
        jb      @f
778
779
 
780
        mov     [es:bx+0],ax
781
        mov     ax,[es:mi.YRes]
782
        mov     [es:bx+2],ax
783
        mov     ax,[es:mi.ModeAttributes]
784
        mov     [es:bx+4],ax
785
        cmp     [s_vesa.ver-0x10000],'2'
786
        jb      .lp1
787
        or      cx,0x4000  ; use LFB
788
  .lp1: mov     [es:bx+6],cx
789
        mov     al,[es:mi.BitsPerPixel]
790
        mov     [es:bx+8],al
791
792
 
793
794
 
795
        add     si,2
796
        jmp     .next_mode
797
798
 
799
800
 
801
802
 
803
        cmp     si,bx
804
        jae     @f
805
        mov     ax,[es:si+0-10]
806
        cmp     ax,[es:si+0]
807
        ja      .xch
808
        jb      @b
809
        mov     ax,[es:si+2-10]
810
        cmp     ax,[es:si+2]
811
        ja      .xch
812
        jb      @b
813
        mov     al,[es:si+8-10]
814
        cmp     al,[es:si+8]
815
        ja      .xch
816
        jb      @b
817
        pushad
818
  .del: push    dword[es:si+0] dword[es:si+4]  word[es:si+8] dword[es:si+0+10] dword[es:si+4+10]  word[es:si+8+10]
819
        pop      word[es:si+8] dword[es:si+4] dword[es:si+0]  word[es:si+8+10] dword[es:si+4+10] dword[es:si+0+10]
820
        add     si,10
821
        cmp     si,bx
822
        jb      .del
823
        popad
824
        mov     si,modes_table
825
        sub     bx,10
826
        jmp     @b
827
  .xch: push    dword[es:si+0] dword[es:si+4]  word[es:si+8] dword[es:si+0-10] dword[es:si+4-10]  word[es:si+8-10]
828
        pop      word[es:si+8] dword[es:si+4] dword[es:si+0]  word[es:si+8-10] dword[es:si+4-10] dword[es:si+0-10]
829
        mov     si,modes_table;-0x10000;m_info
830
        jmp     @b
831
832
 
833
        ;mov    dx,_tl
834
        ;int    $21
835
        mov     si,_tl-0x10000
836
        push    bx
837
        call    printplain
838
        pop     bx
839
        push    0
840
        pop     es
841
        mov     word[es:bx],-1
842
        mov     si,modes_table;-0x10000;m_info
843
        pushw   [es:si+0] [es:si+2] 'c'
844
        mov     bp,sp
845
846
 
847
        cmp     word[es:si-10],-1
848
        je      @f
849
;       cmp     si,bx
850
;       jae     @f
851
        mov     ax,[es:si+0]
852
        cmp     ax,[ss:bp+4]
853
        jne     .wr
854
        mov     ax,[es:si+2]
855
        cmp     ax,[ss:bp+2]
856
        jne     .wr
857
858
 
859
        movzx   eax,word[es:si+0]
860
        mov     di,_rs-0x10000+2
861
        mov     ecx,10
862
        mov     bl,4
863
        call    int2str
864
        movzx   eax,word[es:si+2]
865
        inc     di
866
        mov     bl,4
867
        call    int2str
868
869
 
870
        mov     di,_rs-0x10000+16
871
        cmp     al,4
872
        je      .l1
873
        add     di,5
874
        cmp     al,8
875
        je      .l1
876
        add     di,5
877
        cmp     al,15
878
        je      .l1
879
        add     di,5
880
        cmp     al,16
881
        je      .l1
882
        add     di,5
883
        cmp     al,24
884
        je      .l1
885
        add     di,5
886
  .l1:  mov     al,[ss:bp]
887
        cmp     byte[ds:di],'-'
888
        jne     .lp0
889
        mov     [ds:di],al
890
        inc     byte[ss:bp]
891
        jmp     .lp2
892
  .lp0:
893
  .lp2:
894
        pop     bx
895
        add     si,10
896
        jmp     @b;.sk
897
898
 
899
        ;mov    dx,_rs
900
        ;int    $21
901
        push    bx si
902
        mov     si,_rs-0x10000
903
        call    printplain
904
        pop     si bx
905
906
 
907
        mov     byte[ds:_rs-0x10000+16+5*1],'-'
908
        mov     byte[ds:_rs-0x10000+16+5*2],'-'
909
        mov     byte[ds:_rs-0x10000+16+5*3],'-'
910
        mov     byte[ds:_rs-0x10000+16+5*4],'-'
911
        mov     byte[ds:_rs-0x10000+16+5*5],'-'
912
913
 
914
        popw    [ss:bp+2] [ss:bp+4]
915
916
 
917
        jmp     .ww;@b
918
919
 
920
921
 
922
        add     sp,6
923
        sub     bl,2
924
        shl     bx,8
925
        push    bx
926
;       mov     ah,9
927
;       mov     dx,_bt
928
;       int     $21
929
        mov     si,_bt-0x10000
930
        call    printplain
931
932
 
933
        pop     bx
934
        mov     bp,sp
935
        mov     [ss:bp+4*4],bx
936
        popad
937
938
 
939
        mov     bl,'a'
940
        call    getkey ; !! getchar
941
       pre_graph:
942
        or      al,al
943
        jz      gml00
944
        cmp     al,1
945
        je      sgml1
946
        ;shl    ax,4
947
        sub     ax,2
948
        mov     si,10
949
        mul     si
950
        add     ax,modes_table;-0x10000
951
        mov     si,ax
952
        mov     bx,[es:si+6]
953
        mov     cx,[es:si+0]
954
        mov     dx,[es:si+2]
955
        jmp     gml10
956
       sgml1:
957
;        cmp     al,9
958
;        jnz     gml00
959
        mov     bx,0x13
960
        mov     cx,640
961
        mov     dx,480
962
        push    0x0
963
        pop     es
964
        mov     [es:0x9000],byte 32
965
;        push    0x1000
966
;        pop     es
967
        jmp     gml10
968
       gml00:
969
;        cmp     al,0xa
970
;        jnz     gml02
971
        mov     bx,0x12
972
        mov     cx,640
973
        mov     dx,480
974
        push    0x0
975
        pop     es
976
        mov     [es:0x9000],byte 4;32
977
978
 
979
        push    0x0000
980
        pop     es
981
        mov     [es:0x9008],bx
982
        mov     [es:0x900A],cx
983
        mov     [es:0x900C],dx
984
        mov     al,[s_vesa.ver-0x10000]
985
        mov     [es:0x9034],al
986
        push    0x1000
987
        pop     es
988
        mov     [s_bpp.bpp-0x10000],'8 '
989
        cmp     bx,0x13
990
        je      .bppl;nov
991
        mov     [s_bpp.bpp-0x10000],'4 '
992
        cmp     bx,0x12
993
        je      .bppl;nov
994
995
 
996
997
 
998
999
 
1000
        mov     cx,bx
1001
        and     cx,0xfff
1002
        push    0x0000
1003
        pop     es
1004
        mov     di,mi;0xa000
1005
        int     0x10
1006
        ; LFB
1007
        mov     eax,[es:mi.PhysBasePtr];di+0x28]
1008
        mov     [es:0x9018],eax
1009
        ; BPP
1010
        cmp     [es:mi.BitsPerPixel],16
1011
        jne     .l0
1012
        cmp     [es:mi.GreenMaskSize],5
1013
        jne     .l0
1014
        mov     [es:mi.BitsPerPixel],15
1015
  .l0:  mov     al,[es:mi.BitsPerPixel];di+0x19]
1016
        mov     [es:0x9000],al
1017
        ; ---- vbe voodoo
1018
        ;BytesPerScanLine equ 0x10
384 mikedld 1019
        push ax
129 mikedld 1020
        mov ax, [es:mi.BytesPerScanLine];di+BytesPerScanLine]
1021
        mov [es:0x9001],ax
1022
        pop ax
1023
        ; -----
1024
    .nov:
1025
        cmp     al,15
1026
        jnz     .nbpp15
1027
        mov     [s_bpp.bpp-0x10000],'15'
1028
        jmp     .bppl
1029
    .nbpp15:
1030
        cmp     al,16
1031
        jnz     .nbpp16
1032
        mov     [s_bpp.bpp-0x10000],'16'
1033
        jmp     .bppl
1034
    .nbpp16:
1035
        cmp     al,24
1036
        jnz     .nbpp24
1037
        mov     [s_bpp.bpp-0x10000],'24'
1038
        jmp     .bppl
1039
    .nbpp24:
1040
        cmp     al,32
1041
        jnz     .nbpp32
1042
        mov     [s_bpp.bpp-0x10000],'32'
1043
        jmp     .bppl
1044
    .nbpp32:
1045
        mov     [s_bpp.bpp-0x10000],'??'
1046
        call    print
1047
        jmp     $
1048
    .bppl:
1049
        mov     si,s_bpp-0x10000
1050
        call    printplain
1051
1052
 
1053
 
1054
1055
 
1056
        jb      @f
1057
1058
 
1059
        mov     bx,0x0
1060
        int     0x10
1061
        xor     eax,eax
1062
        xor     ebx,ebx
1063
        mov     ax,es
1064
        shl     eax,4
1065
        mov     bx,di
1066
        add     eax,ebx
1067
        movzx   ebx,word[es:di]
1068
        add     eax,ebx
1069
        push    0x0000
1070
        pop     es
1071
        mov     [es:0x9014],eax
1072
        jmp     .lp1
1073
    @@:
1074
1075
 
1076
  .lp1:
1077
        push    0x1000
1078
        pop     es
1079
}
1080