Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
431 serge 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
3
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
4
;; Distributed under terms of the GNU General Public License    ;;
5
;;                                                              ;;
6
;;  VESA12.INC                                                  ;;
7
;;                                                              ;;
8
;;  Vesa 1.2 functions for MenuetOS                             ;;
9
;;                                                              ;;
10
;;  Copyright 2002 Ville Turjanmaa                              ;;
11
;;                                                              ;;
12
;;  quickcode@mail.ru - bankswitch for S3 cards                 ;;
13
;;                                                              ;;
14
;;  See file COPYING for details                                ;;
15
;;                                                              ;;
16
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1 ha 17
 
593 mikedld 18
$Revision: 673 $
1 ha 19
 
593 mikedld 20
 
673 serge 21
TRIDENT       equ 0
22
S3_VIDEO      equ 0
23
INTEL_VIDEO   equ 0
24
 
25
if TRIDENT
26
  if S3_VIDEO or INTEL_VIDEO
27
    stop
28
  end if
29
end if
30
 
31
if S3_VIDEO
32
  if TRIDENT or INTEL_VIDEO
33
    stop
34
  end if
35
end if
36
 
37
if INTEL_VIDEO
38
  if S3_VIDEO or TRIDENT
39
    stop
40
  end if
41
end if
42
 
43
 
1 ha 44
; A complete video driver should include the following types of function
45
;
46
; Putpixel
47
; Getpixel
48
;
49
; Drawimage
50
; Drawbar
51
;
52
; Drawbackground
53
;
54
;
55
; Modifying the set_bank -function is mostly enough
56
; for different Vesa 1.2 setups.
57
 
5 halyavin 58
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
59
; set_bank for Trident videocards, work on Trident 9440
60
; modified by Mario79
1 ha 61
 
673 serge 62
if TRIDENT
63
set_bank:
64
           pushfd
65
           cli
66
           cmp al,[BANK_RW]
67
           je .retsb
5 halyavin 68
 
673 serge 69
           mov [BANK_RW],al
70
           push dx
71
           mov dx,3D8h
72
           out  dx,al
73
           pop dx
74
.retsb:
75
           popfd
76
           ret
77
end if
78
 
5 halyavin 79
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
80
; set_bank for S3 videocards, work on S3 ViRGE PCI (325)
379 serge 81
; modified by kmeaw
673 serge 82
 
83
if S3_VIDEO
379 serge 84
set_bank:
673 serge 85
           pushfd
86
           cli
87
           cmp al,[BANK_RW]
88
           je .retsb
89
 
90
           mov [BANK_RW],al
91
           push ax
92
           push dx
93
           push cx
94
           mov cl, al
95
           mov dx, 0x3D4
96
           mov al, 0x38
97
           out dx, al     ;CR38 Register Lock 1 ;Note: Traditionally 48h is used to
98
                          ;unlock and 00h to lock
99
           inc dx
100
           mov al, 0x48
101
           out dx, al     ;3d5 -?
102
           dec dx
103
           mov al, 0x31
104
           out dx, al     ;CR31 Memory Configuration Register
1 ha 105
;0  Enable Base Address Offset (CPUA BASE). Enables bank operation if set, ;disables if clear.
106
;4-5  Bit 16-17 of the Display Start Address. For the 801/5,928 see index 51h,
107
;for the 864/964 see index 69h.
108
 
673 serge 109
           inc dx
110
           in al, dx
111
           dec dx
112
           mov ah, al
113
           mov al, 0x31
114
           out dx, ax
115
           mov al, ah
116
           or al, 9
117
           inc dx
118
           out dx, al
119
           dec dx
120
           mov al, 0x35
121
           out dx, al   ;CR35 CRT Register Lock
122
           inc dx
123
           in al, dx
124
           dec dx
125
           and al, 0xF0
126
           mov ch, cl
127
           and ch, 0x0F
128
           or ch, al
129
           mov al, 0x35
130
           out dx, al
131
           inc dx
132
           mov al, ch
133
           out dx, ax
134
           dec dx
135
           mov al, 0x51  ;Extended System Control 2 Register
136
           out dx, al
137
           inc dx
138
           in al, dx
139
           dec dx
140
           and al, 0xF3
141
           shr cl, 2
142
           and cl, 0x0C
143
           or cl, al
144
           mov al, 0x51
145
           out dx, al
146
           inc dx
147
           mov al, cl
