vesa 1.2 fixup

git-svn-id: svn://kolibrios.org@673 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Sergey Semyonov (Serge) 2007-11-16 08:28:33 +00:00
parent e24551e65f
commit cd14d65fc6
4 changed files with 203 additions and 159 deletions

View File

@ -66,7 +66,6 @@ map_PE: ;stdcall base:dword, image:dword
shr ecx, 2
rep movsd
.L8:
mov ecx, [edx+256]
add ecx, 4095
@ -80,7 +79,6 @@ map_PE: ;stdcall base:dword, image:dword
xor eax, eax
rep stosb
.L10:
inc dword [esp+36]
add edx, 40

View File

@ -98,7 +98,7 @@ mres:
save_draw_mouse:
cmp [set_hw_cursor], 0
jz .no_hw_cursor
je .no_hw_cursor
pushad
mov [X_UNDER],ax

View File

@ -444,9 +444,13 @@ select_cursor:
align 4
proc init_cursors
cmp [SCR_MODE],word 0x13
jbe .fail
test word [SCR_MODE], 0x4000
jz .fail
movzx eax, byte [ScreenBPP]
mov ebx, [BytesPerScanLine]
cmp eax, 32

View File

@ -18,6 +18,29 @@
$Revision$
TRIDENT equ 0
S3_VIDEO equ 0
INTEL_VIDEO equ 0
if TRIDENT
if S3_VIDEO or INTEL_VIDEO
stop
end if
end if
if S3_VIDEO
if TRIDENT or INTEL_VIDEO
stop
end if
end if
if INTEL_VIDEO
if S3_VIDEO or TRIDENT
stop
end if
end if
; A complete video driver should include the following types of function
;
; Putpixel
@ -35,28 +58,35 @@ $Revision$
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
; set_bank for Trident videocards, work on Trident 9440
; modified by Mario79
;set_bank:
;cli
;cmp al,[BANK_RW]
;je retsb
;mov [BANK_RW],al
;push dx
;mov dx,3D8h
;out dx,al
;pop dx
;retsb:
;sti
;ret
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
; set_bank for S3 videocards, work on S3 ViRGE PCI (325)
; modified by kmeaw
if TRIDENT
set_bank:
pushfd
cli
cmp al,[BANK_RW]
je retsb
je .retsb
mov [BANK_RW],al
push dx
mov dx,3D8h
out dx,al
pop dx
.retsb:
popfd
ret
end if
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
; set_bank for S3 videocards, work on S3 ViRGE PCI (325)
; modified by kmeaw
if S3_VIDEO
set_bank:
pushfd
cli
cmp al,[BANK_RW]
je .retsb
mov [BANK_RW],al
push ax
push dx
@ -126,76 +156,89 @@ dec dx
pop cx
pop dx
pop ax
retsb:
.retsb:
popfd
ret
end if
;Set bank function for Intel 810/815 chipsets
; *****Modified by Protopopius, Russia.*****
; ********* http://menuetos.hut.ru **************
; ************************************************
;
;set_bank:
;cli
;cmp al,[BANK_RW]
;je retsb
;mov [BANK_RW],al
;push ax
;push dx
;mov dx,3CEh
;mov ah,al ; Save value for later use
;mov al,10h ; Index GR10 (Address Mapping)
;out dx,al ; Select GR10
;inc dl
;mov al,3 ; Set bits 0 and 1 (Enable linear page mapping)
;out dx,al ; Write value
;dec dl
;mov al,11h ; Index GR11 (Page Selector)
;out dx,al ; Select GR11
;inc dl
;mov al,ah ; Write address
;out dx,al ; Write the value
;pop dx
;pop ax
;retsb:
;sti
;ret
if INTEL_VIDEO
set_bank:
pushfd
cli
cmp al,[BANK_RW]
je .retsb
mov [BANK_RW],al
push ax
push dx
mov dx,3CEh
mov ah,al ; Save value for later use
mov al,10h ; Index GR10 (Address Mapping)
out dx,al ; Select GR10
inc dl
mov al,3 ; Set bits 0 and 1 (Enable linear page mapping)
out dx,al ; Write value
dec dl
mov al,11h ; Index GR11 (Page Selector)
out dx,al ; Select GR11
inc dl
mov al,ah ; Write address
out dx,al ; Write the value
pop dx
pop ax
.retsb:
popfd
ret
end if
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
;set_bank:
; cli
; cmp al,[BANK_RW]
; je retsb
; mov [BANK_RW],al
; push ax
; push dx
; mov ah,al
; mov dx,0x03D4
; mov al,0x39
; out dx,al
; inc dl
; mov al,0xA5
; out dx,al
; dec dl
; mov al,6Ah
; out dx,al
; inc dl
; mov al,ah
; out dx,al
; dec dl
; mov al,0x39
; out dx,al
; inc dl
; mov al,0x5A
; out dx,al
; dec dl
; pop dx
; pop ax
;
; retsb:
; ret
if (TRIDENT or S3_VIDEO or INTEL_VIDEO)
else
set_bank:
pushfd
cli
cmp al,[BANK_RW]
je .retsb
mov [BANK_RW],al
push ax
push dx
mov ah,al
mov dx,0x03D4
mov al,0x39
out dx,al
inc dl
mov al,0xA5
out dx,al
dec dl
mov al,6Ah
out dx,al
inc dl
mov al,ah
out dx,al
dec dl
mov al,0x39
out dx,al
inc dl
mov al,0x5A
out dx,al
dec dl
pop dx
pop ax
.retsb:
popfd
ret
end if
vesa12_drawbackground:
@ -290,8 +333,7 @@ vesa12_drawbackground:
mov ebx,edi
mul ebx
add eax, esi
add eax,esi
add eax,esi
lea eax, [VGABasePtr+eax+esi*2]
cmp [ScreenBPP],byte 24
jz v12bgl3
add eax,esi
@ -301,7 +343,7 @@ vesa12_drawbackground:
push ebx
push eax
sub eax,[LFBAddress]
sub eax,VGABasePtr
shr eax,16
call set_bank
@ -372,7 +414,7 @@ vesa12_drawbar:
dbpi2412:
add eax,[LFBAddress]
add eax,VGABasePtr
mov edi,eax
; x size
@ -449,7 +491,7 @@ dbpi24bit12:
xor edx,edx
mov eax,edi
sub eax,[LFBAddress]
sub eax,VGABasePtr
mov ebx,3
div ebx
add eax,WinMapAddress
@ -472,7 +514,7 @@ dbpi24bit12:
push edi
mov eax,edi
sub eax,[LFBAddress]
sub eax,VGABasePtr
shr eax,16
call set_bank
and edi,0xffff
@ -541,7 +583,7 @@ dbpi24bit12:
push ecx
mov eax,edi
sub eax,[LFBAddress]
sub eax,VGABasePtr
shr eax,2
add eax,WinMapAddress
mov ebx,[CURRENT_TASK]
@ -563,7 +605,7 @@ dbpi24bit12:
push edi
mov eax,edi
sub eax,[LFBAddress]
sub eax,VGABasePtr
shr eax,16
call set_bank
and edi,0xffff
@ -738,7 +780,7 @@ vesa12_putimage:
pi2412:
add eax,[LFBAddress]
add eax,VGABasePtr
mov edi,eax
; x size
@ -785,7 +827,7 @@ vesa12_putimage:
push ebx
mov edx,edi
sub edx,[LFBAddress]
sub edx,VGABasePtr
mov ebx,3
div ebx
add edx,WinMapAddress
@ -809,7 +851,7 @@ vesa12_putimage:
push edi
push eax
mov eax,edi
sub eax,[LFBAddress]
sub eax,VGABasePtr
shr eax,16
call set_bank
pop eax
@ -855,7 +897,7 @@ vesa12_putimage:
push ebx
mov edx,edi
sub edx,[LFBAddress]
sub edx,VGABasePtr
shr edx,2
add edx,WinMapAddress
mov ebx,[CURRENT_TASK]
@ -878,7 +920,7 @@ vesa12_putimage:
push edi
push eax
mov eax,edi
sub eax,[LFBAddress]
sub eax,VGABasePtr
shr eax,16
call set_bank
pop eax