Board.KolibriOS.org

Official KolibriOS board
It is currently Tue May 26, 2020 3:31 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 116 posts ]  Go to page Previous 1 2 3 4 5 68 Next
Author Message
 Post subject:
PostPosted: Thu Jun 15, 2006 4:26 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1601
Добавлена документация по новым подфункциям 5 и 6 функции 70. В текстовой версии (и в svn-версии) описана также новая функция 18.18 завершения процесса по PID.


Top
   
 Post subject:
PostPosted: Tue Jun 20, 2006 3:28 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1601
Обновление, теперь во все версии включено описание функции 18.18.


Top
   
 Post subject:
PostPosted: Fri Jun 23, 2006 12:55 pm 
Нашел небольшую ошибку в klbr_doc.chm - в функции 62/8,9,10 не сказано, что посылаемое значение записывается в dl/dx/edx.


Top
   
 Post subject:
PostPosted: Sun Jun 25, 2006 10:40 pm 
diamond
Нужно в документацию функции 70 добавить, что поддерживается не только RD, FD и HDx, но и CDx, для подфункций: 0,1,5.


Top
   
 Post subject:
PostPosted: Mon Jun 26, 2006 3:20 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1601
Включена документация по новой функции 70.7 (запуск приложения). В общем описании к 70-й функции добавлен пункт насчёт /CDx.
halyavin
Code:
sys_pci:
        call pci_api
        mov [esp+36], eax
        ret

Вроде бы никаких dl/dx/edx...

_________________
Ушёл к умным, знающим и культурным людям.


Top
   
 Post subject:
PostPosted: Mon Jun 26, 2006 5:58 pm 
diamond
В документацию 70 функции еще нужно добавить в примечаниях, что для подфункций 2, 6 доступ к CD не поддерживается по аппаратным причинам.


Top
   
 Post subject:
PostPosted: Fri Jun 30, 2006 4:05 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1601
halyavin
Ой, меня проглючило, там действительно на входе есть dl/dx/edx. Всё-таки у метода copy-paste (в данном случае с подфункций 4,5,6) есть отдельные недостатки. Спасибо.
Mario79
Спасибо за замечание, будет учтено в следующем обновлении.
all
Модификации в связи с новой моделью горячих клавиш (удалена 18.12, изменения в описании событий, функции 2, добавлены 66.3 и 66.4, удалено одно из замечаний в 21.2). Восстановлена документация по 59-й функции.

_________________
Ушёл к умным, знающим и культурным людям.


Top
   
 Post subject:
PostPosted: Wed Aug 09, 2006 6:53 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1601
Обновление в документации. Добавлено замечание про CD. Удалено замечание в описании функции 18.6. Несколько мелких исправлений. В описании старых функций работы с рамдиском добавлено замечание о неподдерживаемости папок. Описание функции 4 скорректировано для соответствия с текущей реализацией. Кстати, текущая реализация нелогична - она прекращает вывод по завершающему нулевому символу, но тем не менее требует длину в esi. Если уж так хочется выводить ASCIIZ-строки, логичней было бы предусмотреть, например, старший бит ecx - если он установлен, то не надо задавать esi, поскольку конец строки определяется нулевым символом, а если сброшен, то выводится ровно esi символов. Может, так и сделать? (Даже интересно, кто не проигнорирует этот вопрос? Mario79 наверняка ответит, а вот остальные очень ленивы...)

_________________
Ушёл к умным, знающим и культурным людям.


Top
   
 Post subject:
PostPosted: Wed Aug 09, 2006 7:02 pm 
>Кстати, текущая реализация нелогична - она прекращает вывод по завершающему нулевому символу, но тем не менее требует длину в esi.

Если что раньше длина или \0, то имхо это не баг а фича.


Top
   
 Post subject:
PostPosted: Wed Aug 09, 2006 7:25 pm 
nn2
Вопрос не в правильности процедуры, а в ее непродуманности.
То, что предлагает Diamond уменьшает размер кода приложения, так как если текст ограничивать определенным символом, то задавать длину вывода становится излишним.

diamond
Quote:
Даже интересно, кто не проигнорирует этот вопрос? Mario79 наверняка ответит, а вот остальные очень ленивы...

Как говорил Черномырдин "Мне лучше промолчать, иначе опять, что ни будь скажу..."


Top
   
 Post subject:
PostPosted: Wed Aug 09, 2006 7:32 pm 
ИМХО, ничо так поведение. Когда консоль писал пользовалса этой фичей :)

