Board.KolibriOS.org

Official KolibriOS board
It is currently Thu Oct 22, 2020 9:56 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 455 posts ]  Go to page Previous 124 25 26 27 2831 Next
Author Message
PostPosted: Mon Dec 29, 2008 4:49 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Перетащить можно только верхнее окно. Если окно перекрыто надо кликать два раза.


Top
   
PostPosted: Mon Dec 29, 2008 5:53 pm 
Offline
User avatar

Joined: Fri Jan 27, 2006 3:06 pm
Posts: 1072
Как по мне, можно даже 2 раза и не кликать, что мешает при первом клике на окне сразу выводить его на передний план и потом запоминать картинку в буфер? Это один из немногих случаев, где реакция должна быть не на отпускание, а именно на нажатие кнопки мыши. Хотя может я и ошибаюсь )

UPD: проверил в колибри - действительно перемещение неактивного окна возможно только по второму клику - надо править, ибо жутко неудобно. )


Top
   
PostPosted: Mon Dec 29, 2008 6:18 pm 
Offline

Joined: Wed Jun 04, 2008 10:16 pm
Posts: 174
У меня не только перемещение, но и закрытие/минимизация окна по второму клику.


Top
   
PostPosted: Mon Dec 29, 2008 6:50 pm 
Offline
User avatar

Joined: Fri Jan 27, 2006 3:06 pm
Posts: 1072
UPD2: Хм, зря бочки накатил на 415, это оказалось побочным эффектом 970 ревизии.


Top
   
PostPosted: Tue Dec 30, 2008 5:48 am 
Offline

Joined: Fri Nov 21, 2008 8:16 am
Posts: 180
Хмм...
А так не проще будет :?:
Code:
        cmp [bPressedMouseXY_W],1
        ja  @f
        inc [bPressedMouseXY_W]
        jnc @f
        mov eax,dword[MOUSE_X]
        mov dword[mx],eax
        @@:


Top
   
PostPosted: Thu Jan 01, 2009 3:39 am 
Offline

Joined: Fri Nov 21, 2008 8:16 am
Posts: 180
Может непонятно написал........... :wink:
((хотя мне казалось, что если для "посвященных" - совершенно достаточно))
Речь идет конкретно о kernel\trunk\gui>window.inc#lines=1209-1220


Top
   
PostPosted: Thu Jan 01, 2009 4:29 am 
Offline
User avatar

Joined: Fri Jan 27, 2006 3:06 pm
Posts: 1072
О чем речь понятно, я даже вчера сидел и сравнивал с тем, как сделано сейчас - выглядит проще, но есть один момент, который вводит меня в ступор:
вижу
Code:
        mov eax,dword[MOUSE_X]
        mov dword[mx],eax

но не вижу в таком случае еще и
Code:
        mov eax,dword[MOUSE_Y]
        mov dword[my],eax

Я чего-то не понимаю и так нужно, или эти строчки все же нужны?


Top
   
PostPosted: Thu Jan 01, 2009 11:39 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Heavyiron

mx my 16-ти битные переменные. Обе копируются одним dword


Top
   
PostPosted: Fri Mar 19, 2010 11:21 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Добавил в ядро функции для работы с мьютексами. Реализация взята из Linux, ABI gcc fastcall.
void __attribute__ ((fastcall)) mutex_init(struct mutex*);
void __attribute__ ((fastcall)) mutex_lock(struct mutex*);
void __attribute__ ((fastcall)) mutex_unlock(struct mutex*);
структура MUTEX определена в kernel32.inc.
Прежде чем использовать мьютекс его обязательно следует инициализировать вызовом mutex_init и только вызовом mutex_init.
Только один поток может захватывать мьютекс.
Множественные блокировки не допускаются.
Нельзя использовать мьютексы в обработчиках прерываний.


Top
   
PostPosted: Sat Apr 17, 2010 3:21 am 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1412
Ядро сейчас целиком влезает в первую 4Мб-страницу, но в init.inc до сих пор висит код дозагрузки "хвоста" в PSE-режиме:
Code:
           mov eax, 0x400000+PG_SW
           mov ecx, [tmp_page_tabs]    ;) однако [tmp_page_tabs] < 4M
           sub ecx, 0x400000            ;) отрицательное
           shr ecx, 12                  ;( а теперь еще и знак потерялся
           jmp .map_low
.no_PSE:
           mov eax, PG_SW
           mov ecx, [tmp_page_tabs]
           shr ecx, 12
.map_low:
           mov edi, [tmp_page_tabs]
@@:                                   ; заносим в таблицу хз сколько ненужных страниц
           stosd
           add eax, 0x1000
           dec ecx
           jnz @B

насколько я понимаю, этот рудимент остался от более рыхлой модели памяти, когда sys_pgmap лежала за пределами 4Mb:
diamond wrote:
начальный кусок системных адресов [OS_BASE, OS_BASE + a), где OS_BASE = 0x80000000 (const.inc), маппится на начало физической памяти [0,a) "почти тривиально" - вычитанием OS_BASE; в этот кусок входит само ядро и все системные таблицы (точный список в memmap.inc); длина куска a = 0x47F000 + (некоторая память для таблицы страниц, размер которой зависит от размера имеющейся памяти). Если процессор поддерживает страницы по 4 Мб (page-size extensions), то первые 4 Мб маппятся одной страницей...

попробовал фиксануть #1451 - у меня вроде работает. Следите за глюками

_________________
Евангелие от Иоанна: стих 1
Code:
; В начале было Слово:
B32:        mov     ax, os_stack       ; Selector for os


Top
   
PostPosted: Sat Apr 17, 2010 12:01 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
art_zh

Да, ядро сильно ужалось. Ветку .no_PSE: можно выкинуть, на таких процессорах Колибри не работает.


Top
   
PostPosted: Sat Apr 17, 2010 12:41 pm 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1412
Я никак не могу разобраться зачем ядру маппинг пустой зоны до HEAP_BASE - ради одного только tss?

Кстати, tss надо бы тоже внести в "большую" страницу: если верить fast_call_test, системные вызовы через int40 в ядре #1451 стали грузиться в полтора раза дольше. На sysenter/syscall вызовах переделка init.inc никак не сказалась.

_________________
Евангелие от Иоанна: стих 1
Code:
; В начале было Слово:
B32:        mov     ax, os_stack       ; Selector for os


Top
   
PostPosted: Sat Apr 17, 2010 2:11 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
art_zh

tss нельзя, в крайнем случае в самый хвост большой страницы,
или пометить страницу как глобальную. За tss идут две copy-on-write страницы с картой ввода вывода.

В полтора раза дольше по сравнению с чем ? tss при быстрых вызовах не используется. Так что врядли это связано с ним.


Top
   
PostPosted: Sat Apr 17, 2010 2:20 pm 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1412
в полтора раза дольше по сравнению с предыдущей версией.
tss используется при вызове через int40, и судя по сумасшедшей скорости вызова (почти также быстро как sysenter/sysexit) раньше постоянно сидела в кеше.
Теперь вызов int40 на моей керосинке занимает 330 тыс тактов вместо 200тыс раньше.
Время вызовов через sysenter и syscall заметно не изменилось (~200тыс тактов).


Top
   
PostPosted: Sat Apr 17, 2010 4:47 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
art_zh

Странно.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 455 posts ]  Go to page Previous 124 25 26 27 2831 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited