Page 2 of 41

Posted: Sun Nov 19, 2006 4:45 pm
by Serge
Ghost
Я не знаю что точно делает xf86MapPciMem(,,,,) но думаю ты прав. Мой код отображает физическую память в адресное пространство ядра. У ATI (точно 9600 и х1600) регистры контроллера занимают адреса 0xF9000000-0xF900FFFF а сам адрес записан в pci 0x18 (0х10 LFB, 0х14 порты io). У ядра нет прямого доступа к этим физическим адресам потому что они не отражены в адресное пространство. AllocKernelSpace резервирует 64 Кб адресов (не физическую память) в куче ядра а MapPage(linear_addr, phisical_addr, page_flags) отображает страницы на нужные адреса. PG_SW - уровень привилегий супервизор + разрешена запись.

P.S.
Лучше zip, и какая ошибка в ядре?

Posted: Sun Nov 19, 2006 5:42 pm
by Ghost
http://iam.gorodok.net/NV.zip
Ощибка с зашитой портов (функ 46). Вызываем ф. 46 для диапазона 0xE0-0xE4 в aex возвращается какаято муть (не 0 и не 1), освобождаем порты тойже функцией(другой подфункцией), потом я случайно обратился к этим портам, (in al, 0xE0 etc) программа спокойко продолжила работу, в al считанное значение. С ядром из svn программа выподает в ощибкой 0D (по мойму зашита по привилегиям).

Posted: Sun Nov 19, 2006 6:10 pm
by Serge
Ghost
С драйвером я выложил тестовое ядро. Там для всез программ устанавливается IOPL3 так что они могут читать и писать любые порты и делать cli hlt :) А ф.46 осталась без изменений.

Posted: Sun Nov 19, 2006 7:31 pm
by Serge
Ghost
Посмотрел исходники. Для GForce альфа курсор похож на ATI ARGB 64*64. А=0хFF делает курсор сплошным А=0 прозрачным.
Только адрес курсора в видеопамяти устанавливается мудрено.

Posted: Mon Nov 20, 2006 8:00 am
by Mario79
Serge
Я так понял для X1300 эти драйвера не подойдут?

Posted: Mon Nov 20, 2006 8:52 am
by Serge
Mario79
Нет. Там совсем новое ядро и для нет неродных драйверов вообще.

Posted: Mon Nov 20, 2006 3:20 pm
by Serge
Нужна библиотека курсоров и разные курсоры в разных окнах? Можно менять форму курсора на лету при перемещении из одного окна в другое.

Posted: Mon Nov 20, 2006 4:11 pm
by Mario79
Serge
А для обычного Vesa это будет поддерживаться?

Posted: Mon Nov 20, 2006 4:36 pm
by Serge
Mario79
Можно и для обычного но надо будет переписать половину mousedrv.inc

Posted: Mon Nov 20, 2006 4:39 pm
by andrew_programmer
Если бы меняющийся курсор был и для VESA,то можно было бы для ANIMAGE сделать разные курсоры в соответствии с инструментом.Нажал карандаш - курсор ввиде карандаша.Нажал заливку курсор ввиде банки с краской.И так далее.

Posted: Mon Nov 20, 2006 7:18 pm
by Serge
andrew_programmer
В приципе можно. Vesa драйвер будет грузить курсоры в кучу ядра. Надо только переписать код вывода курсора на экран.

Posted: Mon Nov 20, 2006 7:58 pm
by Heavyiron
А где должен располагаться ati2d.obj: на /rd/1 или /rd/1/drivers?

Posted: Tue Nov 21, 2006 4:01 am
by Serge
Heavyiron
/rd/1/drivers. Если надо установить другой курсор переименуй его в user.cur и запиши на /rd/1/

Posted: Tue Nov 21, 2006 10:58 am
by Serge
andrew_programmer
Можешь рисовать курсоры.
Эта часть кода не готова, так что есть время для изменений.

load_cursor
eax=68
ebx=20
ecx = src
edx = (hotspot << 16) or flags

flags:
LOAD_FROM_FILE equ 0
src = путь к файлу курсора
hotspot игнорируется

LOAD_FROM_MEM equ 1
src = адрес курсора в памяти
hotspot игнорируется

LOAD_INDIRECT equ 2
src= образ курсора в формате ARGB 32Х32 пикселя
hotspot = (x<<8)or y
0<= x,y <=31

возвращаемое значение
еах = логический номер курсора или 0 в случае неудачи.
Всего можно загрузить 48 курсоров +16 зарезервированных системных
курсоров.

set_cursor
eax=68
ebx=21
ecx = логический номер курсора

возвращаемое значение
логический номер предыдущего курсора или 0

delete_cursor
eax=68
ebx=22
ecx = логический номер курсора

возвращаемое значение
общее кол-во загруженных курсоров или 0

Posted: Tue Nov 21, 2006 5:13 pm
by andrew_programmer
>Можешь рисовать курсоры.

Рисовать лучше всего получается у goglus-а :) (нет,я не перекладываю работу на других,просто говорю то,что есть).
Курсоры наверное лучше делать чёрно-белыми,чтобы места меньше занимали в коде.