148
           out dx, al
149
           dec dx
150
           mov al, 0x38
151
           out dx, al
152
           inc dx
153
           xor al, al
154
           out dx, al
155
           dec dx
156
           pop cx
157
           pop dx
158
           pop ax
159
.retsb:
160
           popfd
161
           ret
162
end if
1 ha 163
 
164
;Set bank function for Intel 810/815 chipsets
165
; *****Modified by Protopopius, Russia.*****
166
; ********* http://menuetos.hut.ru **************
167
; ************************************************
168
 
673 serge 169
if INTEL_VIDEO
170
 
171
set_bank:
172
           pushfd
173
           cli
174
 
175
           cmp al,[BANK_RW]
176
           je .retsb
177
 
178
           mov [BANK_RW],al
179
           push ax
180
           push dx
181
           mov dx,3CEh
182
           mov ah,al            ; Save value for later use
183
           mov al,10h           ; Index GR10 (Address Mapping)
184
           out dx,al            ; Select GR10
185
           inc dl
186
           mov al,3             ; Set bits 0 and 1 (Enable linear page mapping)
187
           out dx,al            ; Write value
188
           dec dl
189
           mov al,11h           ; Index GR11 (Page Selector)
190
           out dx,al            ; Select GR11
191
           inc dl
192
           mov al,ah            ; Write address
193
           out dx,al            ; Write the value
194
           pop dx
195
           pop ax
196
.retsb:
197
           popfd
198
           ret
199
end if
200
 
1 ha 201
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
202
 
673 serge 203
if (TRIDENT or S3_VIDEO or INTEL_VIDEO)
204
else
205
set_bank:
206
           pushfd
207
           cli
1 ha 208
 
673 serge 209
           cmp al,[BANK_RW]
210
           je .retsb
1 ha 211
 
673 serge 212
           mov [BANK_RW],al
213
           push ax
214
           push dx
215
           mov ah,al
216
           mov dx,0x03D4
217
           mov al,0x39
218
           out dx,al
219
           inc dl
220
           mov al,0xA5
221
           out dx,al
222
           dec dl
223
           mov al,6Ah
224
           out dx,al
225
           inc dl
226
           mov al,ah
227
           out dx,al
228
           dec dl
229
           mov al,0x39
230
           out dx,al
231
           inc dl
232
           mov al,0x5A
233
           out dx,al
234
           dec dl
235
           pop dx
236
           pop ax
237
 
238
.retsb:
239
           popfd
240
           ret
241
end if
242
 
1 ha 243
vesa12_drawbackground:
244
 
245
        call  [disable_mouse]
246
 
247
        push  eax
248
        push  ebx
249
        push  ecx
250
        push  edx
251
 
252
        xor   edx,edx
527 diamond 253
        mov   eax,dword[BgrDataWidth]
254
        mov   ebx,dword[BgrDataHeight]
1 ha 255
        mul   ebx
256
        mov   ebx,3
257
        mul   ebx
258
        mov   [imax],eax
115 poddubny 259
        mov   eax,[draw_data+32+RECT.left]
260
        mov   ebx,[draw_data+32+RECT.top]
1 ha 261
        mov   edi,0 ;no force
262
 
263
      v12dp3:
264
 
265
        push  eax
266
        push  ebx
267
 
527 diamond 268
        cmp   [BgrDrawMode],dword 1     ; tiled background
1 ha 269
        jne   no_vesa12_tiled_bgr
270
 
271
        push  edx
272
 
273
        xor   edx,edx
527 diamond 274
        div   dword [BgrDataWidth]
1 ha 275
 
527 diamond 276
        push  edx
1 ha 277
        mov   eax,ebx
278
        xor   edx,edx
527 diamond 279
        div   dword [BgrDataHeight]
1 ha 280
        mov   ebx,edx
281
        pop   eax
282
 
283
        pop   edx
284
 
285
      no_vesa12_tiled_bgr:
286
 
527 diamond 287
        cmp   [BgrDrawMode],dword 2     ; stretched background
1 ha 288
        jne   no_vesa12_stretched_bgr
289
 
290
        push  edx
291
 
527 diamond 292
        mul   dword [BgrDataWidth]
381 serge 293
        mov   ecx,[ScreenWidth]
1 ha 294
        inc   ecx
295
        div   ecx
296
 
297
        push  eax
298
        mov   eax,ebx