Нет ли приложений полагающихся на это поведение? А так вполне можно ^_~


Top
   
 Post subject:
PostPosted: Wed Aug 09, 2006 8:26 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
diamond
Может сделать в стиле Win: esi = -1 - строка завершается нулем и система сама определяет её длину, иначе esi = длина строки в символах.


Top
   
 Post subject:
PostPosted: Thu Aug 10, 2006 2:23 pm 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
Mario79 - если передавать в eсх значение, то код увеличится как минимум на проверку. Можно вариант в студию ?
Мы его детально обсудим.

вот текущий код:
Code:
dtext.lnew:
        test   esi, esi    ; zero length ?
        jnz    @f
        jmp    dtext.output_end
      @@:

        movzx  edx,byte [ebp] ;edx=ascii code
        test   edx,edx
        jz     dtext.output_end
        test   ecx,0x10000000
        jnz    dtext.letnew2

        align 4
      .letnew:

Как видно, в начале проверяется не равна ли длинна строки 0, затем проверяется на 0 символ, загруженный из строки.
к особенности данной функции стоит отнести то, что в ней размыты границы между двумя возможностями. Т.е. условия вывода строк с фиксированной строкой выполнится в полной мере, если в последовательности ASCII строки не будет 0.
ASCII строка не выведется полностью, если в esi будет значение меньше реальной длинны выводимой строки.
Данную особенность можно назвать фитчей, а можно и размытостью, почему я уже написал.
Я думаю стоит определиться.
1) Даже если реализовать вариант предложенный diamond, потребуется проверка
2) Если передавать в esi = -1, то система просто выведет ASCII строку, завершающуюся 0. По сути этот вариант уже реализован, только ASCII строка выведется в любом случае, если в esi загружено число больше или равно длины ASCII строки.


Top
   
 Post subject:
PostPosted: Thu Aug 10, 2006 5:30 pm 
<Lrz>
Я написал:
Quote:
То, что предлагает Diamond уменьшает размер кода приложения

Я ничего не говорил про ядро.
Для того что предложил diamond вполне допустимо сделать две отдельные процедуры в ядре. Немного увеличив код ядра мы можем гораздо больше выиграть на сокращении кода приложений. Вызов mcall 4 достаточно часто встречается в приложениях. Причем потери скорости будут несущественными, если их вобще удастся замерить.


Top
   
 Post subject:
PostPosted: Fri Aug 11, 2006 3:27 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1601
Скорректировано описание 0-й функции, добавлено описание новой функции 71.1.
(Кстати, текущая реализация последней не возвращает значения.)
По поводу 4-й функции. Такое поведение было добавлено уже после дистрибутива 0.5.8.1 (в ревизии 106), так что приложений, полагающихся на эту особенность, быть ещё не должно. Поэтому я и предлагаю это изменить, пока не поздно. Сейчас я буду с кодом в руках доказывать остальным то, что сразу понял Mario79.
Code:
mov eax,4
mov ebx,100*65536+100 ; x=y=100
mov ecx,0x10808080 ; font=1, color=0x808080
mov edx,string
mov esi,string.len
int 0x40
...
string db 'Some string'
.len = $-string

Это нормальный, работающий с давних пор код.
Code:
...
mov esi,string.len
...
string db 'Some string',0,'continued...'
.len = $-string

Этот код до ревизии 106 выведет всю строку (включая 'continued'), нулевой символ будет выведен как пробел. Начиная с ревизии 106 он выведет только первую часть. Вопрос на понимание материала: какой вариант имел в виду программист, писавший такой код?
Code:
...
mov edx,string
mov esi,-1
int 0x40
...
string db 'ASCIIZ-string',0

Вот как предлагается писать для вывода ASCIIZ-строк в текущей версии ядра.
А теперь согласитесь, что в этих целях с точки зрения программы было бы логичнее писать, например, так:
Code:
mov eax,4
mov ebx,100*65536+100 ;x=y=100
mov ecx,0x90808080 ;font=1, старший бит установлен=ASCIIZ-строка, color=0x808080
mov edx,string
int 0x40
...
string db 'ASCIIZ-string',0

При этом остаётся полная совместимость со старым ядром и для вывода ASCIIZ-строк не нужна явно лишняя инструкция заполнения esi (5 байтов или 3 байта с включённой оптимизацией, умножить на количество вызовов функции 4 в программе).

_________________
Ушёл к умным, знающим и культурным людям.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 116 posts ]  Go to page Previous 1 2 3 4 5 68 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 3 guests


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