Subversion Repositories Kolibri OS

Rev

Rev 2465 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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