527 diamond 299
        mul   dword [BgrDataHeight]
381 serge 300
        mov   ecx,[ScreenHeight]
1 ha 301
        inc   ecx
302
        div   ecx
303
        mov   ebx,eax
304
        pop   eax
305
 
306
        pop   edx
307
 
308
      no_vesa12_stretched_bgr:
309
 
310
 
527 diamond 311
        mov   esi,ebx
312
        imul  esi, dword [BgrDataWidth]
1 ha 313
        add   esi,eax
527 diamond 314
        lea   esi,[esi*3]
469 serge 315
        add   esi,[img_background]   ;IMG_BACKGROUND
1 ha 316
        pop   ebx
317
        pop   eax
318
 
319
      v12di4:
320
 
527 diamond 321
        mov   cl,[esi+2]
322
        shl   ecx,16
323
        mov   cx,[esi]
1 ha 324
        pusha
325
        mov   esi,eax
326
        mov   edi,ebx
381 serge 327
        mov   eax,[ScreenWidth]
1 ha 328
        add   eax,1
329
        mul   ebx
527 diamond 330
        cmp   [eax+esi+WinMapAddress],byte 1
1 ha 331
        jnz   v12nbgp
381 serge 332
        mov   eax,[BytesPerScanLine]
1 ha 333
        mov   ebx,edi
334
        mul   ebx
673 serge 335
        add   eax, esi
336
        lea   eax, [VGABasePtr+eax+esi*2]
381 serge 337
        cmp   [ScreenBPP],byte 24
1 ha 338
        jz    v12bgl3
339
        add   eax,esi
340
 
341
      v12bgl3:
342
 
343
        push ebx
344
        push eax
345
 
673 serge 346
        sub  eax,VGABasePtr
1 ha 347
 
348
        shr  eax,16
349
        call set_bank
350
        pop  eax
351
        and  eax,65535
381 serge 352
        add  eax,VGABasePtr
1 ha 353
        pop  ebx
354
 
355
        mov   [eax],cx
356
        add   eax,2
357
        shr   ecx,16
358
        mov   [eax],cl
359
        sti
360
 
361
      v12nbgp:
362
 
363
        popa
364
        add   esi,3
365
        inc   eax
115 poddubny 366
        cmp   eax,[draw_data+32+RECT.right]
1 ha 367
        jg    v12nodp31
368
        jmp   v12dp3
369
 
370
      v12nodp31:
371
 
115 poddubny 372
        mov   eax,[draw_data+32+RECT.left]
1 ha 373
        inc   ebx
115 poddubny 374
        cmp   ebx,[draw_data+32+RECT.bottom]
1 ha 375
        jg    v12dp4
376
        jmp   v12dp3
377
 
378
      v12dp4:
379
 
380
        pop   edx
381
        pop   ecx
382
        pop   ebx
383
        pop   eax
384
        ret
385
 
386
 
387
vesa12_drawbar:
388
 
389
    call  [disable_mouse]
390
 
391
;;    mov  [novesachecksum],dword 0
392
    sub  edx,ebx
393
    sub  ecx,eax
394
    push esi
395
    push edi
396
    push eax
397
    push ebx
398
    push ecx
399
    push edx
379 serge 400
    mov  ecx,[TASK_BASE]
115 poddubny 401
    add  eax,[ecx-twdw+WDATA.box.left]
402
    add  ebx,[ecx-twdw+WDATA.box.top]
1 ha 403
    push eax
404
    mov  eax,ebx         ; y
381 serge 405
    mov  ebx,[BytesPerScanLine]
1 ha 406
    mul  ebx
407
    pop  ecx
408
    add  eax,ecx         ; x
409
    add  eax,ecx
410
    add  eax,ecx
381 serge 411
    cmp  [ScreenBPP],byte 24     ; 24 or 32 bpp ? - x start
1 ha 412
    jz   dbpi2412
413
    add  eax,ecx
414
 
415
  dbpi2412:
416
 
673 serge 417
    add  eax,VGABasePtr
1 ha 418
    mov  edi,eax
419
 
420
    ; x size
421
 
422
    mov  eax,[esp+4] ; [esp+6]
423
    mov  ecx,eax
424
    add  ecx,eax
425
    add  ecx,eax
381 serge 426
    cmp  [ScreenBPP],byte 24     ; 24 or 32 bpp ? - x size
1 ha 427
    jz   dbpi24312
428
    add  ecx,eax
