Board.KolibriOS.org

Official KolibriOS board
It is currently Sun Feb 23, 2020 8:00 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 1138 posts ]  Go to page Previous 148 49 50 51 5276 Next
Author Message
PostPosted: Sat Apr 06, 2013 8:57 am 
Offline
User avatar

Joined: Mon Jul 25, 2011 6:22 pm
Posts: 93
Leency wrote:
Пытаюсь разобраться в функции 4, пишущей прямиком в память. Выходит кривая чёрная полоса.
Code:
   w = strlen(#text)*6;
   mem = malloc(w*9*4);
   for (i=0; i<w*9*4; i++) ESBYTE[mem+i]=0xFF; //делаем фон белым

   $mov eax, 4
   $mov ebx,0 << 16+0
   $mov ecx,0x88000000
   $mov edi, mem
   $mov edx, #text
   $int 0x40

   PutPaletteImage(mem,w,9,100,100,32,0); //рисуем, 32 - глубина цвета

Ссылка на Fn04 http://wiki.kolibrios.org/wiki/SysFn04/ru

_________________
Программист не тот, кто постоянно пишет КОД, а тот кто сможет понять чужой КОД!!!


Top
   
PostPosted: Sat Apr 06, 2013 12:09 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
А кто сказал, что 32 бита в результате? Я подозреваю, что там 24 бита и формат BGR - как в 7й функции.


Top
   
PostPosted: Sat Apr 06, 2013 12:33 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
SoUrcerer wrote:
А кто сказал, что 32 бита в результате? Я подозреваю, что там 24 бита и формат BGR - как в 7й функции.

Потому что я в документации написал, что там 32 бита и там на самом деле 32 бита.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Sat Apr 06, 2013 12:36 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Leency wrote:
Пытаюсь разобраться в функции 4, пишущей прямиком в память. Выходит кривая чёрная полоса.
Code:
   w = strlen(#text)*6;
   mem = malloc(w*9*4);


Документацию нужно читать, полностью:
Spoiler: Show
Quote:
* C=1, глубина точки = 32 бита, область пользователя выглядит так:
dword Xsize
dword Ysize

остаток области = Xsize * Y size * 4

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Sat Apr 06, 2013 12:46 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Наверное, должно быть как-то так:
Code:
mem = malloc(w*9*4 + 4 + 4);
;
mov eax, mem
mov edx, [w]
mov [eax], edx
mov [eax + 4], dword 9
;


Top
   
PostPosted: Sat Apr 06, 2013 4:57 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5083
Mario_r4 wrote:
Документацию нужно читать, полностью:
Quote:
* C=1, глубина точки = 32 бита, область пользователя выглядит так:
dword Xsize
dword Ysize

остаток области = Xsize * Y size * 4
Я уже написал обёртки ко многим библиотекам и практически ко всем функция Колибри (кроме работы с железом), но это описание поставило меня в тупик. Я прочитал полностью, несколько раз и смотрел код icon и для меня осталось загадкой что НАПИСАНО В ЭТОМ АБЗАЦЕ. Как вычислить Xsize и почему в malloc нужно ещё +4 или +8 - вообще не понимаю.

_________________
Через тернии к звездам


Top
   
PostPosted: Sat Apr 06, 2013 4:59 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Поскольку код ядра не знает размеры области (по X и Y) с которой работает, то ему нужно их как-то передать. Все регистры заняты -остается только в самой области передать.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Sat Apr 06, 2013 5:06 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5083
Тебе не кажется, что в функции 4 скрещено фактически две независимые функции, откуда нехватка регистров и как результат докуметация. Пока только одна программа использует рисование в память через 4 функцию можно было бы её разделить.

А пока что очень не помешал бы пример с "Hello World!".

_________________
Через тернии к звездам


Last edited by Leency on Sat Apr 06, 2013 5:13 pm, edited 1 time in total.

Top
   
PostPosted: Sat Apr 06, 2013 5:13 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Это ты еще спецификации на программирование железок не читал. Добро пожаловать в наш реальный дерьмовый мир!

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Sat Apr 06, 2013 5:15 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5083
Ответ "потому что жизнь говно" - не ответ :)

_________________
Через тернии к звездам


Top
   
PostPosted: Sat Apr 06, 2013 5:30 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Leency wrote:
Пока только одна программа использует рисование в память через 4 функцию можно было бы её разделить.

"Бритва" Уильям Оккама - сатирическое произведение в жанре нео-реализма.
Leency wrote:
А пока что очень не помешал бы пример с "Hello World!".

Мне некогда и неохота, и я считаю что документации достаточно. А здесь уже в ветке разжевал как никогда подробно. Если кто имеет желание - пусть напишет пример, можно даже на C--, но не я.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Sun Apr 07, 2013 7:17 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5083
Mario
Может быть, потом я создам тему "Как выжить в жестоком холодном мире" и ты дашь мне там парочку советов :D , но эта тема называется "Помогите новичку [в программировании]" и мне нужен был пример рабочего когда или расшифровка описания функции, а не сатирические книги или жизненная философия.

0CodErr
Написал в теме код и прислал мне в личку человеческое описание за что ему огромное спасибо:
Quote:
Как вычислить Xsize: это ширина области, она у тебя w
Почему в malloc нужно ещё +8: область пользователя представляет собой 2 подряд dword-a(8 байт) и далее саму область для рисования, размером Xsize * Y size * 4
В эти 2 dword-a нужно записать значения Xsize и Y size, то есть w и 9.

_________________
Через тернии к звездам


Top
   
PostPosted: Sun Apr 07, 2013 10:56 am 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Leency wrote:
Mario
или расшифровка описания функции

... и она была выдана.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Mon Apr 08, 2013 3:27 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5083
Начал читать книгу, которую мне посоветовл Mario по ассемблеру, not bad, но чувствуется, что книга расчитана на людей в теме (учащихся на факультетах IT). Я только в начале, но у меня уже over 9000 вопросов и, пожалуста, не нужно отвечать: "Ты до этого ещё дойдёшь в процессе чтения" или подобное. Только конкретика и попроще.
1. я обращал, что обработка строк (копирование например) во многих реализациях идёт через регистры ESI и EDI, почему? Они в данной задаче стравляются быстрее, чем через EAX?
2. есть у нас регистр EAX. Максимальное число, которое в него можно записать - это 2^32 степени?
3. Окей, пишем в EAX, допустим, 32000. Cколько теперь будет в AH и AL?
4. Обработка изображений в libimg идёт через обычные регистры или через MMX? Почему?

_________________
Через тернии к звездам


Top
   
PostPosted: Mon Apr 08, 2013 6:51 am 
Offline

Joined: Thu Feb 19, 2009 12:57 pm
Posts: 68
Утро, на работе делать нечего, отвечу то что знаю.
1. Потому что операции обработки строк (movs и иже с ними) используют именно эти регистры как указатель источника (source index, esi) и получателя (destination index, edi).
2. Максимальное беззнаковое число 2^32-1. Итого вместе с нулем 2^32 чисел.
3. Переводим в шестнадцатеричную систему: 7D00h, отсюда в AH - 7Dh, в AL - 00h


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 1138 posts ]  Go to page Previous 148 49 50 51 5276 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