Появились новые драйвера для владельцев карт ATI Radeon .
Файлы:
kernel.zip:http://mikedld.50free.org/files/menuetos/kernel.zip
vmode.zip:http://mikedld.50free.org/files/menuetos/vmode.zip
Скриншот:
Дополнительную иныормацию можно получить здесь:
http://menuetos.fastbb.ru/re.pl?-00000623-000-0-0-0-0-0
Новые драйвера для ATI Radeon.
а с ними будет работать разрешение 1280х1024 true color? Не то на двух машинах, в которых установлены ATI Xpert2000 (ATI Rage 128 Pro) и ATI Radeon 7500, при выборе 1280х1024 Колибри стартует, но в нижней части экрана чёрная полоса и нет курсора мыши.
http://infinity-sound.narod.ru/ati2d.7z аппаратный курсор для ATI 8500 - 9XXX. Если карта не определится то загрузится обычный курсор.
а для NVIDIA всё ждать и ждать...
По исходникам я понял,что для работы с шиной PCI и памятью драйвер обращается к функциям в ядре.Нужно их где-то задокументировать,а иначе непонятно как под Колибри нужно драйверы писать.Я раньше вообще думал,что о доступе к PCI нужно заботиться самому.
Serge,а где ты информацию по ATI драйверам брал ?
А отладку драйвера проводил в досе или прямо в Колибри ?
Serge,а где ты информацию по ATI драйверам брал ?
А отладку драйвера проводил в досе или прямо в Колибри ?
При работе с АС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
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
Serge,а ты не пробовал смотреть исходники драйвера DirectFrameBuffere-а ?
Там обращение к видеокартам происходит напрямую и код довольно понятный(на C).
Там обращение к видеокартам происходит напрямую и код довольно понятный(на C).
А сорци ядра где? Я так понял что там добавлен указатель на SetHwCursor, через него всё и крутится, сорци бы постотреть, и пора бы kernel_export грузить из внешнего файла.
Исходники будут. В драйвере ошибка для 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 - указатель на функцию драйвера и одновременно флаг аппаратного курсора.
изменения в ядре небольшие
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 - указатель на функцию драйвера и одновременно флаг аппаратного курсора.
Ghost
В смысле функции объявленные extrn?пора бы kernel_export грузить из внешнего файла
Благодаря усилиям Рудольфа, в разработке драйверов для nvidia в haiku продвинулись вроде дальше, чем для ATI. Правда он уже вроде отошел от дел
Я бегло просмотрел дрова для NV - там нет аппаратого курсора. А вообще без доков сделать драйвер нереально.
В исходниках библиотеки 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;
}
Вот часть драйвера :
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;
}
andrew_programmer
А будет этот код работать на современных картах, и 15-ти битный курсор в 32-х битном режиме?
А будет этот код работать на современных картах, и 15-ти битный курсор в 32-х битном режиме?
Serge
http://www.gtlib.gatech.edu/pub/mandrak ... .0.src.rpm
Размер: 287 KБ (293 334 байт)
Там есть код для аппаратного курсора на NV (nv_cursor.c и riva_cursor.c), я с кодом думал сам разобраться, но у тебя думаю это получится быстрее. Или напиши что делает xf86MapPciMem(,,,,), я так понял в твоём коде ей соответствует код :
P.S. Если будут проблемы с rpm, вот zip http://iam.gorodok.net/NV.zip.
P.P.S В твоём ядре ещё ощибка с зашитой портов и функ 46
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.P.S В твоём ядре ещё ощибка с зашитой портов и функ 46
Who is online
Users browsing this forum: No registered users and 1 guest