429
 
430
  dbpi24312:
431
 
432
    mov  ebx,[esp+0]
433
 
434
    ; check limits ?
435
 
436
    push eax
437
    push ecx
379 serge 438
    mov  eax,[TASK_BASE]
439
    mov  ecx,[eax+draw_data-CURRENT_TASK+RECT.left]
1 ha 440
    cmp  ecx,0
441
    jnz  dbcblimitlset12
379 serge 442
    mov  ecx,[eax+draw_data-CURRENT_TASK+RECT.top]
1 ha 443
    cmp  ecx,0
444
    jnz  dbcblimitlset12
379 serge 445
    mov  ecx,[eax+draw_data-CURRENT_TASK+RECT.right]
381 serge 446
    cmp  ecx,[ScreenWidth]
1 ha 447
    jnz  dbcblimitlset12
379 serge 448
    mov  ecx,[eax+draw_data-CURRENT_TASK+RECT.bottom]
381 serge 449
    cmp  ecx,[ScreenHeight]
1 ha 450
    jnz  dbcblimitlset12
451
    pop  ecx
452
    pop  eax
453
    push dword 0
454
    jmp  dbcblimitlno12
455
 
456
  dbcblimitlset12:
457
 
458
    pop  ecx
459
    pop  eax
460
    push dword 1
461
 
462
  dbcblimitlno12:
463
 
381 serge 464
    cmp  [ScreenBPP],byte 24     ; 24 or 32 bpp ?
1 ha 465
    jz   dbpi24bit12
466
    jmp  dbpi32bit12
467
 
468
 
469
; DRAWBAR 24 BBP
470
 
471
 
472
dbpi24bit12:
473
 
474
    push eax
475
    push ebx
476
    push edx
477
    mov  eax,ecx
478
    mov  ebx,3
479
    div  ebx
480
    mov  ecx,eax
481
    pop  edx
482
    pop  ebx
483
    pop  eax
484
    cld
485
 
486
  dbnewpi12:
487
 
488
    push ebx
489
    push edi
490
    push ecx
491
 
492
      xor  edx,edx
493
      mov  eax,edi
673 serge 494
      sub  eax,VGABasePtr
1 ha 495
      mov  ebx,3
496
      div  ebx
497
      add  eax,WinMapAddress
379 serge 498
      mov   ebx,[CURRENT_TASK]
1 ha 499
      cld
500
 
501
      dbnp2412:
502
 
503
        mov  dl,[eax]
504
        push eax
505
        push ecx
506
        cmp  dl,bl
507
        jnz  dbimp24no12
508
        cmp  [esp+5*4],dword 0
509
        jz   dbimp24yes12
510
;        call dbcplimit
511
;        jnz  dbimp24no12
512
 
513
     dbimp24yes12:
514
 
515
        push edi
516
        mov  eax,edi
673 serge 517
        sub  eax,VGABasePtr
1 ha 518
        shr  eax,16
519
        call set_bank
520
        and  edi,0xffff
381 serge 521
        add  edi,VGABasePtr
1 ha 522
        mov  eax,[esp+8+3*4+16+4+4]
523
        stosw
524
        shr  eax,16
525
        stosb
526
        sti
527
        pop  edi
528
        add  edi,3
529
        pop  ecx
530
        pop  eax
531
        inc  eax
532
        loop dbnp2412
533
        jmp  dbnp24d12
534
 
535
      dbimp24no12:
536
 
537
        pop  ecx
538
        pop  eax
539
        cld
540
        add  edi,3
541
        inc  eax
542
        loop dbnp2412
543
 
544
      dbnp24d12:
545
 
546
        mov  eax,[esp+3*4+16+4]
547
        test eax,0x80000000
548
        jz   nodbgl2412
549
        cmp  al,0
550
        jz   nodbgl2412
551
        dec  eax
552
        mov  [esp+3*4+16+4],eax
553
 
554
      nodbgl2412:
555
 
556
    pop  ecx
557
    pop  edi
558
    pop  ebx
381 serge 559
    add  edi,[BytesPerScanLine]
1 ha 560
    dec  ebx
561
    jz   dbnonewpi12
562
    jmp  dbnewpi12
563
 
564
  dbnonewpi12:
565
 
566
    add  esp,7*4
567
 
568
    ret
569
 
570
 
571
; DRAWBAR 32 BBP
572
 
573
 
