Page 62 of 77

Re: Помогите новичку

Posted: Tue Nov 12, 2013 1:46 am
by Leency
Заменил

Code: Select all

    mov     eax, 68
    mov     ebx, 12
    mov     ecx, [fsize]
    int     0x40		   ;  -> allocate memory for file
    mov     [fptr], eax 	   ;  -> eax = pointer to allocated mem

    mov     eax, 70
    mov     ebx, file_info
    mov     dword[ebx],0
    int     0x40		   ; -> read file

    mov     [fsize],ebx
на

Code: Select all

	mov     eax, 68
	mov     ebx, 27
	mov     ecx, [file_name]
	int     0x40
	mov     [fsize],ebx
В итоге, не работает. Что я делаю не так? Нужна инициализация кучи и malloc для 68.12 ?

Re: Помогите новичку

Posted: Tue Nov 12, 2013 1:52 am
by GerdtR
А в [file_name] хранится указатель на начало строки с именем? Или это первый байт имени?

Re: Помогите новичку

Posted: Tue Nov 12, 2013 2:23 am
by 0CodErr
Возвращаемое значение:
* eax = указатель на загруженный файл или 0
* edx = размер загруженного файла или 0
Leency wrote:Код:
mov eax, 68
mov ebx, 27
mov ecx, [file_name]
int 0x40
mov [fsize],ebx

Re: Помогите новичку

Posted: Tue Nov 12, 2013 10:37 am
by Leency
Spoiler:Image
Спасибо.

Re: Помогите новичку

Posted: Tue Nov 12, 2013 2:15 pm
by CleverMouse
Leency wrote:Кто-то может объяснить, что делает эта функция? Чем она отличается от "70.0 - чтение файла с поддержкой длинных имён"? Тем, что во время загрузки файла может его распаковать?
Это костыль от Serge под загрузку PE из user-mode. При использовании он блокирует любые параллельные распаковки в ядре - в частности, блокирует запуск упакованных программ. Не нужно его использовать.

Re: Помогите новичку

Posted: Tue Nov 12, 2013 2:27 pm
by Leency
>> в частности, блокирует запуск упакованных программ.
Нужно пофиксить.

На данный момент распаковка длится милисекунды. Сама идея функции очень хороша. Можно basekus.kla и *.3ds в дистре держать упакованными.

Re: Помогите новичку

Posted: Tue Nov 12, 2013 2:47 pm
by CleverMouse
Leency wrote:>> в частности, блокирует запуск упакованных программ.
Нужно пофиксить.

На данный момент распаковка длится милисекунды. Сама идея функции очень хороша. Можно basekus.kla и *.3ds в дистре держать упакованными.
Нет. Нужно не пихать в ядро то, что можно сделать в библиотеке. И не использовать подобные функции, если их туда всё же запихнули. Файлы и так можно держать упакованными, код программ в любом случае потребуется менять.

Re: Помогите новичку

Posted: Fri Nov 15, 2013 9:24 pm
by Serge
CleverMouse wrote:Это костыль от Serge под загрузку PE из user-mode. При использовании он блокирует любые параллельные распаковки в ядре - в частности, блокирует запуск упакованных программ. Не нужно его использовать.
Это даже не серьёзно. Никаких параллельных распаковок в ядре нет, код распаковщика блокируется мьютексом. Продолжительность блокировки равна продолжительности распаковки. load_file_umode калька с load_file. С таким же основанием можно жаловаться на то, что запуск одной упакованной программы или драйвера или загрузка библиотеки блокирут запуск других упакованных программ драйверов и библиотек.
CleverMouse wrote:Нет. Нужно не пихать в ядро то, что можно сделать в библиотеке. И не использовать подобные функции, если их туда всё же запихнули. Файлы и так можно держать упакованными, код программ в любом случае потребуется менять.
Это не костыль под загрузку PE из user-mode. Функциональность - загрузка файлов с распаковкой есть в ядре уже 7 лет. Зачем от неё отказываться ? Если следовать этой логике, надо вернуться с самораспаковывающимся приложениям ?

Re: Помогите новичку

