Page 1 of 41

Новые драйвера для ATI Radeon.

Posted: Mon Jan 03, 2005 5:04 pm
by Hex
Появились новые драйвера для владельцев карт ATI Radeon :!: .

Файлы:
kernel.zip:http://mikedld.50free.org/files/menuetos/kernel.zip
vmode.zip:http://mikedld.50free.org/files/menuetos/vmode.zip

Скриншот:
Image

Дополнительную иныормацию можно получить здесь:
http://menuetos.fastbb.ru/re.pl?-00000623-000-0-0-0-0-0

Posted: Wed Apr 26, 2006 11:23 am
by rabid rabbit
а с ними будет работать разрешение 1280х1024 true color? Не то на двух машинах, в которых установлены ATI Xpert2000 (ATI Rage 128 Pro) и ATI Radeon 7500, при выборе 1280х1024 Колибри стартует, но в нижней части экрана чёрная полоса и нет курсора мыши.

Posted: Fri Nov 17, 2006 4:59 pm
by Serge
http://infinity-sound.narod.ru/ati2d.7z аппаратный курсор для ATI 8500 - 9XXX. Если карта не определится то загрузится обычный курсор.

Posted: Fri Nov 17, 2006 5:48 pm
by O01eg
а для NVIDIA всё ждать и ждать...

Posted: Fri Nov 17, 2006 8:47 pm
by andrew_programmer
По исходникам я понял,что для работы с шиной PCI и памятью драйвер обращается к функциям в ядре.Нужно их где-то задокументировать,а иначе непонятно как под Колибри нужно драйверы писать.Я раньше вообще думал,что о доступе к PCI нужно заботиться самому.

Serge,а где ты информацию по ATI драйверам брал ?
А отладку драйвера проводил в досе или прямо в Колибри ?

Posted: Sat Nov 18, 2006 5:43 am
by Serge
При работе с АС97 я сделал три функции-оболочки для тех что есть в системе

proc pci_read32 stdcall, bus:dword, devfn:dword, reg:dword
proc pci_read8 stdcall, bus:dword, devfn:dword, reg:dword
proc pci_write8 stdcall, bus:dword, devfn:dword, reg:dword, val:dword

pci_api экспортируется напрямую.

из драверов они видны как
extrn PciApi
extrn PciRead32
extrn PciRead8
extrn PciWrite8

Источник старые исходники XFree и драйверы BeOC. Это была старая программа для нереального режима ДОС.
Код для работы с железом отлаживал в ДОС.
Потенциально должно работать с ATI 7500 - x300+ Точно не работает с x1000+.
Список железа есть в исходниках дрвйвера.

Ещё там есть код для аппаратного рисования закрашенных прямоугольников.
Возможно удасться сделать рисование произвольных линий.
Закрашивание кистями, блиттер и анимированные курсоры.
В новой версии можно будет загрузить собственный курсор (обычный Win 32х32 16 цветов).

BeOS aka Haiku
svn://svn.berlios.de/haiku/haiku/trunk/src/add-ons

Posted: Sat Nov 18, 2006 5:14 pm
by andrew_programmer
Serge,а ты не пробовал смотреть исходники драйвера DirectFrameBuffere-а ?
Там обращение к видеокартам происходит напрямую и код довольно понятный(на C).

Posted: Sat Nov 18, 2006 6:18 pm
by Ghost
А сорци ядра где? Я так понял что там добавлен указатель на SetHwCursor, через него всё и крутится, сорци бы постотреть, и пора бы kernel_export грузить из внешнего файла.

Posted: Sun Nov 19, 2006 1:31 am
by Serge
Исходники будут. В драйвере ошибка для 1280Х1024
изменения в ядре небольшие
mousedrv.inc
draw_mouse_under:
; return old picture

cmp [set_hw_cursor], 0
jz @F
ret
@@:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
save_draw_mouse:

cmp [set_hw_cursor], 0
jz @F
movzx ebx,word [0xfb0c]
movzx eax,word [0xfb0a]
push ebx
push eax
call [set_hw_cursor]
ret
@@:

set_hw_cursor - указатель на функцию драйвера и одновременно флаг аппаратного курсора.

Posted: Sun Nov 19, 2006 9:06 am
by Serge
Ghost
пора бы kernel_export грузить из внешнего файла
В смысле функции объявленные extrn?