574
  dbpi32bit12:
575
 
576
    cld
577
    shr  ecx,2
578
 
579
   dbnewpi3212:
580
 
581
    push ebx
582
    push edi
583
    push ecx
584
 
585
      mov  eax,edi
673 serge 586
      sub  eax,VGABasePtr
1 ha 587
      shr  eax,2
588
      add  eax,WinMapAddress
379 serge 589
      mov   ebx,[CURRENT_TASK]
1 ha 590
      cld
591
 
592
      dbnp3212:
593
 
594
        mov  dl,[eax]
595
        push eax
596
        push ecx
597
        cmp  dl,bl
598
        jnz  dbimp32no12
599
        cmp  [esp+5*4],dword 0
600
        jz   dbimp32yes12
601
;        call dbcplimit
602
;        jnz  dbimp32no12
603
 
604
      dbimp32yes12:
605
 
606
        push edi
607
        mov  eax,edi
673 serge 608
        sub  eax,VGABasePtr
1 ha 609
        shr  eax,16
610
        call set_bank
611
        and  edi,0xffff
381 serge 612
        add  edi,VGABasePtr
1 ha 613
        mov  eax,[esp+8+3*4+16+4+4]
614
        stosw
615
        shr  eax,16
616
        stosb
617
        sti
618
        pop  edi
619
        add  edi,4
620
        inc  ebp
621
        pop  ecx
622
        pop  eax
623
        inc  eax
624
        loop dbnp3212
625
        jmp  dbnp32d12
626
 
627
      dbimp32no12:
628
 
629
        pop  ecx
630
        pop  eax
631
        inc  eax
632
        add  edi,4
633
        inc  ebp
634
        loop dbnp3212
635
 
636
      dbnp32d12:
637
 
638
        mov  eax,[esp+12+16+4]
639
        test eax,0x80000000
640
        jz   nodbgl3212
641
        cmp  al,0
642
        jz   nodbgl3212
643
        dec  eax
644
        mov  [esp+12+16+4],eax
645
 
646
      nodbgl3212:
647
 
648
    pop  ecx
649
    pop  edi
650
    pop  ebx
381 serge 651
    add  edi,[BytesPerScanLine]
1 ha 652
    dec  ebx
653
    jz   nodbnewpi3212
654
    jmp  dbnewpi3212
655
 
656
  nodbnewpi3212:
657
 
658
    add  esp,7*4
659
    ret
660
 
661
 
662
Vesa12_putpixel24:
663
 
664
        mov  edi,eax ; x
665
        mov  eax,ebx ; y
666
        lea  edi,[edi+edi*2]
381 serge 667
        mov  ebx,[BytesPerScanLine]
1 ha 668
        mul  ebx
669
        add  edi,eax
670
        mov  eax,edi
671
        shr  eax,16
672
        call set_bank
673
        and  edi,65535
381 serge 674
        add  edi,VGABasePtr
1 ha 675
        mov  eax,[esp+28]
676
        stosw
677
        shr  eax,16
678
        mov  [edi],al
679
        sti
680
        ret
681
 
682
 
683
 
684
Vesa12_putpixel32:
685
 
686
        mov  edi,eax ; x
687
        mov  eax,ebx ; y
688
        shl  edi,2
381 serge 689
        mov  ebx,[BytesPerScanLine]
1 ha 690
        mul  ebx
691
        add  edi,eax
692
        mov  eax,edi
693
        shr  eax,16
694
        call set_bank
695
        and  edi,65535
381 serge 696
        add  edi,VGABasePtr
1 ha 697
        mov  ecx,[esp+28]
698
        mov  [edi],ecx
699
        sti
700
        ret
701
 
702
 
703
Vesa12_getpixel24:
704
 
705
        mov  edi,eax ; x
706
        mov  eax,ebx ; y
707
        lea  edi,[edi+edi*2]
381 serge 708
        mov  ebx,[BytesPerScanLine]
1 ha 709
        mul  ebx
710
        add  edi,eax
711
        mov  eax,edi
712
        shr  eax,16
713
        call set_bank
714
        and  edi,65535
381 serge 715
        add  edi,VGABasePtr
1 ha 716
        mov  ecx,[edi]
717
        and  ecx,255*256*256+255*256+255
718
        sti
719
        ret
720
 
721
 
722
Vesa12_getpixel32:
723
 
724
        mov  edi,eax ; x
725
        mov  eax,ebx ; y