Posted: Fri Nov 15, 2013 10:11 pm
by 0CodErr
Вот здесь http://websvn.kolibrios.org/filedetails ... c&peg=4181 есть такие строки:

Code: Select all

        add     ax, 23  ; mouse cursor Y size
; ......................................
        add     ax, 15  ; mouse cursor X size
Откуда эти значения?

Re: Помогите новичку

Posted: Sat Nov 16, 2013 12:02 am
by lev
Похоже на живущий в ...\svn\kolibri\kernel\trunk\gui\mousepointer.inc курсор размером 16х24 без единичек.

Re: Помогите новичку

Posted: Wed Nov 20, 2013 8:19 pm
by 0CodErr
Serge wrote:Цитата:
Тогда остается предположение, что количество порожденных потоков на родительский поток величина конечная
Таких ограничений нет.
Я попробовал выводить на Board идентификаторы. Получаются разные значения.
Spoiler:Image
Spoiler:Image
Такой был код:
Spoiler:

Code: Select all

ORG 0
BITS 32
; --------------------------- ;
MENUET01       db 'MENUET01'
version        dd 1
program.start  dd START
program.end    dd END
program.memory dd END
program.stack  dd END
program.params dd 0
program.path   dd 0
; --------------------------- ;
START:
        mov    eax, 51
        mov    ebx, 1
        mov    ecx, THREAD
        xor    edx, edx
        int    64
        mov    edx, eax ; save in edx id
; --------------------------- ;
        mov    edi,  buffer
        mov    eax, "    "
        stosd
        stosd
        stosw
        xor    al, al
        stosb
        dec    edi
        dec    edi
        mov    ecx, 10
        mov    eax, edx ; edx = id
.int2str:
        xor    edx, edx
        div    ecx
        add    edx, 48
        mov    [edi], dl
        dec    edi
        test   eax, eax
        jnz    .int2str
; debug.print.line:
        mov    eax, 63
        mov    ebx, 1
        xor    ecx, ecx
        mov    esi, buffer
.next:
        mov    cl, [esi]
        jcxz   .done
        int    64
        inc    esi
        jmp    .next
.done:
        mov    cl, 13
        int    64
        mov    cl, 10
        int    64
; --------------------------- ;
        jmp    START
THREAD:
        or     eax, -1
        int    64
; --------------------------- ;
buffer: resb 11
END:
Во всех случаях прекращает работать мышь, а клавиатура иногда остаётся работать.
После вылета в окне CPU продолжается отрисовка, оставшиеся потоки так и не завершаются, cpu-usage у них 0.

Вот здесь вывод Board при запуске прошлого примера отличается(здесь вылет в kernel, а не application):
Spoiler:Image

Re: Помогите новичку

Posted: Thu Nov 21, 2013 4:29 pm
by e-andrew
Где в ядре находится цикл, который отправляет окнам событие 1?

Re: Помогите новичку

Posted: Sun Dec 15, 2013 11:40 pm
by mixator
Здравствуйте. Может кто-то расказать об рисовании GUI ?
- Где почитать?
- Как рисовать?
- Стандарты, где почитать?
- Система сигналов и обработчиков(или как гуи связать с кодом)
Буду очень благодарен за помощь.
ПС в гугле не забанили, но ничего толкового не нашел. а систему - не осилил.

Re: Помогите новичку

Posted: Sun Dec 15, 2013 11:44 pm
by Wildwest
Во-первых, посмотрите исходники уже готовых программ http://websvn.kolibrios.org/listing.php ... Kolibri+OS
Во-вторых, на каком языке собираетесь писать?

Re: Помогите новичку

Posted: Mon Dec 16, 2013 7:32 pm
by mixator
Wildwest wrote:Во-первых, посмотрите исходники уже готовых программ http://websvn.kolibrios.org/listing.php ... Kolibri+OS
Во-вторых, на каком языке собираетесь писать?
писать собираюсь на плюсах. Хочу сделать маленькое подтверждение или опровержение своей идеи. Идея состоит в концептуальной возможности использования интерпретатора html-подобного языка для построения интерфейсов
ПС. О qt слышал, это немного не то.