Posted: Sun Nov 19, 2006 11:50 am
by Heavyiron
Благодаря усилиям Рудольфа, в разработке драйверов для nvidia в haiku продвинулись вроде дальше, чем для ATI. Правда он уже вроде отошел от дел :(

Posted: Sun Nov 19, 2006 12:35 pm
by Serge
Я бегло просмотрел дрова для NV - там нет аппаратого курсора. А вообще без доков сделать драйвер нереально.

Posted: Sun Nov 19, 2006 12:53 pm
by andrew_programmer
В исходниках библиотеки SVGAlib есть драйвер аппаратного курсора для NV.
Вот часть драйвера :

static int cursor( int cmd, int p1, int p2, int p3, int p4, void *p5) {
unsigned char *b1, *b2;
unsigned short *b3;
unsigned int i, j, k, l, c0, c1;

switch(cmd){
case CURSOR_INIT:
return 1;
case CURSOR_HIDE:
__svgalib_outcrtc(0x31,__svgalib_incrtc(0x31)&0xfe); /* disable cursor */
break;
case CURSOR_SHOW:
__svgalib_outcrtc(0x31,__svgalib_incrtc(0x31)|1); /* enable cursor */
break;
case CURSOR_POSITION:
v_writel(p1+(p2<<16), NV_PRAMDAC_GRCURSOR_START_POS);
break;
case CURSOR_SELECT:
i=memory/2-(p1+1);
if (chip==Riva128) {
__svgalib_outcrtc(0x31,(__svgalib_incrtc(0x31)&7)|(((~i)&0x1f)<<3));
} else {
__svgalib_outcrtc(0x31,(__svgalib_incrtc(0x31)&3)|(((~i)&0x3f)<<2));
}
#if 0
__svgalib_outcrtc(0x30,((~i)&0x3fc0)>>6);
#else
__svgalib_outcrtc(0x30,0);
#endif
break;
case CURSOR_IMAGE:
i=memory/2-(p1+1);
i=i*2048;
switch(p2) {
case 0: /* X11 format, 32x32 */
b3=malloc(2048);
b1=(unsigned char *)p5;
b2=b1+128;
c0=0x8000|GET15BITCOLOR((p3>>16)&0xff,(p3>>8)&0xff,p3&0xff);
c1=0x8000|GET15BITCOLOR((p4>>16)&0xff,(p4>>8)&0xff,p4&0xff);
l=992;
for(k=0;k<128;k++) {
int cc1=*(b1+k);
int cc2=*(b2+k);
for(j=0;j<8;j++) {
if(!(cc2&0x80)) *(b3+l)=0; else if (cc1&0x80)
*(b3+l)=c1; else *(b3+l)=c0;
l++;
if((l&0x1f)==0)l-=64;
cc2<<=1;
cc1<<=1;
}
}
memcpy(LINEAR_POINTER+i,b3,2048);
free(b3);
break;
case 1: /* nvidia 1555 format 32x32 */
memcpy(LINEAR_POINTER+i,p5,2048);
break;
}
break;
}
return 0;
}

Posted: Sun Nov 19, 2006 1:39 pm
by Serge
andrew_programmer
А будет этот код работать на современных картах, и 15-ти битный курсор в 32-х битном режиме?

Posted: Sun Nov 19, 2006 3:34 pm
by Ghost
Serge
http://www.gtlib.gatech.edu/pub/mandrak ... .0.src.rpm
Размер: 287 KБ (293 334 байт)

Там есть код для аппаратного курсора на NV (nv_cursor.c и riva_cursor.c), я с кодом думал сам разобраться, но у тебя думаю это получится быстрее. Или напиши что делает xf86MapPciMem(,,,,), я так понял в твоём коде ей соответствует код :

Code: Select all

           stdcall AllocKernelSpace, dword 0x10000
           test eax, eax
           jz .fail
           mov [ati_io], eax
           stdcall PciRead32, [bus], [devfn], dword 0x18
           and eax, 0xFFFF0000
           mov esi, eax
           mov edi, [ati_io]
           mov edx, 16
@@:     stdcall MapPage,edi,esi,PG_SW+PG_NOCACHE
	  add edi, 0x1000
           add esi, 0x1000
           dec edx
           jnz @B
P.S. Если будут проблемы с rpm, вот zip http://iam.gorodok.net/NV.zip.
P.P.S В твоём ядре ещё ощибка с зашитой портов и функ 46