726
        shl  edi,2
381 serge 727
        mov  ebx,[BytesPerScanLine]
1 ha 728
        xor  edx,edx
729
        mul  ebx
730
        add  edi,eax
731
        mov  eax,edi
732
        shr  eax,16
733
        call set_bank
734
        and  edi,65535
381 serge 735
        add  edi,VGABasePtr
1 ha 736
        mov  ecx,[edi]
737
        and  ecx,255*256*256+255*256+255
738
        sti
739
 
740
        ret
741
 
742
 
743
 
744
vesa12_putimage:
283 diamond 745
; ebx = pointer to image
746
; ecx = size [x|y]
747
; edx = coordinates [x|y]
748
; ebp = pointer to 'get' function
749
; esi = pointer to 'init' function
750
; edi = parameter for 'get' function
1 ha 751
 
752
;    mov  ebx,image
753
;    mov  ecx,320*65536+240
754
;    mov  edx,20*65536+20
755
 
756
    call  [disable_mouse]
757
 
758
    mov   [novesachecksum],dword 0
759
    push  esi
760
    push  edi
761
    push  eax
762
    push  ebx
763
    push  ecx
764
    push  edx
765
    movzx eax,word [esp+2]
766
    movzx ebx,word [esp+0]
379 serge 767
    mov   ecx,[TASK_BASE]
115 poddubny 768
    add   eax,[ecx-twdw+WDATA.box.left]
769
    add   ebx,[ecx-twdw+WDATA.box.top]
1 ha 770
    push  eax
771
    mov   eax,ebx         ; y
381 serge 772
    mul   dword [BytesPerScanLine]
1 ha 773
    pop   ecx
774
    add   eax,ecx         ; x
775
    add   eax,ecx
776
    add   eax,ecx
381 serge 777
    cmp  [ScreenBPP],byte 24     ; 24 or 32 bpp ? - x start
1 ha 778
    jz   pi2412
779
    add  eax,ecx
780
 
781
  pi2412:
782
 
673 serge 783
    add  eax,VGABasePtr
1 ha 784
    mov  edi,eax
785
 
786
    ; x size
787
 
283 diamond 788
    movzx ecx,word [esp+6]
1 ha 789
 
790
    mov   esi,[esp+8]
791
    movzx ebx,word [esp+4]
792
 
793
    ; check limits while draw ?
794
 
795
    push  ecx
379 serge 796
    mov  eax,[TASK_BASE]
797
    cmp  dword [eax+draw_data-CURRENT_TASK+RECT.left], 0
1 ha 798
    jnz  dbcblimitlset212
379 serge 799
    cmp  dword [eax+draw_data-CURRENT_TASK+RECT.top], 0
1 ha 800
    jnz  dbcblimitlset212
379 serge 801
    mov  ecx,[eax+draw_data-CURRENT_TASK+RECT.right]
381 serge 802
    cmp  ecx,[ScreenWidth]
1 ha 803
    jnz  dbcblimitlset212
379 serge 804
    mov  ecx,[eax+draw_data-CURRENT_TASK+RECT.bottom]
381 serge 805
    cmp  ecx,[ScreenHeight]
1 ha 806
    jnz  dbcblimitlset212
807
    pop  ecx
283 diamond 808
    push 0
1 ha 809
    jmp  dbcblimitlno212
810
 
811
  dbcblimitlset212:
812
 
813
    pop  ecx
283 diamond 814
    push 1
1 ha 815
 
816
  dbcblimitlno212:
817
 
381 serge 818
    cmp  [ScreenBPP],byte 24     ; 24 or 32 bpp ?
283 diamond 819
    jnz  pi32bit12
1 ha 820
 
821
  pi24bit12:
822
 
823
  newpi12:
824
 
825
    push edi
826
    push ecx
827
    push ebx
828
 
283 diamond 829
      mov  edx,edi
673 serge 830
      sub  edx,VGABasePtr
1 ha 831
      mov  ebx,3
832
      div  ebx
283 diamond 833
      add  edx,WinMapAddress
379 serge 834
      mov  ebx,[CURRENT_TASK]
283 diamond 835
      mov  bh,[esp+4*3]
1 ha 836
 
837
      np2412:
838
 
283 diamond 839
        cmp  bl,[edx]
1 ha 840
        jnz  imp24no12
283 diamond 841
;        mov  eax,[esi]
842
        push    dword [esp+4*3+20]
843
        call    ebp
844
;        cmp  bh,0
845
;        jz   imp24yes12
1 ha 846
;        call dbcplimit
847
;        jnz  imp24no12
848
 
849
     imp24yes12:
850
 
283 diamond 851
        push edi
1 ha 852
        push eax
853
        mov  eax,edi
673 serge 854
        sub  eax,VGABasePtr
1 ha 855
        shr  eax,16
856
        call set_bank
283 diamond 857
        pop  eax
1 ha 858
        and  edi,0xffff
381 serge 859
        add  edi,VGABasePtr
283 diamond 860
        mov  [edi],ax
861
        shr  eax,16
862
        mov  [edi+2],al
1 ha 863
        pop  edi
864
 
865
     imp24no12:
866
 
283 diamond 867
        inc  edx
868
;        add  esi,3
1 ha 869
        add  edi,3
870
        dec  ecx
871
        jnz  np2412
872
 
873
      np24d12:
874
 
875
     pop  ebx
876
     pop  ecx
877
     pop  edi
878
 
381 serge 879
    add  edi,[BytesPerScanLine]
314 diamond 880
    add  esi,[esp+32]
1 ha 881
    dec  ebx
283 diamond 882
    jnz  newpi12
1 ha 883
 
884
  nonewpi12:
885
 
283 diamond 886
        pop     eax edx ecx ebx eax edi esi
887
        xor     eax, eax
888
        ret
1 ha 889
 
890
 
891
  pi32bit12:
892
 
893
   newpi3212:
894
 
895
    push edi
896
    push ecx
897
    push ebx
898
 
283 diamond 899
      mov  edx,edi
673 serge 900
      sub  edx,VGABasePtr
283 diamond 901
      shr  edx,2
902
      add  edx,WinMapAddress
379 serge 903
      mov   ebx,[CURRENT_TASK]
283 diamond 904
      mov   bh,[esp+4*3]
1 ha 905
 
906
      np3212:
907
 
283 diamond 908
        cmp  bl,[edx]
1 ha 909
        jnz  imp32no12
283 diamond 910
;        mov  eax,[esi]
911
        push    dword [esp+4*3+20]
912
        call    ebp
913
;        cmp  bh,0
914
;        jz   imp32yes12
1 ha 915
;        call dbcplimit
916
;        jnz  imp32no12
917
 
918
      imp32yes12:
919
 
283 diamond 920
        push edi
1 ha 921
        push eax
922
        mov  eax,edi
673 serge 923
        sub  eax,VGABasePtr
1 ha 924
        shr  eax,16
925
        call set_bank
283 diamond 926
        pop  eax
1 ha 927
        and  edi,0xffff
381 serge 928
        mov  [edi+VGABasePtr],eax
1 ha 929
        pop  edi
930
 
931
      imp32no12:
932
 
283 diamond 933
        inc  edx
934
;        add  esi,3
1 ha 935
        add  edi,4
936
        dec  ecx
937
        jnz  np3212
938
 
939
      np32d12:
940
 
941
     pop  ebx
942
     pop  ecx
943
     pop  edi
944
 
381 serge 945
    add   edi,[BytesPerScanLine]
1 ha 946
    dec   ebx
283 diamond 947
    jnz   newpi3212
1 ha 948
 
949
  nonewpi3212:
950
 
283 diamond 951
        pop     eax edx ecx ebx eax edi esi
952
        xor     eax, eax
953
        ret
1 ha 954
 
955
 
956
vesa12_read_screen_pixel:
957
 
958
     and   eax,0x3FFFFF
381 serge 959
     cmp   [ScreenBPP],byte 24      ; 24 or 32 bpp ?
1 ha 960
     jz    v12rsp24
961
     mov   edi,eax
962
     shl   edi,2
963
     mov   eax,edi
964
     shr   eax,16
965
     call  set_bank
966
     and   edi,65535
381 serge 967
     add   edi,VGABasePtr
1 ha 968
     mov   eax,[edi]
969
     and   eax,0x00ffffff
970
     ret
971
  v12rsp24:
972
 
973
     imul  eax,3
974
     mov   edi,eax
975
     shr   eax,16
976
     call  set_bank
977
     and   edi,65535
381 serge 978
     add   edi,VGABasePtr
1 ha 979
     mov   eax,[edi]
980
     and   eax,0x00ffffff
981
     ret
982